Suche mit mehreren Eingabefeldern

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

  • #31
    Zitat von N4N0 Beitrag anzeigen
    Also ich habe es nochmal entsprechend geändert und es funktioniert auch - Soll heißen: Er bringt mir entsprechende Meldung, wenn ein Feld nicht ausgefüllt wurde.
    Wie soll ich nun weiter verfahren?
    Jetzt prüfst du, ob diese einzelnen Werte leer sind, bevor du eine neue Teil-Bedingung für eben diesen Wert an deine Query anhängst.
    Zuletzt geändert von wahsaga; 06.02.2015, 11:31.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #32
      @ wahsaga
      Ich verstehe nicht, worauf du mit deiner Aussage über den mysqli_escape_string hinaus willst?

      Desweiteren: Ich habe doch bereits anhand des empty() geprüft, ob besagte Werte leer sind? Wieso soll ich das nochmal tun? Und wie soll diese Teil-Bedingung aussehen?

      @ Quetschi:
      Danke, aber solche Kommentare kannst du dir getrost verkneifen. Zumal ich in meinem allerersten Beitrag darüber aufgeklärt habe, dass ich ein Anfänger bin. Ich lasse mich eben nicht so leicht von etwas abschrecken, nur weil es nicht gleich funktioniert. In Bücher habe ich auch schon geschaut. Da mir das allerdings nur bedingt weitergeholfen hat, bin ich hierher gekommen, in der Hoffnung, hier Hilfe zu finden.

      Da haben solche Kommentare nichts verloren!
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

      Kommentar


      • #33
        Einer dieser Blöcke müsste in etwa so aussehen:

        PHP-Code:
            if (isset($_POST["vname"]) && !empty($_POST['vname'])) {
                
        $abf .= " AND `vname`= '" mysqli_real_escape_string($sql$_POST['vname']) . "'";
            } 
        (Man beachte die zwei Funktionsargumente beim mysqli_real_escape_string-Aufruf.)

        Kommentar


        • #34
          Zitat von mermshaus Beitrag anzeigen
          Einer dieser Blöcke müsste in etwa so aussehen:

          PHP-Code:
              if (isset($_POST["vname"]) && !empty($_POST['vname'])) {
                  
          $abf .= " AND `vname`= '" mysqli_real_escape_string($sql$_POST['vname']) . "'";
              } 
          (Man beachte die zwei Funktionsargumente beim mysqli_real_escape_string-Aufruf.)
          Danke für den Hinweis! Jetzt gleich die nächste Frage: Dass $sql mit dort drin steht sorgt dann dafür, dass das Script nicht mehr für SQL_Injection anfällig ist? Ich dachte, das wäre es vorher schon gewesen?
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

          Kommentar


          • #35
            Zitat von N4N0 Beitrag anzeigen
            Ich verstehe nicht, worauf du mit deiner Aussage über den mysqli_escape_string hinaus willst?
            Darauf: http://www.php-resource.de/forum/sql...tml#post670475

            Desweiteren: Ich habe doch bereits anhand des empty() geprüft, ob besagte Werte leer sind? Wieso soll ich das nochmal tun?
            Du sollst es nicht noch mal tun – sondern ein mal, bevor du eine neue
            Code:
            AND foo = "wert"
            -Teilbedingung an deine Query anfügst – denn genau die willst du doch nicht haben, wenn der Wert „leer“ ist.

            Und wie soll diese Teil-Bedingung aussehen?
            Die hast du doch bereits … es kommt nur darauf an, sie eben nicht anzufügen in den Fällen, wo es gar keinen Sinn ergibt.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #36
              Zitat von N4N0 Beitrag anzeigen
              Da haben solche Kommentare nichts verloren!
              Du schreist hier nach Hilfe, ignorierst aber die Hälfte von dem, was dir hier gesagt wird - scheinbar weißt du es besser - oder eben auch nicht ...
              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


              • #37
                Zitat von N4N0 Beitrag anzeigen
                Danke für den Hinweis! Jetzt gleich die nächste Frage: Dass $sql mit dort drin steht sorgt dann dafür, dass das Script nicht mehr für SQL_Injection anfällig ist? Ich dachte, das wäre es vorher schon gewesen?


                PHP: mysqli::real_escape_string - 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


                • #38
                  Leute vielen Dank für eure Hilfe! Das Script macht nun, was es soll.
                  Allerdings bringt es mir alle Datenbankeinträge, wenn ich jedes Feld
                  leer lasse und auf "Suchen" klicke.

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

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

                              
                              if (isset(
                  $_POST["search"])) {
                                  echo 
                  "<p><br /></p><hr /><hr />Anfrage - Check (1/3)<hr /><hr /><br />";
                                  
                                  
                  $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"]) && !empty($_POST['vname'])) {
                                  
                  $abf .= " AND `vname`= '" mysqli_real_escape_string($sql$_POST['vname']) . "'";
                              }
                                  if (empty(
                  $_POST["vname"])) {
                                  echo 
                  "<p><br /></p><hr /><hr />Das Feld Vorname wurde nicht verwendet!<hr />";
                                  }

                              if (isset(
                  $_POST["nname"]) && !empty($_POST['nname'])) {
                                  
                  $abf .= " AND `nname`= '" mysqli_real_escape_string($sql$_POST['nname']) . "'";
                              }
                                  if (empty(
                  $_POST["nname"])) {
                                  echo 
                  "<hr />Das Feld Nachname wurde nicht verwendet!<hr />";
                                  }

                              if (isset(
                  $_POST["strnr"]) && !empty($_POST['strnr'])) {
                                  
                  $abf .= " AND `strnr`= '" mysqli_real_escape_string($sql$_POST['strnr']) . "'";
                              }
                                  if (empty(
                  $_POST["strnr"])) {
                                  echo 
                  "<hr />Das Feld Straße und Nr. wurde nicht verwendet!<hr />";
                                  }
                                  
                              if (isset(
                  $_POST["plz"]) && !empty($_POST['plz'])) {
                                  
                  $abf .= " AND `plz`= '" mysqli_real_escape_string($sql$_POST['plz']) . "'";
                              }
                                  if (empty(
                  $_POST["plz"])) {
                                  echo 
                  "<hr />Das Feld PLZ wurde nicht verwendet!<hr />";
                                  }

                              if (isset(
                  $_POST["ort"]) && !empty($_POST['ort'])) {
                                  
                  $abf .= " AND `ort`= '" mysqli_real_escape_string($sql$_POST['ort']) . "'";
                              }
                                  if (empty(
                  $_POST["ort"])) {
                                  echo 
                  "<hr />Das Feld Ort wurde nicht verwendet!<hr /><hr /><p><br /><br /></p>";
                                  }

                                  if (
                  $sql != false and $abf != false) {
                                      echo 
                  "<hr /><hr />Verarbeitung - Check (2/3)<hr />";

                                  if (
                  $result mysqli_query($sql$abf)) {
                                      echo 
                  "<hr />Ausgabe - Check (3/3)<hr /><hr /><p><br /></p>";

                                  
                  $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"])."</td>".
                                  
                  "<td>" .htmlspecialchars($datensatz["nname"])."</td>".
                                  
                  "<td>" .htmlspecialchars($datensatz["strnr"])."</td>".
                                  
                  "<td>" .htmlspecialchars($datensatz["plz"])."</td>".
                                  
                  "<td>" .htmlspecialchars($datensatz["ort"])."</td>".
                                  
                  "</tr>\n";
                                  }
                                  
                  mysqli_free_result($result);
                                  echo 
                  "</table>\n";
                                  }
                                  else
                                  {
                                  echo 
                  mysqli_error($sql);

                                  echo 
                  "<hr />".$abf;
                                  } 
                                   
                  mysqli_close($sql);
                                  }
                                  else {echo 
                  "Es wurden keine verwertbaren Daten vom Formular übermittelt.\n";}
                              }
                              
                  ?>
                  Hier kommt dann wohl

                  AND foo = "wert"
                  ins Spiel, richtig?
                  RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

                  Kommentar


                  • #39
                    Zitat von N4N0 Beitrag anzeigen
                    Allerdings bringt es mir alle Datenbankeinträge, wenn ich jedes Feld leer lasse und auf "Suchen" klicke.
                    Natürlich, weil deine einzige Bedingung in der WHERE-Klausel dann 1=1 lautet – und die ist für absolut jeden Datensatz erfüllt, ganz egal was dieser enthält.

                    Hier kommt dann wohl
                    AND foo = "wert"
                    ins Spiel, richtig?
                    Nein, falsch – die sind doch längst im Spiel … *seufz*

                    Das, was du hier anfügst:
                    PHP-Code:
                    if (isset($_POST["vname"]) && !empty($_POST['vname'])) {
                                    
                    $abf .= " AND `vname`= '" mysqli_real_escape_string($sql$_POST['vname']) . "'";
                                } 
                    sind doch deine einzelnen Teil-Bedingungen für die Abfrage einer bestimmten Spalte auf Gleichheit mit einem eingegebenen Wert (wenn dieser nicht leer ist).

                    Wenn du gar nicht suchen möchtest, wenn alle Felder leer gelassen wurden – dann musst du das natürlich noch extra prüfen, und in dem Fall dann gar nicht erst eine Datenbank-Abfrage machen, sondern stattdessen nur eine Fehlermeldung ausgeben o.ä.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #40
                      Okay und wenn ich jetzt sage, dass beispielsweise kein Feld leer bleiben darf. Welche Passage muss ich da ändern?
                      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

                      Kommentar


                      • #41
                        Du könntest zum Beispiel einfach in jeder der Bedingungen eine Zählervariable um 1 erhöhen und dann nach den Bedingungen überprüfen, ob der Wert der Anzahl der Felder entspricht. Falls nein, ist mindestens ein Feld leer.

                        Kommentar


                        • #42
                          Gibt's da nicht noch eine andere Möglichkeit? Im Sinne von: Ich ändere einfach ein paar schon vorhandene Dinge, wie beispielsweise ...

                          PHP-Code:
                          $abf"SELECT * FROM ... WHERE 1=1 "
                          Oder ist das noch umständlicher?
                          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

                          Kommentar


                          • #43
                            Was willst du denn machen, wenn alle Felder leer sind? Wenn du dann gar nicht erst in der Datenbank suchen willst, dann ist es ja wohl sinnfrei, an der Abfrage etwas zu ändern – das musst du dann schon vorher abfangen.

                            Alle Felder leer -> Meldung an den Benutzer,
                            andernfalls: Datenbankabfrage aus den übergebenen Werten zusammenbauen.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #44
                              Im Moment ist es so, dass wenn alle Felder leer sind und ich auf Suchen klicke, er mir ALLE Einträge in der Datenbank listet. Jetzt wollte ich einen Schritt in die andere Richtung machen und das Script so abändern, dass man alle Angaben machen muss, ansonsten der Hinweis kommt, dass "Feld XY auszufüllen" ist. Nur mit der Realisierung hapert es etwas.

                              // EDIT

                              Also ich habe jetzt mehrere Stunden (sieht man wahrscheinlich) damit zugebracht, Tutorials zu suchen und Bücher zu wälzen. Dies hat mir insofern geholfen, mein Script minimal zu verfeinern. Ich habe mich zudem auch daran orientiert, was du zu mir gemeint hast (Zitat "Änderung vor der Abfrage"). Allerdings besteht mein Problem (s. o.) leider immer noch. Hier der Code:


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

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

                                          
                                          if (isset(
                              $_POST["search"]) && trim($_POST["search"]) != "") {
                                              echo 
                              "<p><br>Ihre Suche brachte folgende <b>Ergebnisse</b>!<br></p>";
                                              
                                          if (!isset(
                              $_POST["search"])) {
                                              echo 
                              "<p><br>Bitte füllen Sie <b>alle</b> Felder aus!<br></p>";
                                              }
                                              
                                              
                              $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"]) && strlen(trim($_POST["vname"])) > 0) {
                                              
                              $abf .= " AND `vname`= '" mysqli_real_escape_string($sql$_POST['vname']) . "'";
                                              echo 
                              "<p>Sie suchten in <b>\"Vorname\"</b> nach <b>".$_POST["vname"]."</b>!</p>";
                                          }
                                              if (empty(
                              $_POST["vname"])) {
                                              echo 
                              "<p><hr>Das Feld <b>\"Vorname\"</b> wurde nicht verwendet!</p>";
                                              }

                                          if (isset(
                              $_POST["nname"]) && strlen(trim($_POST["nname"])) > 0) {
                                              
                              $abf .= " AND `nname`= '" mysqli_real_escape_string($sql$_POST['nname']) . "'";
                                              echo 
                              "<p>Sie suchten in <b>\"Nachname\"</b> nach <b>".$_POST["nname"]."</b>!</p>";
                                          }
                                              if (empty(
                              $_POST["nname"])) {
                                              echo 
                              "<p><hr>Das Feld <b>\"Nachname\"</b> wurde nicht verwendet!</p>";
                                              }

                                          if (isset(
                              $_POST["strnr"]) && strlen(trim($_POST["strnr"])) > 0) {
                                              
                              $abf .= " AND `strnr`= '" mysqli_real_escape_string($sql$_POST['strnr']) . "'";
                                              echo 
                              "<p>Sie suchten in <b>\"Straße und Nr.\"</b> nach <b>".$_POST["strnr"]."</b>!</p>";
                                          }
                                              if (empty(
                              $_POST["strnr"])) {
                                              echo 
                              "<p><hr>Das Feld <b>\"Straße und Nr.\"</b> wurde nicht verwendet!</p>";
                                              }
                                              
                                          if (isset(
                              $_POST["plz"]) && strlen(trim($_POST["plz"])) > 0) {
                                              
                              $abf .= " AND `plz`= '" mysqli_real_escape_string($sql$_POST['plz']) . "'";
                                              echo 
                              "<p>Sie suchten in <b>\"PLZ\"</b> nach <b>".$_POST["plz"]."</b>!</p>";
                                          }
                                              if (empty(
                              $_POST["plz"])) {
                                              echo 
                              "<p><hr>Das Feld <b>\"PLZ\"</b> wurde nicht verwendet!</p>";
                                              }

                                          if (isset(
                              $_POST["ort"]) && strlen(trim($_POST["ort"])) > 0) {
                                              
                              $abf .= " AND `ort`= '" mysqli_real_escape_string($sql$_POST['ort']) . "'";
                                              echo 
                              "<p>Sie suchten in <b>\"Ort\"</b> nach <b>".$_POST["ort"]."</b>!</p>";
                                          }
                                              if (empty(
                              $_POST["ort"])) {
                                              echo 
                              "<p><hr>Das Feld <b>\"Ort\"</b> wurde nicht verwendet!</p><hr><br>";
                                              }

                                              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"])."</td>".
                                              
                              "<td>" .htmlspecialchars($datensatz["nname"])."</td>".
                                              
                              "<td>" .htmlspecialchars($datensatz["strnr"])."</td>".
                                              
                              "<td>" .htmlspecialchars($datensatz["plz"])."</td>".
                                              
                              "<td>" .htmlspecialchars($datensatz["ort"])."</td>".
                                              
                              "</tr>\n";
                                              }
                                              
                              mysqli_free_result($result);
                                              echo 
                              "</table>\n";
                                              }
                                              else
                                              {
                                              echo 
                              mysqli_error($sql);

                                              echo 
                              "<hr />".$abf;
                                              } 
                                               
                              mysqli_close($sql);
                                              }
                                              else {echo 
                              "Es wurden keine verwertbaren Daten vom Formular übermittelt.\n";}
                                          }
                                          
                              ?>
                              Zuletzt geändert von N4N0; 07.02.2015, 01:07.
                              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

                              Kommentar


                              • #45
                                Wie gesagt: Eine Variante wäre es, eine Zählervariable in jedem if-Block, der einen Wert auf „ist gesetzt und nicht leer“ prüft, um 1 zu erhöhen. Entspricht der Wert nach allen Checks der Anzahl der Felder, sind alle Felder gesetzt und nicht leer. Ansonsten nicht.

                                Kommentar

                                Lädt...
                                X