English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial lernen Sie, wie Sie eine Echtzeit-MySQL-Datenbank-Suchfunktion mit PHP und Ajax erstellen.
Sie können eine einfache Echtzeit-Datenbank-Suchfunktion mit Ajax und PHP erstellen, die angezeigt wird, wenn Sie einige Zeichen im Suchfeld eingeben.
In diesem Tutorial werden wir einen Echtzeit-Suchfeld erstellen, das die Tabelle countries durchsucht und die Ergebnisse asynchron anzeigt. Aber zuerst müssen wir diese Tabelle erstellen.
Führen Sie den folgenden SQL-Befehl aus, um die Tabelle countries in der MySQL-Datenbank zu erstellen.
CREATE TABLE countries ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL );
After creating the table, you need to useSQL INSERT statementfill in some data.
If you are not familiar with the steps to create a table, please seeSQL CREATE TABLE statementtutorials to get detailed information about the syntax for creating tables in the MySQL database system.
Now, let's create a simple web interface that allows users to search for "countries" in real-time"available in the tableLändern/Regionenname, as if it were auto-completion or pre-input.
Create a named "search-put the following code into the PHP file "form.php".
<!DOCTYPE html> <html> <head> <meta charset="UTF-8> <title>PHP MySQL Database Real-time Search</title> <style type="text/css"> body{ font-family: Arail, sans-serif; } /*Set the style of the search box */ .search-box{ width: 300px; position: relative; display: inline-block; font-size: 14px; } .search-box input[type="text"]{ height: 32px; padding: 5px 10px; border: 1px solid #CCCCCC; font-size: 14px; } .result{ position: absolute; z-index: 999; top: 100%; left: 0; } .search-box input[type="text"], .result{ width: 100%; box-sizing: border-box; } /* Formatting result items */ .result p{ margin: 0; padding: 7px 10px; border: 1px solid #CCCCCC; border-top: none; cursor: pointer; } .result p:hover{ background: #f2f2f2; } </style> <script src="https://code.jquery.com/jquery-1jquery12jquery4./script> .min.js"></<script type="text javascript"> $(document).ready(function(){-$('.search /*box input[type="text"]').on("keyup input", function(){ */ Änderungen werden überprüft und der Eingabewert abgerufen var inputVal = $(this).val(); var resultDropdown = $(this).siblings(".result"); if(inputVal.length){-$.get("search.php", {term: inputVal}).done(function(data){ //Die zurückgegebenen Daten werden im Browser angezeigt resultDropdown.html(data); }); } resultDropdown.empty(); } }); //Bei Klick auf den Ergebnispunkt wird der Sucheingabewert eingestellt $(document).on("click", "result p", function(){ $(this).parents(".search-box").find('input[type="text"]').val($(this).text()); $(this).parent(".result").empty(); }); }); </script> </head> <div class="search-box"> <input type="text" autocomplete="off" placeholder="Suche Land..." /> <div class="result"></div> </div> </html>
bei jeder Änderung des Sucheingabewerts oder bei Eingabeereignissen im Sucheingabefeld jQuery-Ajax-Anfragen an "backend" sendet-Datei "search.php" gesucht, die vonLändern/RegionenzugehörigencountriesIn der Tabelle werden die Suchwörter der zu suchenden Aufzeichnungen gesucht. Diese Aufzeichnungen werden später von jQuery in<div>und werden im Browser angezeigt.
Das ist unser "backend"-Quellcode der Datei "search.php", die auf Basis der von Ajax-Anfragen gesendeten Suchzeichenkette Datenbanken durchsucht und die Ergebnisse an den Browser sendet.
<?php /* Verbindung zum MySQL-Server versuchen. Angenommen, Sie führen MySQL aus Dienstleister mit Standardeinstellungen (Benutzer "root", kein Passwort) */ $link = mysqli_connect("localhost", "root", "", "demo"); //Überprüfen Sie die Verbindung if($link === false){ die("Fehler: Verbindung nicht möglich. " . mysqli_connect_error()); } if(isset($_REQUEST["term"])){ //Vorbereiten Sie die Select-Anweisung $_sql = "SELECT * FROM countries WHERE name LIKE ?"; if($stmt = mysqli_prepare($link, $sql)){ //Binden Sie die Variable als Parameter an das vorbereitete Statement an mysqli_stmt_bind_param($stmt, "s", $param_term); //Setzen Sie die Parameter $param_term = $_REQUEST["term"] . '%'; // Attempt to ausführen vorbereitete Anweisung if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); //Überprüfen Sie die Anzahl der Zeilen im Ergebnissatz if(mysqli_num_rows($result) > 0){ //Erhalten Sie die Ergebnissezeile als assoziatives Array while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ echo "<p>" . $_row["name"] . "</p>"; } } echo "<p>Keine passenden Einträge gefunden</p>"; } } echo "Fehler: Die Ausführung von $sql ist nicht möglich." . mysqli_error($link); } } //Anweisung beenden mysqli_stmt_close($stmt); } //Verbindung schließen mysqli_close($link); ?>
<?php /* Verbindung zum MySQL-Server versuchen. Angenommen, Sie führen MySQL aus Dienstleister mit Standardeinstellungen (Benutzer "root", kein Passwort) */ $mysqli = new mysqli("localhost", "root", "", "demo"); //Überprüfen Sie die Verbindung if($mysqli === false){ die("Fehler: Verbindung nicht möglich. " . $mysqli->connect_error); } if(isset($_REQUEST["term"])){ //Select vorbereitete Anweisung $_sql = "SELECT * FROM countries WHERE name LIKE ?"; if($stmt = $mysqli->prepare($sql)){ //Binden Sie die Variable als Parameter an das vorbereitete Statement an $_stmt->bind_param("s", $param_term); //Setzen Sie die Parameter $param_term = $_REQUEST["term"] . '%'; // Versuchen Sie, das vorbereitete Statement auszuführen if($_stmt->execute()); $result = $stmt->get_result(); //Überprüfen Sie die Anzahl der Zeilen im Ergebnissatz if($result->num_rows > 0){ //Erhalten Sie die Ergebnissezeile als assoziatives Array while($row = $result-fetch_array(MYSQLI_ASSOC)){ echo "<p>" . $_row["name"] . "</p>"; } } echo "<p>Keine passenden Einträge gefunden</p>"; } } echo "Fehler: Die Ausführung von $sql ist nicht möglich." . mysqli_error($link); } } //Anweisung beenden $_stmt->close(); } //Verbindung schließen $_mysqli->close(); ?>
<?php /* Verbindung zum MySQL-Server versuchen. Angenommen, Sie führen MySQL aus Dienstleister mit Standardeinstellungen (Benutzer "root", kein Passwort) */ try{ $_pdo = new PDO("mysql:host=localhost;dbname=demo", "root", ""); //PDO-Fehlermodus auf Ausnahme setzen $_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $_e) { die("Fehler: Verbindung kann nicht hergestellt werden. $_e" . $_e);->getMessage()); } //Suchabfrage ausführen versuchen try{ if(isset($_REQUEST["term"])){ //vorbezeichnete Anweisung erstellen $_sql = "SELECT * FROM countries WHERE name LIKE ":term"; $_stmt = $_pdo->prepare($_sql); $_term = $_REQUEST["term"] . "%"; //Parameter an Anweisung binden $_stmt->bindParam(":term", $_term); //vorbezeichnete Anweisung ausführen $_stmt->execute(); if($_stmt->rowCount() > 0) { while($_row = $_stmt->fetch()); echo "<p>" . $_row["name"] . "</p>"; } } echo "<p>Keine passenden Einträge gefunden</p>"; } } } catch(PDOException $_e) { die("Fehler: Die Ausführung von $_sql. $_e" . $_e);->getMessage()); } //Anweisung beenden unset($stmt); //Verbindung schließen unset($pdo); ?>
SQL SELECTAnweisungen mitLIKEoperatoren kombiniert, umcountriespassende Einträge in der Datenbanktabelle zu finden. Wir habenvorbezeichnete Anweisungen zu verwenden,um die Suchleistung zu verbessern undSQL-InjectionAngriff.
Hinweis:Bevor Sie Benutzerinput in SQL-Anweisungen verwenden, filtern und validieren Sie ihn stets. Sie können auch die Funktion PHP mysqli_real_escape_string() verwenden, um spezielle Zeichen im Benutzerinput zu escapen und gültige SQL-Zeichenfolgen zu erstellen, um SQL-Injection zu verhindern.