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

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

دليل PHP متقدم

PHP و MySQL

دليل PHP

PHP MySQL إضافة، حذف، تحديث، استرجاع (CRUD)

في هذا الدليل، ستتعلم كيفية بناء تطبيق CRUD باستخدام PHP و MySQL.

ما هو CRUD

CRUD هوC reate،R ead،U pdate وD CRUD هو اختصار لـ elete. عمليات CRUD هي العمليات الأساسية للبيانات في قاعدة البيانات. في الفصول السابقة، تعلمنا كيفية تنفيذ العمليات مثل إنشاء (إدخال)، قراءة (تحديد)، تحديث و حذف. في هذا الدليل، سنقوم بإنشاء تطبيق PHP بسيط لتنفيذ جميع هذه العمليات على جدول MySQL.

}}

حسنًا، دعونا نبدأ بإنشاء الجدول، سنستخدم هذا الجدول في جميع الأمثلة.

إنشاء جدول قاعدة البياناتemployeeتنفيذ استعلام SQL التالي لإنشاء جدول يُدعى

مثال
    CREATE TABLE employees (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    address VARCHAR(255) NOT NULL,
salary INT(10) NOT NULL

);

إنشاء ملف التكوين

بعد إنشاء الجدول، سنحتاج إلى إنشاء سكربت PHP للاتصال بخادم قاعدة بيانات MySQL. دعونا ننشئ ملفًا يُدعى "config.php" وأضف الكود التالي فيه.

دليل تفاعلي

<?php
/* معلومات الاعتماد للقاعدة البيانات. افترض أنك تشغل MySQL
خادم يحتوي على إعدادات افتراضية (مستخدم "root" بدون كلمة مرور) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
 
/* محاولة الاتصال بقاعدة بيانات MySQL */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
//تحقق من الاتصال
if($link === false){
    die("خطأ: لا يمكن الاتصال. " . mysqli_connect_error());
}
?>

إنشاء صفحة تسجيل الدخول

أولاً، سنقوم بإنشاء صفحة تسجيل الدخول لبرنامج CRUD، تحتوي على شبكة بيانات تُظهرemployeeسجلات في جدول قاعدة البيانات. ويوفر أيضًا أيقونة إجراء لكل سجل يعرض في الشبكة، يمكنك اختيار عرض تفاصيله أو تحديثه أو حذفه.

سنضيف أيضًا زر إنشاء في أعلى شبكة البيانات، والذي يمكن استخدامه لـemployeeإنشاء سجل جديد في الجدول. أنشئ ملفًا يُدعى "index.php" وأضف الكود التالي فيه:

دليل تفاعلي

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>لوحة التحكم</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script>
    <style type="text/css">
        .wrapper{
            width: 650px;
            margin: 0 auto;
        }
        .page-header h2{
            margin-top: 0;
        }
        table tr td:last-child a{
            margin-right: 15px;
        }
    </style>
    <script type="text/javascript">
        $(document).ready(function(){
            $('[data-toggle="tooltip"]').tooltip();   
        });
    </script>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header clearfix">
                        <h2 class="pull-left">تفاصيل الموظفين</h2>
                        <a href="create.php" class="btn btn-success pull-right">إضافة موظف جديد</a>
                    </div>
                    <?php
                    // تضمين ملف التكوين
                    require_once "config.php";
                    
                    //تحاول تنفيذ استعلام التحديد
                    $sql = "SELECT * FROM employees";
                    if($result = mysqli_query($link, $sql)){
                        if(mysqli_num_rows($result) > 0){
                            echo "<table class='table table-bordered table-striped'>";
                                echo "<thead>";
                                    echo "<tr>";
                                        echo "<th>رقم</th>";
                                        echo "<th>الاسم</th>";
                                        echo "<th>العنوان</th>";
                                        echo "<th>الراتب</th>";
                                        echo "<th>الإجراء</th>";
                                    echo "</tr>";
                                echo "</thead>";
                                echo "<tbody>";
                                while($row = mysqli_fetch_array($result)){
                                    echo "<tr>";
                                        echo "<td>" . $row['id'] . "</td>";
                                        echo "<td>" . $row['name'] . "</td>";
                                        echo "<td>" . $row['address'] . "</td>";
                                        echo "<td>" . $row['salary'] . "</td>";
                                        echo "<td>";
                                            echo "<a href='read.php?id=%. $row['id'] ."' title='View Record' data-toggle='tooltip'><span class='glyphicon glyphicon-eye-open'></span></a>";
                                            echo "<a href='update.php?id=%. $row['id'] ."' title='Update Record' data-toggle='tooltip'><span class='glyphicon glyphicon-pencil'></span></a>";
                                            echo "<a href='delete.php?id=%. $row['id'] ."' title='Delete Record' data-toggle='tooltip'><span class='glyphicon glyphicon-trash'></span></a>";
                                        echo "</td>";
                                    echo "</tr>";
                                }
                                echo "</tbody>";                            
                            echo "</table>";
                            // تحرير مجموعة النتائج
                            mysqli_free_result($result);
                        } else {
                            echo "<p class='lead'><em>لم يتم العثور على سجلات.</em></p>";
                        }
                    } else {
                        echo "خطأ: لا يمكن تنفيذ $sql." . mysqli_error($link);
                    }
 
                    //إغلاق الاتصال
                    mysqli_close($link);
                    ?>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

فيemployeesبعد ملء بعض السجلات في الجدول، قد يبدو شبكة البيانات CRUD في صفحة الدخول كما هو موضح في الصورة التالية:

إشارة:نحن نستخدم إطار Bootstrap للتصميم السريع والجميل لهيكل تطبيق CRUD هذا. Bootstrap هو الإطار الأمامي الأكثر شعبية والأقوى، المستخدم لتحسين تطوير الويب بشكل أسرع وأسهل.

Create Entry Page

In this section, we will build the CRUD application'sC reate function.

Let's create a file named "create.php" and put the following code in it. It will generate a web form that can be used toemployeeInsert a record into the table.

دليل تفاعلي

<?php
//包含配置文件
require_once "config.php";
 
// تحديد المتغيرات واستخدام القيم الفارغة للتحفيز
$name = $address = $salary = ":";
$name_err = $address_err = $salary_err = ":";
 
// معالجة بيانات النموذج عند تقديم النموذج
if($_SERVER["REQUEST_METHOD"] == "POST"){
    // تحقق من الاسم
    $input_name = trim($_POST["name"]);
    إذا (vacant($input_name)){
        $name_err = "Please enter a name.";
    } أو (!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = "Please enter a valid name.";
    } else {
        $name = $input_name;
    }
    
    //Validate address
    $input_address = trim($_POST["address"]);
    إذا (vacant($input_address)){
        $address_err = ":يرجى إدخال عنوان.";     
    } else {
        $address = $input_address;
    }
    
    // التحقق من الراتب
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "Please enter the salary amount.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "Please enter a positive integer.";
    } else {
        $salary = $input_salary;
    }
    
    //Check for input errors before inserting into the database
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        //Prepare INSERT statement
        $sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)";
         
        if($stmt = mysqli_prepare($link, $sql)){
            //将变量作为参数绑定到预处理语句
            mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary);
            
            //تعيين المعلمات
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            
            //Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                //Record created successfully. Redirect to the login page
                header("location: index.php");
                exit();
            } else {
                echo "Something went wrong. Please try again later.";
            }
        }
         
        //إغلاق تعبير
        mysqli_stmt_close($stmt);
    }
    
    //إغلاق الاتصال
    mysqli_close($link);
}
?>
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Create Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h2>Create Record</h2>
                    </div>
                    <p>Please fill out this form and submit to add an employee record to the database.</p>
                    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                        <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control" value="<?php echo $name; ?>">
                            <span class="help-block"><?php echo $name_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>">
                            <label>عنوان</label>
                            <textarea name="address" class="form-control"><?php echo $address; ?></textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : '';">
                            <label>راتب</label>
                            <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>">
                            <span class="help-block"><?php echo $salary_err;?></span>
                        </div>
                        <input type="submit" class="btn btn-primary" value="إرسال">
                        <a href="index.php" class="btn btn-default">إلغاء</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</html>

The same "create.php" file will display an HTML form and handle submitted form data. It will also perform basic validation on user input before saving the data.

Create Read Page

Now it's time to build the CRUD application'sR ead function.

Let's create a file named "read.php" and put the following code in it. It will only readالموظفRetrieve records from the employees table with the id attribute.

دليل تفاعلي

<?php
//Check if the id parameter exists before further processing
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
    // تضمين ملف التكوين
    require_once "config.php";
    
    //SELECT statement
    $sql = "SELECT * FROM employees WHERE id = ?";
    
    if($stmt = mysqli_prepare($link, $sql)){
        //将变量作为参数绑定到预处理语句
        mysqli_stmt_bind_param($stmt, "i", $param_id);
        
        // إعداد المعاملات
        $param_id = trim($_GET["id"]);
        
        //Attempt to execute the prepared statement
        if(mysqli_stmt_execute($stmt)){
            $result = mysqli_stmt_get_result($stmt);
    
            if(mysqli_num_rows($result) == 1){
                /* Extract the result line as an associative array. Since the result set contains only one row, we do not need to use a while loop */
                $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
                
                //البحث عن قيمة حقل معين
                $name = $row["name"];
                $address = $row["address"];
                $salary = $row["salary"];
            } else {
                //URL does not contain a valid id parameter. Redirect to the error page
                header("location: error.php");
                exit();
            }
            
        } else {
            echo "اه! حصل هناك خطأ. يرجى المحاولة مرة أخرى بعد قليل.";
        }
    }
     
    //إغلاق تعبير
    mysqli_stmt_close($stmt);
    
    //إغلاق الاتصال
    mysqli_close($link);
} else {
    //لا يحتوي URL على معامل id. إعادة توجيه إلى صفحة الخطأ
    header("location: error.php");
    exit();
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>View Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h1>查看记录</h1>
                    </div>
                    <div class="form-group">
                        <label>Name</label>
                        <p class="form-control-static"><?php echo $row["name"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>عنوان</label>
                        <p class="form-control-static"><?php echo $row["address"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>راتب</label>
                        <p class="form-control-static"><?php echo $row["salary"]; ?></p>
                    </div>
                    <p><a href="index.php" class="btn btn-primary">العودة</a></p>
                </div>
            </div>        
        </div>
    </div>
</html>

إنشاء صفحة التحديث

بالنفس الشكل، يمكننا بناء وظيفة تحديث تطبيق CRUD الخاص بنا.

لنقم بإنشاء ملف "update.php" وضعه في الداخل. سيكون هذا الكود يعتمد علىالموظفلتحديث خاصية idالموظفالسجلات الحالية في الجدول.

دليل تفاعلي

<?php
// تضمين ملف التكوين
require_once "config.php";
 
// تحديد المتغيرات واستخدام القيم الفارغة للتحفيز
$name = $address = $salary = ":";
$name_err = $address_err = $salary_err = ":";
 
// معالجة بيانات النموذج عند تقديم النموذج
if(isset($_POST["id"]) && !empty($_POST["id"])){
    // الحصول على قيمة المدخل المخفي
    $id = $_POST["id"];
    
    // تحقق من الاسم
    $input_name = trim($_POST["name"]);
    إذا (vacant($input_name)){
        $name_err = ":يرجى إدخال اسم.";
    } أو (!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = ":يرجى إدخال اسم صالح.";
    } else {
        $name = $input_name;
    }
    
    // تحقق من عنوان العنوان
    $input_address = trim($_POST["address"]);
    إذا (vacant($input_address)){
        $address_err = ":يرجى إدخال عنوان.";     
    } else {
        $address = $input_address;
    }
    
    // التحقق من الراتب
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "يرجى إدخال مبلغ الراتب.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "يرجى إدخال قيمة صحيحة كعدد صحيح إيجابي.";
    } else {
        $salary = $input_salary;
    }
    
    // التحقق من أخطاء الإدخال قبل إدخالها في قاعدة البيانات
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        // جملة UPDATE
        $sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?";
         
        if($stmt = mysqli_prepare($link, $sql)){
            //将变量作为参数绑定到预处理语句
            mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_address, $param_salary, $param_id);
            
            // إعداد المعاملات
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            $param_id = $id;
            
            //حاول تنفيذ الجملة المعدة
            if(mysqli_stmt_execute($stmt)){
                // تسجيل نجاح التحديث. إعادة توجيه إلى صفحة الدخول
                header("location: index.php");
                exit();
            } else {
                echo "حدث خطأ. يرجى المحاولة لاحقًا.";
            }
        }
         
        //إغلاق تعبير
        mysqli_stmt_close($stmt);
    }
    
    //إغلاق الاتصال
    mysqli_close($link);
} else {
    // التحقق من وجود معامل id قبل المضي قدمًا
    if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
        // الحصول على معامل URL
        $id = trim($_GET["id"]);
        
        // جملة select
        $sql = "SELECT * FROM employees WHERE id = ?";
        if($stmt = mysqli_prepare($link, $sql)){
            //将变量作为参数绑定到预处理语句
            mysqli_stmt_bind_param($stmt, "i", $param_id);
            
            // إعداد المعاملات
            $param_id = $id;
            
            //حاول تنفيذ الجملة المعدة
            if(mysqli_stmt_execute($stmt)){
                $result = mysqli_stmt_get_result($stmt);
    
                if(mysqli_num_rows($result) == 1){
                    /* استخراج سطر النتيجة كنوع مصفوفة مرتبطة. لأن مجموعة النتائج تحتوي على سطر واحد فقط، لذا لا نحتاج إلى استخدام حلقة while */
                    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
                    
                    //البحث عن قيمة حقل معين
                    $name = $row["name"];
                    $address = $row["address"];
                    $salary = $row["salary"];
                } else {
                    //URL لا يحتوي على ID صالح. تحويل إلى صفحة خطأ
                    header("location: error.php");
                    exit();
                }
                
            } else {
                echo "اه! حصل هناك خطأ. يرجى المحاولة مرة أخرى بعد قليل.";
            }
        }
        
        //إغلاق تعبير
        mysqli_stmt_close($stmt);
        
        //إغلاق الاتصال
        mysqli_close($link);
    }  else{
        //لا يحتوي URL على معامل id. إعادة توجيه إلى صفحة الخطأ
        header("location: error.php");
        exit();
    }
}
?>
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Update Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h2>تحديث السجلات</h2>
                    </div>
                    <p>رجاء تعديل القيمة المدخلة وإرسالها لتحديث السجلات.</p>
                    <form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
                        <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control" value="<?php echo $name; ?>">
                            <span class="help-block"><?php echo $name_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>">
                            <label>عنوان</label>
                            <textarea name="address" class="form-control"><?php echo $address; ?></textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : '';">
                            <label>راتب</label>
                            <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>">
                            <span class="help-block"><?php echo $salary_err;?></span>
                        </div>
                        <input type="hidden" name="id" value="<?php echo $id; ?>"/>
                        <input type="submit" class="btn btn-primary" value="إرسال">
                        <a href="index.php" class="btn btn-default">إلغاء</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</html>

إنشاء صفحة الحذف

في النهاية، سنقوم ببناءdوظيفة الحذف في تطبيق CRUD الخاص بنا.

لنقم بإنشاء ملف يحمل الاسم "delete.php"، ونضعه في هذا الملف. سيعتمد هذا علىالموظفخاصية id منالموظفحذف السجلات الحالية من الجدول.

دليل تفاعلي

<?php
//确认后进行删除操作
if(isset($_POST["id"]) && !empty($_POST["id"])){
    //包含配置文件
    require_once "config.php";
    
    //DELETE语句
    $sql = "DELETE FROM employees WHERE id = ?";
    
    if($stmt = mysqli_prepare($link, $sql)){
        //将变量作为参数绑定到预处理语句
        mysqli_stmt_bind_param($stmt, "i", $param_id);
        
        //تعيين المعلمات
        $param_id = trim($_POST["id"]);
        
        //حاول تنفيذ الجملة المعدة
        if(mysqli_stmt_execute($stmt)){
            //تم حذف السجل بنجاح. إعادة توجيه إلى صفحة الدخول
            header("location: index.php");
            exit();
        } else {
            echo "اه! حصل هناك خطأ. يرجى المحاولة مرة أخرى بعد قليل.";
        }
    }
     
    //إغلاق تعبير
    mysqli_stmt_close($stmt);
    
    //إغلاق الاتصال
    mysqli_close($link);
} else {
    //تحقق من وجود معامل id
    if(empty(trim($_GET["id"]))){
        //لا يحتوي URL على معامل id. إعادة توجيه إلى صفحة الخطأ
        header("location: error.php");
        exit();
    }
}
?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="alert alert-danger fade in">
    <input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/>
    <p>هل أنت متأكد من أنك تريد حذف هذا السجل؟</p><br>
    <p>
    <input type="submit" value="نعم" class="btn btn-danger">
    <a href="index.php" class="btn btn-default">لا</a>
</p>
</div>
</form>

إنشاء صفحة خطأ

في النهاية، دعونا ننشئ ملفًا "error.php". إذا كان الطلب غير صالح، أي إذا كان هناك نقص في متغير id في سلسلة الاستعلام URL أو إذا كان هذا المعامل غير صالح، سيتم عرض هذه الصفحة.

<h1>طلب غير صالح</h1>
<div class="alert alert-danger fade in">
 <p>آسف، الطلب الذي قدمته غير صالح. يرجى <a href="index.php" class="alert-link">العودة</a> ثم محاولة مرة أخرى.</p>
</div>

بعد رحلة طويلة، نحن قد أتممنا تطبيق CRUD باستخدام PHP وMySQL.