English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP Grundlagenanleitung

PHP Fortgeschrittene Anleitung

PHP & MySQL

PHP Referenzhandbuch

PHP MySQL Ajax Echtzeit-Suche

In diesem Tutorial lernen Sie, wie Sie eine Echtzeit-MySQL-Datenbank-Suchfunktion mit PHP und Ajax erstellen.

Ajax Echtzeit-Datenbank-Suche

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.

Schritte1:Erstellen Sie die Datenbanktabelle

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.

Schritte2: Create a search form

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.

Schritte3: Bearbeitung der Suchanfragen im Backend

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.

Online-Beispiel: Prozeduraler Ansatz

<?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);
?>

Online-Beispiel: objektorientierte Methode

<?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();
?>

Online-Beispiel: PDO-Methoden

<?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.