Suche mit mehreren Eingabefeldern

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

  • Suche mit mehreren Eingabefeldern

    Hallo liebe PHPR-Community!

    Eines vorneweg: Ich bin ein ziemlicher Neuling (zumindest betrachte ich mich als solchen) was PHP und MySQL angeht. Nun stehe ich vor einem Problem, dass ich alleine nicht zu lösen weiß.

    Es geht um folgendes: Ich möchte eine Suchfunktion mit mehreren Eingabefeldern. Das Script ist soweit schon fertig, nur werden mir bei einer Suche alle Angaben, die darauf zutreffen, aufgelistet.

    Ein Beispiel soll es etwas deutlicher machen:
    - Mein Suchescript soll so funktionieren
    Gesucht wird: Max Mustermann aus Musterstraße 1, in 12345 Musterstadt

    - Mein Suchescript listet allerdings
    Ergebnis: Alle, die auf "Max" UND "Mustermann" UND "Musterstraße" UND ...


    Das soll so nicht sein. Ich würde mich freuen, wenn ihr mir hierbei Hilfestellung geben würdet!


    Hier das Script zu Beginn (mit Funktion, jedoch wie oben beschrieben)
    PHP-Code:
    <?php error_reporting(E_ALL);

            
    $db_host "";
            
    $db_user "";
            
    $db_pass "";
            
    $db_name "";
            
    $abf false;

            if (isset(
    $_POST["search"])) {

                
    $sql mysqli_connect($db_host$db_user$db_pass$db_name
                   or die(
    "Die Datenbank konnte nicht erreicht werden!");
        
                if (isset(
    $_POST["vname"]) and !empty($_POST["vname"])) {

                
    $vname trim($_POST["vname"]);
                
    $vname preg_replace("/[^a-z\s-]/i"""$vname);
                
    $abf "SELECT * FROM ... WHERE vname='".$vname."'";
                }

                if (isset(
    $_POST["nname"]) and !empty($_POST["nname"])) {

                
    $nname trim($_POST["nname"]);
                
    $nname preg_replace("/[^a-z\s-]/i"""$nname);
                
    $abf "SELECT * FROM ... WHERE nname='".$nname."'";
                }

                if (isset(
    $_POST["strnr"]) and !empty($_POST["strnr"])) {

                
    $strnr trim($_POST["strnr"]);
                
    $strnr preg_replace("/[^a-z0-9.,-_\s-]/i"""$strnr);
                
    $abf "SELECT * FROM ... WHERE strnr='".$strnr."'";
                }

                if (isset(
    $_POST["plz"]) and !empty($_POST["plz"])) {

                
    $plz trim($_POST["plz"]);
                
    $plz preg_replace("/[^0-9\s-]/i"""$plz);
                
    $abf "SELECT * FROM ... WHERE plz='".$plz."'";
                }

                if (isset(
    $_POST["ort"]) and !empty($_POST["ort"])) {

                
    $ort trim($_POST["ort"]);
                
    $ort preg_replace("/[^a-z\s-]/i"""$ort);
                
    $abf "SELECT * FROM ... WHERE ort='".$ort."'";
                }

                if (
    $sql != false and $abf != false) {

                if (
    $result mysqli_query($sql$abf)) {

                    
    $anzahl mysqli_num_rows($result);
                    echo 
    "<p>Es wurden <strong>".$anzahl."</strong> Datens&auml;tze gefunden!</p>\n";

                    echo 
    "<table border=\"1\">\n".
                    
    "<tr><th>Vorname</th><th>Nachname</th><th>Stra&szlig;e / Nr.</th><th>PLZ</th><th>Ort</th>\n";

                    while (
    $datensatz mysqli_fetch_assoc($result)) {

                    echo 
    "<tr>".
                    
    "<td>" .htmlspecialchars($datensatz["vname"], ENT_QUOTES'UTF-8')."</td>".
                    
    "<td>" .htmlspecialchars($datensatz["nname"], ENT_QUOTES'UTF-8')."</td>".
                    
    "<td>" .htmlspecialchars($datensatz["strnr"], ENT_QUOTES'UTF-8')."</td>".
                    
    "<td>" .htmlspecialchars($datensatz["plz"], ENT_QUOTES'UTF-8')."</td>".
                    
    "<td>" .htmlspecialchars($datensatz["ort"], ENT_QUOTES'UTF-8')."</td>".
                    
    "</tr>\n";
                    }
                
    mysqli_free_result($result);
                echo 
    "</table>\n";
                }
                 
    mysqli_close($sql);
                }
                else {echo 
    "Es wurden keine verwertbaren Daten vom Formular übermittelt.\n";}
            } 
            
    ?>
    So sieht das Script mittlerweile aus (nach unzähligen Selbstversuchen) - ohne Funktion; Auf meiner Homepage wird stattdessen eine Blankoseite angezeigt
    PHP-Code:
            <?php error_reporting(E_ALL);

                
    $db_host "";
                
    $db_user "";
                
    $db_pass "";
                
    $db_name "";
                
    $abf false;

                if (isset(
    $_POST["search"])) {

                
    $sql mysqli_connect($db_host$db_user$db_pass$db_name
                       or die(
    "Die Datenbank konnte nicht erreicht werden!");

                
    $abf"SELECT * FROM ... WHERE 1=1 ";

                if (isset(
    $_POST['vname'])) {
                
    $abf .= " AND `vname`= '" mysqli_real_escape_string($_POST['vname'])) . "'"
                }

                if (isset(
    $_POST["nname"])) {
                
    $abf .= " AND `nname`= '" mysqli_real_escape_string($_POST['nname'])) . "'";
                }

                if (isset(
    $_POST["strnr"])) {
                
    $abf .= " AND `strnr`= '" mysqli_real_escape_string($_POST['strnr'])) . "'";
                }

                if (isset(
    $_POST["plz"])) {
                
    $abf .= " AND `plz`= '" mysqli_real_escape_string($_POST['plz'])) . "'";
                }

                if (isset(
    $_POST["ort"])) {
                
    $abf .= " AND `ort`= '" mysqli_real_escape_string($_POST['ort'])) . "'";
                }

                    if (
    $sql != false and $abf != false) {

                    if (
    $result mysqli_query($sql$abf)) {

                    
    $anzahl mysqli_num_rows($result);
                    echo 
    "<p>Es wurden <strong>".$anzahl."</strong> Datensätze gefunden!</p>\n";

                    echo 
    "<table border=\"1\">\n".
                    
    "<tr><th>Vorname</th><th>Nachname</th><th>Straße / Nr.</th><th>PLZ</th><th>Ort</th>\n";

                    while (
    $datensatz mysqli_fetch_assoc($result)) {

                    echo 
    "<tr>".
                    
    "<td>" .htmlspecialchars($datensatz["vname"], ENT_QUOTES'UTF-8')."</td>".
                    
    "<td>" .htmlspecialchars($datensatz["nname"], ENT_QUOTES'UTF-8')."</td>".
                    
    "<td>" .htmlspecialchars($datensatz["strnr"], ENT_QUOTES'UTF-8')."</td>".
                    
    "<td>" .htmlspecialchars($datensatz["plz"], ENT_QUOTES'UTF-8')."</td>".
                    
    "<td>" .htmlspecialchars($datensatz["ort"], ENT_QUOTES'UTF-8')."</td>".
                    
    "</tr>\n";
                    }
                    
    mysqli_free_result($result);
                    echo 
    "</table>\n";
                    }
                     
    mysqli_close($sql);
                    }
                    else {echo 
    "Es wurden keine verwertbaren Daten vom Formular übermittelt.\n";}
                } 
                
    ?>
    Vielen lieben Dank für eure Hilfe!


    Liebe Grüße,
    N4N0
    Zuletzt geändert von N4N0; 02.02.2015, 18:50.
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

  • #2
    Du hast zwar das error-reporting aktiviert, die Ausgabe der Fehler (display_errors) ist jedoch vermutlich in der php.ini deaktiviert.

    Du kannst diese entweder direkt in der php.ini aktivieren, falls du Zugriff darauf hast oder dein Provider bietet dir die Möglichkeit eine eigene php.ini in deinem Webspace zu nutzen.

    Falls nicht, hast du ggf. die Möglichkeit display_errors via .htaccess zu aktivieren. Lege hierzu (falls nicht schon vorhanden) eine Datei mit dem Namen .htaccess im gleichen Verzeichnis, in dem auch dein Script liegt, mit folgendem Inhalt an:

    Code:
    php_flag display_errors on
    Wenn dein Provider das Überschreiben der entsprechenden Direktiven per .htaccess zulässt, solltest du dann eine Fehlermeldung statt nur einer weißen Seite angezeigt bekommen. Falls dein Provider das nicht zulässt, bekommst du stattdessen vermutlich die Meldung "Internal Server Error".



    BTW:
    Ansich ist das jetzt auch im falschen Forum, da dein Problem im Augenblick von PHP her rührt.
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Kommentar


    • #3
      Zuerst einmal danke für die Rückmeldung. Jedoch ist das nicht mein Problem (desweiteren blockt deine Vorgehensweise meine komplette Homepage).
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

      Kommentar


      • #4
        Zitat von N4N0 Beitrag anzeigen
        Jedoch ist das nicht mein Problem
        Doch!
        Zitat von N4N0 Beitrag anzeigen
        (desweiteren blockt deine Vorgehensweise meine komplette Homepage).
        Wie ich schon bemerkt hatte: es kann sein, dass dein Provider dir die Möglichkeit gesperrt hat, die entsprechenden Direktiven zu überschreiben.

        Entweder richtest du dir lokal so etwas wie XAMPP ein, aktivierst dir die Fehlerausgabe und kommst dadurch drauf was falsch läuft oder du gehst wie folgt vor:

        Du erstellst auf deinem Webspace im gleichen Verzeichnis, in dem den Problemscript liegt, eine Datei mit dem Namen debug.php mit folgendem Inhalt
        PHP-Code:
        <?php
        error_reporting  
        (E_ALL);
        ini_set ('display_errors'true);
        include(
        'deinProblemScript.php');
        ?>
        Dieses Script rufst du dann statt deinem ursprünglichem auf und du solltest eine Fehlermeldung erhalten die dir sagt, was falsch läuft.
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          PHP-Code:
          <?php error_reporting(E_ALL);

                      
          $db_host "";
                      
          $db_user "";
                      
          $db_pass "";
                      
          $db_name "";
                      
          $abf false;

                      if (isset(
          $_POST["search"])) {

                          
          $sql mysqli_connect($db_host$db_user$db_pass$db_name
                             or die(
          "Die Datenbank konnte nicht erreicht werden!");

                      
          $abf"SELECT * FROM ... WHERE 1=1 ";

                      if (isset(
          $_POST["vname"])) {
                  
          $abf .= " AND `vname`= '" mysqli_real_escape_string($_POST['vname']) . "'"
                      }

                      if (isset(
          $_POST["nname"])) {
                          
          $abf .= " AND `nname`= '" mysqli_real_escape_string($_POST['nname']) . "'";
                      }

                      if (isset(
          $_POST["strnr"])) {
                          
          $abf .= " AND `strnr`= '" mysqli_real_escape_string($_POST['strnr']) . "'";
                      }

                      if (isset(
          $_POST["plz"])) {
                          
          $abf .= " AND `plz`= '" mysqli_real_escape_string($_POST['plz']) . "'";
                      }

                      if (isset(
          $_POST["ort"])) {
                          
          $abf .= " AND `ort`= '" mysqli_real_escape_string($_POST['ort']) . "'";
                      }

                          if (
          $sql != false and $abf != false) {

                          if (
          $result mysqli_query($sql$abf)) {

                          
          $anzahl mysqli_num_rows($result);
                          echo 
          "<p>Es wurden <strong>".$anzahl."</strong> Datensätze gefunden!</p>\n";

                          echo 
          "<table border=\"1\">\n".
                          
          "<tr><th>Vorname</th><th>Nachname</th><th>Straße / Nr.</th><th>PLZ</th><th>Ort</th>\n";

                          while (
          $datensatz mysqli_fetch_assoc($result)) {

                          echo 
          "<tr>".
                          
          "<td>" .htmlspecialchars($datensatz["vname"], ENT_QUOTES'UTF-8')."</td>".
                          
          "<td>" .htmlspecialchars($datensatz["nname"], ENT_QUOTES'UTF-8')."</td>".
                          
          "<td>" .htmlspecialchars($datensatz["strnr"], ENT_QUOTES'UTF-8')."</td>".
                          
          "<td>" .htmlspecialchars($datensatz["plz"], ENT_QUOTES'UTF-8')."</td>".
                          
          "<td>" .htmlspecialchars($datensatz["ort"], ENT_QUOTES'UTF-8')."</td>".
                          
          "</tr>\n";
                          }
                          
          mysqli_free_result($result);
                          echo 
          "</table>\n";
                          }
                           
          mysqli_close($sql);
                          }
                          else {echo 
          "Es wurden keine verwertbaren Daten vom Formular übermittelt.\n";}
                      } 
                      
          ?>
          Okay, ich habe jetzt mal das befolgt, was du gesagt hast. Er hat mir tatsächlich ein "unexpected ')' at Line 51" ausgespuckt. Das habe ich behoben und mein Script wird zumindest angezeigt. Jedoch findet er mir keine Ergebnisse, obwohl diese in meiner Datenbank zuhauf vorhanden sind. Woran könnte das liegen? (Und sorry für meine "Dreistigkeit")

          Liebe Grüße
          N4N0
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

          Kommentar


          • #6
            Nachdem du jetzt weißt wie man an die Fehlermeldungen von PHP kommt, wirds Zeit sich das auch mal für mySql anzusehen:

            PHP: mysqli::$error - Manual
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              Zitat von Quetschi Beitrag anzeigen
              Nachdem du jetzt weißt wie man an die Fehlermeldungen von PHP kommt, wirds Zeit sich das auch mal für mySql anzusehen:

              PHP: mysqli::$error - Manual
              Okay das verstehe ich jetzt nur teilweise. Wie und wo soll ich das in meinem Script einbauen? Kannst du mir mal Hilfestellung geben?
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

              Kommentar


              • #8
                (leer)
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

                Kommentar


                • #9
                  Viele Wege führen nach Rom - in deinem Fall wäre folgende Art am naheliegendsten:
                  PHP-Code:
                  if ($result mysqli_query($sql$abf)) {
                  //dein Code, wenn alles passt
                  }
                  else
                  {
                  echo 
                  mysqli_error($sql);
                  //oft sieht man den Fehler gar noch leichter, wenn man die komplette Abfrage sieht, 
                  //die man sich zusammengebastelt hat. Deswegen zusätzlich:
                  echo "<hr />".$abf;

                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    So, also ich habe deine "Hilfestellung" entsprechend eingefügt, nur wird mir weder Fehler angezeigt, noch hat das Suche Script eine Funktion. Also selber Status wie vorher. Hier mein Script:

                    PHP-Code:
                            <?php error_reporting(E_ALL);

                                
                    $db_host "";
                                
                    $db_user "";
                                
                    $db_pass "";
                                
                    $db_name "";
                                
                    $abf false;

                                if (isset(
                    $_POST["search"])) {

                                    
                    $sql mysqli_connect($db_host$db_user$db_pass$db_name
                                       or die(
                    "Die Datenbank konnte nicht erreicht werden!");

                                
                    $abf"SELECT * FROM ... WHERE 1=1 ";

                                if (isset(
                    $_POST["vname"])) {
                                    
                    $abf .= " AND `vname`= '" mysqli_real_escape_string($_POST['vname']) . "'"
                                }

                                if (isset(
                    $_POST["nname"])) {
                                    
                    $abf .= " AND `nname`= '" mysqli_real_escape_string($_POST['nname']) . "'";
                                }

                                if (isset(
                    $_POST["strnr"])) {
                                    
                    $abf .= " AND `strnr`= '" mysqli_real_escape_string($_POST['strnr']) . "'";
                                }

                                if (isset(
                    $_POST["plz"])) {
                                    
                    $abf .= " AND `plz`= '" mysqli_real_escape_string($_POST['plz']) . "'";
                                }

                                if (isset(
                    $_POST["ort"])) {
                                    
                    $abf .= " AND `ort`= '" mysqli_real_escape_string($_POST['ort']) . "'";
                                }

                                    if (
                    $sql != false and $abf != false) {

                                    if (
                    $result mysqli_query($sql$abf)) {

                                    
                    $anzahl mysqli_num_rows($result);
                                    echo 
                    "<p>Es wurden <strong>".$anzahl."</strong> Datensätze gefunden!</p>\n";

                                    echo 
                    "<table border=\"1\">\n".
                                    
                    "<tr><th>Vorname</th><th>Nachname</th><th>Straße / Nr.</th><th>PLZ</th><th>Ort</th>\n";

                                    while (
                    $datensatz mysqli_fetch_assoc($result)) {

                                    echo 
                    "<tr>".
                                    
                    "<td>" .htmlspecialchars($datensatz["vname"], ENT_QUOTES'UTF-8')."</td>".
                                    
                    "<td>" .htmlspecialchars($datensatz["nname"], ENT_QUOTES'UTF-8')."</td>".
                                    
                    "<td>" .htmlspecialchars($datensatz["strnr"], ENT_QUOTES'UTF-8')."</td>".
                                    
                    "<td>" .htmlspecialchars($datensatz["plz"], ENT_QUOTES'UTF-8')."</td>".
                                    
                    "<td>" .htmlspecialchars($datensatz["ort"], ENT_QUOTES'UTF-8')."</td>".
                                    
                    "</tr>\n";
                                    }
                                    
                    mysqli_free_result($result);
                                    echo 
                    "</table>\n";
                                    }
                                    else
                                    {
                                    echo 
                    mysqli_error($sql);
                                    
                    //oft sieht man den Fehler gar noch leichter, wenn man die komplette Abfrage sieht, 
                                    //die man sich zusammengebastelt hat. Deswegen zusätzlich:
                                    
                    echo "<hr />".$abf;
                                    } 
                                     
                    mysqli_close($sql);
                                    }
                                    else {echo 
                    "Es wurden keine verwertbaren Daten vom Formular übermittelt.\n";}
                                } 
                                
                    ?>
                    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

                    Kommentar


                    • #11
                      Dann solltest du damit beginnen Testausgaben zu machen anhand derer du erkennen kannst, ob in deinem Script überhaupt deine jeweiligen Bedingungen erfüllt werden.
                      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                      Schön - etwas Geschichte kann ja nicht schaden.
                      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                      Kommentar


                      • #12
                        Also ich hab mir dazu entsprechende Seite durchgelesen, komme dennoch nicht wirklich weiter. Bin den Code auch mehrfach durchgegangen und es ist meiner Meinung nach alles stimmig. Ich komme einfach nicht weiter!

                        Könnte es in der Passage liegen?

                        PHP-Code:
                                        if ($sql != false and $abf != false) {

                                        if (
                        $result mysqli_query($sql$abf)) { 
                        Zuletzt geändert von N4N0; 05.02.2015, 00:59.
                        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

                        Kommentar


                        • #13
                          Mal ganz einfach und (hoffentlich) verständlich:
                          PHP-Code:
                          //Was steht überhaupt in $_POST?
                          var_dump($_POST)

                          if (isset(
                          $_POST["search"])) 
                          {
                          echo 
                          "komm ich bis hierher?";
                          //...
                          //...

                          if ($sql != false and $abf != false
                          {
                          echo 
                          "komm ich bis daher?";
                          //...
                          //...
                          }


                          Prüfe auf so eine Art jeweils deine if-Bedingungen die du im Script stellst.
                          Ich gehe momentan davon aus, dass dein Script gar nicht bis zur Datenbankabfrage kommt.
                          Ist das hier eigentlich 1:1 dein Code, den du auch verwendest?
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar


                          • #14
                            Zitat von N4N0 Beitrag anzeigen
                            Könnte es in der Passage liegen?
                            Frag das nicht uns – sondern mache, wie dir schon empfohlen wurde, Testausgaben in deinem Script.

                            Kontrolliere ob Variablen wirklich das enthalten, was du erwartest (print_r/var_dump), mache innerhalb der if/else-Zweige einfache Textausgaben die dir anzeigen, in welchen Zweig tatsächlich hinein gesprungen wird, etc.

                            Kurzum: Absolut grundlegendstes Debugging. Das wird dir hier keiner abnehmen, denn es ist deine Aufgabe als Programmierer/Ersteller des Scriptes.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              mysqli_real_escape_string erwartet als ersten Parameter eine mysqli-Instanz.

                              - PHP: mysqli::real_escape_string - Manual

                              (Habe ich das nicht neulich schon mal zu dem Code gepostet?)

                              Das hier…

                              PHP-Code:
                              $abf "SELECT * FROM ... WHERE 1=1 "
                              …steht natürlich nicht mit den Punkten im Code?

                              Kommentar

                              Lädt...
                              X