Ankündigung

Einklappen
Keine Ankündigung bisher.

Input Field - Eingabe nötig!

Einklappen

Neue Werbung 2019

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

  • Input Field - Eingabe nötig!

    Hey liebe PHP.de - Community!

    Ich habe folgendes Problem:
    Mein Suchscript benötigt eine geringfügige Änderung. Es soll ausschließlich nach Ergebnissen suchen, wenn alle Eingaben getätigt wurden. Ansonsten soll eine entsprechende Fehlermeldung an den Benutzer ausgegeben werden.

    Hier mein Script:

    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";}
                }
                
    ?>
    Ich bin noch recht neu in Sachen PHP und das Script konnte ich in mühevoller Kleinstarbeit (auch in Zusammenarbeit mit ein paar anderen) nach langer Zeit endlich fertigstellen. Dann kam mir die Idee, dass alle Angaben zwingend notwendig sein sollen.

    Im Moment sieht es allerdings wie folgt aus:
    - Wenn man das Script ohne Eingaben abschickt, zeigt er mir alle Datenbankeinträge
    - Man kann nach mehreren Kriterien suchen, muss aber nicht
    - Desweiteren zeigt er mir Einträge, die in der Datenbank als bspw. "Straße" stehen, aufgrund der Umlaute nicht an


    Ich bitte um Hilfe und freue mich auch über Ratschläge zur Optimierung meines Scriptes.

    - Labushuya

  • #2
    Erstmal alles auf UFT-8 umstellen, hier anfangen:

    http://www.gerd-riesselmann.net/soft...ng-einleitung/

    Und dann halt alle Felder abfragen die nicht leer sein dürfen

    PHP-Code:
    if( empty( $_POST["vname"] ) or empty( $_POST["nname"] ) or empty( $_POST["strnr"] ) ){

    die(
    'alles ausfüllen');


    Vorsicht: empty() reagiert auch auf 0 Werte

    Und die() solltest du durch vernünftige Fehlermeldungen an der entsprechenden Stelle ersetzen, ggf. sammeln und zentral ausgeben.
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      Ich bitte um Hilfe und freue mich auch über Ratschläge zur Optimierung meines Scriptes.
      1.) Prepared Statemens und PDO verwenden
      2.) HTML-Attribute in den Eingabefeldern verwenden (z.B. <input type="text" name="vname" required>), dann sorgt der Browser für eine rudimentäre Validierung, aber man muss es serverseitig trotzdem noch implementieren!
      3.) Du solltest die Ausgabe von Fehlern und die Definition trennen und in ein Array bzw. eine ähnliche Struktur auslagern.

      Vielleicht noch was Grundsätzliches:

      Ich halte es nicht für benutzerfreundlich, dass man für jedes Feld Eingaben machen kann und dann ausgegeben bekommt, wonach man gesucht hat.

      Sie suchten in Straße nach "Musterstraße 5"
      Sie suchten in Vorname nach "Peter".
      Das Feld Nachname wurde nicht verwendet.

      Ich würde die Eingaben einfach in den Formularfeldern stehen lassen. Aber für mich ist eine Suche am Einfachsten, in der ich NUR ein fettes Eingabefeld habe und die Ergebnisse automatisch zu dem passen, was ich eingegeben habe (wie bei Google). Beispiel:


      Gebe ich "Peter" ein, sucht er in allen Spalten: "WHERE vname LIKE 'Peter' OR nname LIKE 'Peter' ..."
      Gebe ich "*Peter*" ein, sucht er in allen Spalten: "WHERE vname LIKE '%Peter%' OR nname LIKE '%Peter%' ..."
      Gebe ich "Vorname:Peter*" ein, sucht er in der Spalte vname: "WHERE vname LIKE 'Peter%'"


      Nur so eine Idee
      Tutorials zum Thema Technik:
      https://pilabor.com
      https://www.fynder.de

      Kommentar

      Lädt...
      X