Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Suchscript

Einklappen

Neue Werbung 2019

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

  • Problem mit Suchscript

    Ich habe ein Formular mit einem Textfeld und vier Kombinationsfelder, welche die verschiedenen Felder einer Tabelle repräsentieren.

    Wenn ich ein oder mehrere Suchbegriffe im Textfeld eingebe und ein oder mehrere Kästchen auswähle, dann soll in den entsprechenden Feld(ern) nach den Suchbegriff(en) gesucht werden. Ich habe nun folgend zwei Scripten, das erste (Code #1) sucht in den Feldern und das zweite (Code #2) nach den Suchbegriffen, wobei man auch mehrere Begriffe eingeben kann:

    Code #1
    Code:
    $condition = "";
    if (isset($_POST['seite']))
    {
        $conditions = array();
        foreach ($_POST['seite'] as $value)
          $conditions[] = $value . " like '%" . $_POST[Suche] . "%'";
          
        $condition = "where " . implode (" and ", $conditions);
    }
    $query = "select * from Biblmes $condition";
    
    
    $result = mysql_query($query,$link);
    
    $num=mysql_num_rows($result);
    __________

    Code #2
    Code:
    $Suche = explode(" ", $_POST[Suche]);
    $i = 1;
    foreach($Suche as $anfrageteil)
    {
      $anfrage .= " Autor LIKE '%".$anfrageteil."%' ";
      if($i < count($Suche))
        $anfrage .= "AND";
      $i++;
    }
    $query = "SELECT * FROM Biblmes WHERE".$anfrage;
    $result = mysql_query($query, $link);
    
    
    while($row = mysql_fetch_array($result))
    {
    
         if (empty($row[Zitat])) {
            echo "$row[Autor] $row[Titel] $row[Buchdaten].
    
    ";
         }
         if (empty($row[Buchdaten])) {
            echo "$row[Autor] $row[Titel] $row[Zitat].
    
    ";
         }
    
    }

    Die Codes habe ich aus einem anderen Forum, da ich noch ein blutiger Anfänger bin. Es gelingt mir einfach nicht, die beiden Codes zu verbinden, ohne dass eine Fehlermeldung kommt. Ich möchte sowohl in den ausgewählten Feldern suchen, auch wenn mehrere Begriffe eingegeben werden. Ich hab folgendes probiert:

    Code:
    $condition = "";
    $Suche = explode(" ", $_POST[Suche]);
    $i = 1;
    $Suche as $anfrageteil
    
    
    if (isset($_POST['seite']))
    {
        $conditions = array();
        foreach ($_POST['seite'] as $value) and foreach ($Suche as $anfrageteil)
    
          $conditions[] = $value . " like '%" . $anfrageteil . "%'";
    
          $condition = "where " . implode (" and ", $conditions);
    
    $query = "select * from Biblmes $condition";
    
    $result = mysql_query($query, $link);
    
    while($row = mysql_fetch_array($result))
    {
    
         if (empty($row[Zitat])) {
            echo "$row[Autor] $row[Titel] $row[Buchdaten].
    
    ";
         }
         if (empty($row[Buchdaten])) {
            echo "$row[Autor] $row[Titel] $row[Zitat].
    
    ";
         }
    
    }
    Kann man foreach so nebeneinander stellen? Ich hoffe, jemand von euch kann mir helfen.

    Dareios


  • #2
    Nein, da foreach eine Kontrollstruktur ist die keinen Wert hat und somit auch nicht verknüpft werden kann.
    Geh das ganze doch rückwärts an, wie soll dein SQL-Befehl am Ende aussehen? Bastel genau dieses Statement nach, erstmal statisch mit nur einem Suchbegriff der in einer Spalte gesucht werden soll, später variabel, mehrere Suchbegriffe & mehrere Spalten.
    Alles Schritt für Schritt.

    Kommentar


    • #3
      Danke, aber ich kenn mich überhaupt nicht aus. Ich probiere schon seit Tagen herum, aber mir fällt nichts mehr ein. Mein SQL-Befehl im ursprünglichen Script lautete "SELECT * FROM Biblmes WHERE Autor LIKE %$_POST['Suche']%". Das Umbasteln hab ich ja im letzten Code versucht, dass ich mit zwei Variablen arbeite, aber ich weiß nicht, wie ich das mit dem foreach reinbringen soll.

      Dareios

      Kommentar


      • #4
        http://de.php.net/foreach

        Im Prinzip musst du dir doch nur Funktionen basteln, die das für dich übernehmen:
        PHP-Code:
        <?php
        // $_POST['spalten'] = array('vorname', 'nachname');
        // $_POST['begriffe'] = array('Schmidt', 'Schmitt');
        $sql sprintf("SELECT * FROM tabelle WHERE %s"search($_POST['spalten'], $_POST['begriffe']));
        ?>
        Die Funktion search muss oberhalb ihres Aufrufes deklariert werden, zum Durchlesen ists aber verständlicher wenn ich sie jetzt erst zeige:
        PHP-Code:
        <?php
        function search($spalten$begriffe) {
          if (!
        is_array($spalten) || !is_array($begriffe)) // muss Array sein, sonst zickt foreach
            
        return 0;
          
        $sql '0';
          foreach (
        $spalten as $spalte) {
            foreach (
        $begriffe as $begriff) {
              
        $sql .= sprintf(" OR %s LIKE '%%%s%%'"$spalte$begriff);
            }
          }
          return 
        $sql;
        }
        ?>
        Hoffe es ist kein Fehler dabei.
        Optional könnte man wohl noch eine AND Bedingung einbauen, da müsste man noch eine Klammerung einführen.

        Kommentar


        • #5
          Ich werd das mal ausprobieren. Vielen Dank.

          Kommentar


          • #6
            $_POST['begriffe'] musst du wohl noch beim Aufruf der search()-Funktion durch explode(' ', $_POST['begriffe']) ersetzen.

            Kommentar

            Lädt...
            X