[PHP] Suchfunktion - funktioniert nicht wie gewollt!

Dieses Thema im Forum "Webentwicklung" wurde erstellt von gh0stm4k3r, 1. August 2007 .

  1. 1. August 2007
    Suchfunktion - funktioniert nicht wie gewollt!

    Hallo,

    ich bin es wieder einmal und habe ein neues Problem:

    Ich habe auf meiner Homepage eine Art Suchfunktion. Diese habe ich auf zwei Orten drin, zum Einen ist eine kleine Suchfunktion rechts, welche nur nach dem NAMEN eines Eintrages sucht, dann gibt es noch die erweiterte Suchfunktion, die nach NAMEN uvm. sucht.

    Mein Problem ist: Wenn ich einen MySQL Query nur für die kleine Suchfunktion einrichte, funktioniert der auch wie gewollt, dieser würde dann zB so aussehen:

    PHP:
    $name  $_GET [ 'name' ];
    $suchen  "SELECT * FROM cards_cards WHERE name LIKE '% $name %'" ;
    $search  mysql_query ( $suchen ) OR die( mysql_error ());
    Wie schon gesagt, das funktioniert auch schön, wenn ich das ganze dann mit while($row ... ) usw. mache. Allerdings funktioniert die erweiterte Suchfunktion nicht, da ich dort noch folgende Werte ausser NAMEN habe:

    Und jetzt kommt das Problem: Wie zum Teufel soll der MySQL Query aussehen, damit die Suche funktioniert? Ich habe bisher nur folgendes:

    PHP:
    $name  $_GET [ 'name' ];
    $action  $_GET [ 'action' ];
    $cat  $_GET [ 'edition' ];
    $art  $_GET [ 'art' ];
    $seltenheit  $_GET [ 'seltenheit' ];
    $kartentext  $_GET [ 'kartentext' ];
    $eigenschaft  $_GET [ 'eigenschaft' ];
    $typ  $_GET [ 'typ' ];
    $effekt  $_GET [ 'effekt' ];
    $fusion  $_GET [ 'fusion' ];
    $ritual  $_GET [ 'ritual' ];
    $spirit  $_GET [ 'spirit' ];
    $toon  $_GET [ 'toon' ];
    $level  $_GET [ 'level' ];
    $atk  $_GET [ 'atk' ];
    $def  $_GET [ 'def' ];
    $symbol  $_GET [ 'symbol' ];

    $suchen  "SELECT * FROM cards_cards WHERE name LIKE '% $name %' AND cat = ' $cat ' AND art = ' $art ' AND seltenheit = ' $seltenheit ' AND text = ' $kartentext ' AND eigenschaft = ' $eigenschaft ' AND typ = ' $typ ' AND level = ' $level ' AND atk = ' $atk ' AND def = ' $def ' AND symbol = ' $symbol ' ORDER BY name ASC" ;
    $search  mysql_query ( $suchen ) OR die( mysql_error ());
    Allerdings funktioniert der natürlich nicht ganz wie gewollt. Denn wenn ich jetzt einen Namen eingebe, kommt einfach kein Suchresultat mehr. Auch wenn ich irgendeinen anderen Wert ausfülle, kommt nix ... Wäre nett, wenn mir jemand helfen könnte, wer etwas nicht kapiert hat, ich erkläre gerne zweimal ...

    MfG
     
  2. 1. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    Wenn ich statt AND einfach OR in den Query einsetze, dann liest der mir bei der Suchanfrage ALLES aus, statt nur die gewünschten Dinge -.-'

    MfG
     
  3. 1. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    Huhu,
    naja du hast 3 logische Operatoren in PHP, versuche alle 3 durch

    AND - OR - XOR

    laut meinem logischen Verständnis müsste es XOR sein....



    MfG
    Sancezz
     
  4. 1. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    ...oder wenns komplizierter sein soll, aber was sicher funzt:
    du machst immer eine if abfrage nachdem was übergeben wurde
    und dann immer
    PHP:
    if( isset( $_GET [ 'name' ]) &&  $_GET [ 'name' ] !=  "" )
    {
    $suchen  "SELECT * FROM cards_cards WHERE name LIKE ' { $_GET [ 'name' ]} '....." ;
    }
    if( isset(
    $_GET [ 'name' ]) &&  $_GET [ 'name' ] !=  ""  &&  $_GET [ 'action' ] !=  ""  && isset( $_GET [ 'action' ]))
    {
    $suchen  "SELECT * FROM cards_cards WHERE name LIKE ' { $_GET [ 'name' ]} ' AND action LIKE ' { $_GET [ 'action' ]} '....." ;
    etc ...
    is zwar seh umfangreich am ende, aber es würde so funktionieren! =)

    gruß

    gl
     
  5. 2. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    um nicht heterolords vorschlag aufzugreifen:
    PHP:
    // "simulierte" post-variablen
    $post [ muh ] =  0 ;
    $post [ blubb ] =  3 ;
    $post [ bleh ] =  "asd" ;
    $post [ foo ] =  "" ;

    $k = 0 ;
    $sql  "SELECT * FROM blah WHERE " ;
    foreach(
    $post  as  $key => $value ) {
        if(isset(
    $value ) && ( $value > ||  $value != "" )) {
            if(
    $k == 1 ) {
                
    $sql .=  "AND " ;
            }
            
    $sql .=  $key . "='" $value  . "' " ;
            
    $k = 1 ;
        }
    }
    ist schicker
     
  6. 2. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    @teh_boiiingerrr: Kannste mir deine Zeilen mal erklären? Ich bin erst seit wenigen Tagen im PHP Geschäft und würde schon gerne verstehen, was ich wie in mein Script integriere ...

    MfG
     
  7. 2. August 2007
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    Metafragen - Readfirst - RR:Board <- lesen, wiederkommen
     
  8. 2. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    und wie siehts mit injections aus?
     
  9. 2. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    funktionieren damit wunderbar

    aber da kann man ja dann ein array aufstellen mit erlaubten $key's und dann mit in_array() prüfen obs rein darf
    und natürlich mit mysql_real_escape_string($value) absichern
     
  10. 2. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    Ich werd hier keine Codes verteilen, aber ich geb dir mal einen guten Ratschlag... da du noch PHP Anfänger bist ist es noch umso leichter, das zu lernen^^

    Deinen Quellcode kommentieren.
    Ich selber kommentiere meine Codes sehr gerne.
    Bei einer 2.000 Zeilen kleinen Klasse sind davon mindestens 1.500 zeilen reiner Kommentar (na ok... bissl übertrieben^^)
    Zudem solltest du (vor allem bei Suchanfragen) immer eine logische reihenfolge der Abfragen überlegen.
    Was muss was haben, damit das und das gültig sind? <-- beispielhafter Pseudo-Satz

    POST dem GET vorziehen und SQL-Abfragen schöner machen.

    Nicht einfach nur schreiben, sondern den Query ein wenig "formatieren"

    PHP:
    $sql  "
    SELECT
      var.int as integer, var.row as nums, fo.get
    FROM
      variable var, footer fo
    WHERE
      fo.get IN (string)
    ORDER BY
      abs((lon*lat)/2) DESC
    "
    ;
    So als Beispielquery mal genommen.


    Das vll erstmal ein bissl üben, dann würde dir auch eine Suchfunktion schon einfacher fallen.
    Dokumentation ist 90% Code... außer du weißt jedes Detail nach 8 Stunden noch^^
     
  11. 2. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    ich würde dir noch raten, wenn du mit $_GET arbeitest die übergebenen Daten mit funktionen z.B. "strip_tags($_GET['....']) zu speichern.

    die funktion entfernt jeglichen code.
     
  12. 2. August 2007
    AW: Suchfunktion - funktioniert nicht wie gewollt!

    wie oben gesagt, die gehen wunderbar ich bau keine sicherheitsmechanismen in die codeschnipsel ein, die ich hier poste - dauert mir viel zu lang, es geht mir um die funktion an sich.
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.