Problem mit der Datenbankabfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit der Datenbankabfrage

    Hallo!

    Ich benutze ein Datenbank Script namens ABSTRACT DB. Indem ich beim index.phtml zum Beispiel "?search_criteria=Stadt&search_value=Irgendeine" dahinterhänge sucht dieses Skript in der MySQL Datenbank nach in der Spalte "Stadt" nach allen mit dem Namen "Irgendeine".
    Wenn ich aber noch spezifischer suchen möchte und z.B. noch eine Abfrage "&search_criteria=Art&search_value=Restaurant" dahinterhänge sucht er nur noch nach dem letzteren Kriterien und nicht mehr nach der Stadt. Wie kann das sein?

    Wie schaffe ich es, eine mehrabfrage zu aktivieren. Untenstehend habe ich das index.phtml Skript beigefügt, ich hoffe das dieses reicht. Danke schonmal im Vorraus!

    -----------------------------------------------------
    include("../modules/db/include.phtml");
    include("../tools/template.phtml");

    $db=new db();
    $db->open();

    $query_head="select ID, Name, Stadt, Kategorie, Art, Adresse, PLZ, Telefon, Zeiten, Kommentar, Preise, Web from ausgehen";

    if ($search_criteria) {
    $query_string=$query_head."
    where LOWER(".$search_criteria.") LIKE
    LOWER('%".ereg_replace("'","''",$search_value)."%')";

    } else {
    if (!$firstletter) {
    $firstletter="A";
    }
    $query_string=$query_head."
    where LOWER(name) like LOWER('$firstletter%')";
    }
    $query_string.=" order by name";

    if (($query=new query($db, $query_string)) && $query->getrow()) {
    do {
    $ID[]=$query->field("ID");
    $Name[]=$query->field("Name");
    $Stadt[]=$query->field("Stadt");
    $Kategorie[]=$query->field("Kategoie");
    $Art[]=$query->field("Art");
    $Adresse[]=$query->field("Adresse");
    $PLZ[]=$query->field("PLZ");
    $Telefon[]=$query->field("Telefon");
    $Zeiten[]=$query->field("Zeiten");
    $Kommentar[]=$query->field("Kommentar");
    $Preise[]=$query->field("Preise");
    $Web[]=$query->field("Web");
    } while ($query->getrow());
    }

    echo EvalTemplate("index.tmpl","\$ID, \$Name, \$Stadt, \$Kategorie, \$Art, \$Adresse, \$Telefon, \$PLZ, \$Zeiten, \$Kommentar, \$Preise, \$Web");

    $db->close();
    ?>
    -----------------------------------------------------

  • #2
    Hi,

    wenn du denselben Parameter in der URL hintereinanderhängst, dann überschreibt der zweite den ersten, also mußt du "?search_criteria1=Stadt&search_value1=Irgendeine&search_criteria2=Art&search_value2=Restaurant" ranhängen. Allerdings muß hier auch der Code angepaßt werden, so daß nicht nur ein Parameter in den Query eingebaut wird. Hier stellt sich die Frage, ob es ein AND oder ein OR sein soll. Ich gehe jetzt mal von einem logischen UND aus:
    Code:
    include("../modules/db/include.phtml"); 
    include("../tools/template.phtml"); 
    
    $db=new db(); 
    $db->open(); 
    
    $query_head="select ID, Name, Stadt, Kategorie, Art, Adresse, PLZ, Telefon, Zeiten, Kommentar, Preise, Web from ausgehen"; 
    
    if ($search_criteria1 || $search_criteria2) {
    $query_string=$query_head." where ";
    if ($search_criteria1) { 
    $query_string.=" (LOWER(".$search_criteria1.") LIKE LOWER('%".ereg_replace("'","''",$search_value1)."%'))"; 
    } 
    if ($search_criteria2) {
    if ($search_criteria1) $query_string.=" AND "; 
    $query_string.=" (LOWER(".$search_criteria2.") LIKE LOWER('%".ereg_replace("'","''",$search_value2)."%'))"; 
    } 
    }
    else { 
    if (!$firstletter) { 
    $firstletter="A"; 
    } 
    $query_string=$query_head." 
    where LOWER(name) like LOWER('$firstletter%')"; 
    } 
    $query_string.=" order by name"; 
    
    if (($query=new query($db, $query_string)) && $query->getrow()) { 
    do { 
    $ID[]=$query->field("ID"); 
    $Name[]=$query->field("Name"); 
    $Stadt[]=$query->field("Stadt"); 
    $Kategorie[]=$query->field("Kategoie"); 
    $Art[]=$query->field("Art"); 
    $Adresse[]=$query->field("Adresse"); 
    $PLZ[]=$query->field("PLZ"); 
    $Telefon[]=$query->field("Telefon"); 
    $Zeiten[]=$query->field("Zeiten"); 
    $Kommentar[]=$query->field("Kommentar"); 
    $Preise[]=$query->field("Preise"); 
    $Web[]=$query->field("Web"); 
    } while ($query->getrow()); 
    } 
    
    echo EvalTemplate("index.tmpl","\$ID, \$Name, \$Stadt, \$Kategorie, \$Art, \$Adresse, \$Telefon, \$PLZ, \$Zeiten, \$Kommentar, \$Preise, \$Web"); 
    
    $db->close();
    alles andere müßte ja stimmen, hab nur die Zusammensetzung des Queries verändert.

    Kommentar


    • #3
      Wenn du mehrere Parameter mit dem gleichen Namen verschicken willst, ist die einfachste Methode, einfach ein Array zu übergeben:
      Code:
      <form action="foo.php3">
        <input type="text" name="bar[]">
        <input type="text" name="bar[]">
        <input type="text" name="bar[]">
        <input type="submit">
      </form>
      in foo.php3 hast du dann das Array $bar, das du auswerten kannst.

      Willst du Paare von Parametern einander zuordnen können, gibst du den Feldern einfach Indizes vor:

      Code:
      <form action="foo.php3">
        <input type="text" name="was[0]"> =
        <input type="text" name="wie[0]"><br>
        <input type="text" name="was[1]"> =
        <input type="text" name="wie[1]"><br>
        <input type="text" name="was[2]"> =
        <input type="text" name="wie[2]"><br>
        <br><input type="submit">
      </form>
      mein Sport: mein Frühstück: meine Arbeit:

      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

      Kommentar


      • #4
        Danke für eure Hilfe!

        Leider ist das was Titus gepostet hat, wahrscheinlich meiner mangelnden PHP Kenntniss, nicht für mich verständlich.

        Das was Brainbug gepostet hat habe ich ausprobiert und es funktioniert. Was muss ich einsetzten wenn ich einen dritten String einsetzen möchte?

        Vielleicht das?
        ---------------------------
        if ($search_criteria3) {
        if ($search_criteria1) $query_string.=" AND ";
        if ($search_criteria2) $query_string.=" AND ";
        $query_string.=" (LOWER(".$search_criteria3.") LIKE LOWER('%".ereg_replace("'","''",$search_value3)."%'))";
        }
        ---------------------------

        Kommentar


        • #5
          Weiss das keiner?

          Was das Keiner wie eine Dritte Abfrage heisst? Oder wie sie genau aussieht. Ich hab es schon ausprobiert und es hat nicht geklappt!

          Kommentar


          • #6
            ei doch:
            Code:
            if ($search_criteria3) {
            if ($search_criteria1 || $search_criteria2) $query_string.=" AND "; 
            $query_string.=" (LOWER(".$search_criteria3.") LIKE LOWER('%".ereg_replace("'","''",$search_value3)."%'))"; 
            }
            mußt du direkt unter die IF-Schleife von $search_criteria2 hängen.

            Alles klar???

            Kommentar

            Lädt...
            X