Eine MySQL-Suchseite einrichten

  • Ich brauche Hilfe, um diese Seite einzurichten. Nehmen wir an, ich habe eine MySQL-Tabelle mit etwa fünf Datenfeldern (d. H. ID, Vorname, Nachname, Lieblingsfarbe, Favoritennummer). Ich möchte dem Benutzer die Möglichkeit geben, die Tabelle zu durchsuchen, also erstelle ich eine "Suchseite".

    Auf der Seite werden Textfelder für ID, Nachname und Vorname angezeigt. Von hier aus würde der Benutzer Daten eingeben, nach denen gesucht werden soll. Ich denke, was ich verwirrt bin, ist, wie ich ein Skript schreiben kann, das verschiedene Suchkriterien aus den Textfeldern übernimmt und die leer gelassenen Felder ignoriert. Wenn zum Beispiel ein Benutzer nur einen Vor- oder Nachnamen eingibt, werden alle Einträge mit demselben Vor- und Nachnamen angezeigt. Wenn sie nur die ID einfügen (wäre eindeutig), wird der gesamte Inhalt dieses Benutzers angezeigt. Wenn Sie sowohl einen Nachnamen als auch einen Nachnamen eingeben, werden alle Daten für Einträge mit diesem Vor- und Nachnamen angezeigt.

    Ich denke, das ist einfach, aber ich bin es neu an dieser Stelle, also wäre jede Hilfe bei der Einrichtung sehr willkommen.

    Code-Aktualisierung:

     <?php
    //Connect and select database
    
    //if user wants to search
    if(isset($_POST['submit']))
    {
    
    $sqlConditions = array();
    
    if(isset($_POST['id'])){
    $id = filter_var($_POST['id'], FILTER_VALIDATE_INT);
    $sqlConditions[] = 'id = ' . $id;
    } else {
    $id = 0;
    }
    
    if(isset($_POST['firstname'])){
    $firstName = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);
    $sqlConditions[] = 'firstname = ' . $firstName;
    } else {
    $firstName = '';
    }
    
    if(isset($_POST['lastname'])){
    $lastName = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
    $sqlConditions[] = 'lastname = ' . $lastName;
    } else {
    $lastName = '';
    }
    
    $query = 'SELECT * FROM students WHERE ' . join (' AND ', $sqlConditions);
    
    //print query
    while ($row = $query->fetch_row())
    {
      print "LastName = " . $row[0] . " FirstName = " . $row[1].
    "Favorite Color = " . $row[2] . " Favorite Number = " . $row[3] . "<br /><br />\n";
    }
    
    }
    ?>
    
    
    <html>
    <body>
    <form method = "POST" action = "<?php echo $_SERVER['PHP_SELF']; ?>">
    <p>ID:<input type = "id" id="id" name="id" size="20" maxlength="40" /></p>
    <p>First Name:<input type = "firstname" id="firstname" name="firstname" size="20" maxlength="40" /></p>
    <p>Last Name:<input type = "lastname" id="lastname" name="lastname" size="20"    maxlength="40" /></p>
    <input type="submit" id="submit" name ="submit" value="Search" />
    
    </form>
    </body>
    </html>
     
    22 November 2011
    Shawna Murat
3 answers
  • Ich schreibe dies an Leute, die gerade PHP starten. Ich entschuldige mich beim OP, wenn sie ein PHP-Profi sind, aber diese Site ist für alle da!

    Also, hier ist das, was ich vorschlagen möchte:

    1. Schreiben Sie ein einfaches Skript, das fähig ist Verbinden Sie und wählen Sie Informationen aus Ihrer ausgefüllten Tabelle aus.
    2. Wenn Sie wissen, wie das funktioniert, erfahren Sie, wie Sie vorbereitete Anweisungen . Dies schützt Sie vor Dingen wie SQL-Injektionen *

    3. Wenn Sie verstanden haben, wie diese beiden Dinge funktionieren. Alles, was Sie tun müssen, ist ein HTML-Formular zu erstellen (dies ist leicht bei Sir Google zu finden) und verwenden Sie dann $ _GET oder $ _POST, um auf die Eingaben des Benutzers zuzugreifen und Ihre Informationen abzurufen. (Wenn Sie den Unterschied zwischen GET und POST nicht verstehen, schauen Sie bitte auch nach!)

    Wenn Sie diese lernen können Dinge, werden Sie gut unterwegs sein. Auch zu wissen, wie LIKE funktioniert, ist auch gut für Sie:

    SELECT stuff FROM myTable WHERE someCondition LIKE '%Me%'

    * (WENN SIE EINEN LERNEN DINGE AUS DIESER ANTWORT BITTE BEACHTEN SIE DIESES)

    22 November 2011
    afuzzyllamaKyle Holmes
  • In welcher Sprache ist Ihre "Suchseite"?

    Im Allgemeinen müssen Sie zuerst herausfinden, welches der Elemente der Benutzer abgeschlossen hat, also nicht leer ist. Wenn Sie von einer Webseite sprechen, können Sie mit Hilfe von Javascript feststellen, ob ein Feld leer ist oder nicht.

    Dann sollten Sie unterschiedliche Abfragen haben, abhängig von der Feldkombination, die beispielsweise in geschrieben wurde php, um die Abfrage auszuführen und die Ergebnisse zu erhalten.

     if (lastnameStr!=null)
     {
      <?php
      $result = mysql_query('SELECT lastname FROM tableName );
      if (!$result) {
      die('Invalid query: ' . mysql_error());
      ?>
     }
    else
     { 
    ....
     }
    }
     
    22 November 2011
    user847988
  • Sie können den folgenden Ansatz versuchen:

    Schritt 1: Holen Sie Daten vom POST ab, validieren Sie sie und erstellen Sie die zukünftigen SQL-Bedingungen

     $sqlConditions = array();
    
    if(isset($_POST['Id'])){
      $id = filter_var($_POST['Id'], FILTER_VALIDATE_INT);
      $sqlConditions[] = 'Id = ' . $id;
    } else {
      $id = 0;
    }
    
    if(isset($_POST['FirstName'])){
      $firstName = filter_var($_POST['FirstName'], FILTER_SANITIZE_STRING);
      $sqlConditions[] = 'FirstName = ' . $firstName;
    } else {
      $firstName = '';
    }
    
    if(isset($_POST['LastName'])){
      $lastName = filter_var($_POST['LastName'], FILTER_SANITIZE_STRING);
      $sqlConditions[] = 'LastName = ' . $lastName;
    } else {
      $lastName = '';
    }
     

    Schritt 2: Erstellen Sie die Abfrage

     $query = 'SELECT * FROM your_table WHERE ' . join (' AND ', $sqlConditions);
     

    Natürlich müssen Sie mysql_real_escape_string oder einen modernen Ansatz als PDO verwenden, um sicherzustellen, dass Sie die SQL-Injektion vermeiden.

    22 November 2011
    Narcis Raduuser1551482