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

دليل PHP الأساسي

دليل PHP متقدم

PHP & MySQL

دليل PHP

PHP MySQL Ajax البحث الحي

في هذا الدليل، ستعلم كيفية إنشاء وظيفة بحث قاعدة بيانات حية باستخدام PHP وAjax.

البحث الحي في قاعدة البيانات باستخدام Ajax

يمكنك استخدام Ajax وPHP لإنشاء وظيفة بحث قاعدة بيانات حية بسيطة، حيث سيتم عرض نتائج البحث عند بدء إدخال بعض الأحرف في مربع البحث.

في هذا الدليل، سنقوم بإنشاء نافذة بحث حية ستبحث في جدول countries وتعرض النتائج بشكل متسلسل. ولكن أولاً، نحتاج إلى إنشاء هذا الجدول.

الخطوة 1: إنشاء جدول قاعدة البيانات

أ�行اء الاستعلام SQL التالي لإنشاء جدول countries في قاعدة بيانات MySQL.

CREATE TABLE countries (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL
);

بعد إنشاء الجدول، ستحتاج إلى استخدامجملة SQL INSERTملء بعض البيانات.

إذا لم تكن مطلعاً عن خطوات إنشاء الجداول، يرجى الرجوع إلىجملة SQL CREATE TABLEالتعليمات، للحصول على تفاصيل حول بناء الجداول في نظام قاعدة بيانات MySQL.

Step 2: Build the search form

Now, let's create a simple web interface that allows users to search for "countries" in real-time."Available in the table国家/地区Name, as in auto-complete or pre-input.

Create a PHP file named "search-form.php" and place the following code inside it.

<!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-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $('.search-box input[type="text"]').on("keyup input", function() {
        /*更改时获取输入值 */
        var inputVal = $(this).val();
        var resultDropdown = $(this).siblings(".result");
        if(inputVal.length){
            $.get("backend-search.php", {term: inputVal}).done(function(data){
                //在浏览器中显示返回的数据
                resultDropdown.html(data);
            });
        } else{
            resultDropdown.empty();
        }
    });
    
    //单击结果项时设置搜索输入值
    $(document).on("click", ".result p", function(){
        $(this).parents(".search-box").find('input[type="text"]').val($(this).text());
        $(this).parent(".result").empty();
    });
});


    
        
        
    

每次更改搜索输入的内容或在搜索输入上发生键入事件时,jQuery代码将Ajax请求发送至“ backend-search.php”文件,该文件从与国家/地区相关的countries表中检索记录搜索的字词。这些记录稍后将由jQuery插入到

并显示在浏览器中。

步骤3:在后端处理搜索查询

这是我们的“ backend-search.php”文件的源代码,该文件根据Ajax请求发送的查询字符串搜索数据库并将结果发送回浏览器。

在线示例:面向过程方式

؟php
/* محاولة اتصال بخادم MySQL. افترض أنك تقوم بتشغيل MySQL}}
خادم بأساسيات التكوين (مستخدم "root"، بدون كلمة المرور) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
//تحقق من الاتصال
if($link === false){
    die("错误:无法连接。 " . mysqli_connect_error());
}
 
if(isset($_REQUEST["term"])){
    //جملة المعالجة المسبقة select
    $sql = "SELECT * FROM countries WHERE name LIKE ?";
    
    if($stmt = mysqli_prepare($link, $sql)){
        //ربط المتغير كمعامل إلى جملة المعالجة المسبقة
        mysqli_stmt_bind_param($stmt, "s", $param_term);
        
        //ضبط المعاملات
        $param_term = $_REQUEST["term"] . '%';
        
        //حاول تنفيذ جملة المعالجة المسبقة Attempt
        if(mysqli_stmt_execute($stmt)){
            $result = mysqli_stmt_get_result($stmt);
            
            //تحقق من عدد الصفوف في مجموعة النتائج
            if(mysqli_num_rows($result) > 0){
                //الحصول على صف النتيجة كعدد مرتبط
                while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
                    echo "<p>" . $row["name"] . "</p>";
                }
            } else{
                echo "<p>لم يتم العثور على سجلات تطابق</p>";
            }
        } else{
            echo "خطأ: لا يمكن تنفيذ $sql." . mysqli_error($link);
        }
    }
     
    //إنهاء الجملة
    mysqli_stmt_close($stmt);
}
 
//إغلاق الاتصال
mysqli_close($link);
?>

مثال على الإنترنت: طريقة التوجيه

؟php
/* محاولة اتصال بخادم MySQL. افترض أنك تقوم بتشغيل MySQL}}
خادم بأساسيات التكوين (مستخدم "root"، بدون كلمة المرور) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
//تحقق من الاتصال
if($mysqli === false){
    die("خطأ: لا يمكن الاتصال. " . $mysqli->connect_error);
}
 
if(isset($_REQUEST["term"])){
    //جملة المعالجة المسبقة select
    $sql = "SELECT * FROM countries WHERE name LIKE ?";
    
    if($stmt = $mysqli->prepare($sql)){
        //ربط المتغير كمعامل إلى جملة المعالجة المسبقة
        $stmt->bind_param("s", $param_term);
        
        //ضبط المعاملات
        $param_term = $_REQUEST["term"] . '%';
        
        //حاول تنفيذ جملة المعالجة المسبقة
        if($stmt->execute()){
            $result = $stmt->get_result();
            
            //تحقق من عدد الصفوف في مجموعة النتائج
            if($result->num_rows > 0){
                //الحصول على صف النتيجة كعدد مرتبط
                while($row = $result->fetch_array(MYSQLI_ASSOC)){
                    echo "<p>" . $row["name"] . "</p>";
                }
            } else{
                echo "<p>لم يتم العثور على سجلات تطابق</p>";
            }
        } else{
            echo "خطأ: لا يمكن تنفيذ $sql." . mysqli_error($link);
        }
    }
     
    //إنهاء الجملة
    $stmt->close();
}
 
//إغلاق الاتصال
$mysqli->close();
?>

مثال على الإنترنت: طريقة PDO

؟php
/* محاولة اتصال بخادم MySQL. افترض أنك تقوم بتشغيل MySQL}}
خادم بأساسيات التكوين (مستخدم "root"، بدون كلمة المرور) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    //ضبط نمط الأخطاء PDO على استثنائية
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("خطأ: لا يمكن الاتصال. " . $e->getMessage());
}
 
//حاول تنفيذ استعلام البحث
try{
    if(isset($_REQUEST["term"])){
        //إنشاء جملة معالجة مسبقة
        $sql = "SELECT * FROM countries WHERE name LIKE :term";
        $stmt = $pdo->prepare($sql);
        $term = $_REQUEST["term"] . '%';
        //ربط المعامل مع الجملة
        $stmt->bindParam(":term", $term);
        //تنفيذ جملة المعالجة المسبقة
        $stmt->execute();
        if($stmt->rowCount() > 0){
            while($row = $stmt->fetch()){
                echo "<p>" . $row["name"] . "</p>";
            }
        } else{
            echo "<p>لم يتم العثور على سجلات تطابق</p>";
        }
    }  
} catch(PDOException $e){
    die("خطأ: لا يمكن تنفيذ $sql. " . $e->getMessage());
}
 
//إنهاء الجملة
unset($stmt);
 
//إغلاق الاتصال
unset($pdo);
?>

SQL SELECTالجملة معLIKEاستخدام دالة التجميع، لتحقيقcountriesالبحث عن سجلات تطابق في جدول قاعدة البيانات. لقد قمنا بتنفيذاستخدام جملة معالجة مسبقة،لتحسين أداء البحث وحمايةاختراق SQLهجوم.

ملاحظة:قبل استخدام المدخلات المستلمة من المستخدم في جملة SQL، يرجى دائمًا تمريرها من خلال تصفية وتحقق. يمكنك أيضًا استخدام دالة PHP mysqli_real_escape_string() لتشويه الأحرف الخاصة في المدخلات المستلمة وتوليد سلسلة SQL قانونية لمنع اختراق SQL.