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

Tutoriel PHP de base

Tutoriel PHP avancé

PHP & MySQL

Manuel de référence PHP

PHP MySQL Ajouter, Supprimer, Mettre à jour, Lire (CRUD)

Dans ce tutoriel, vous apprendrez à utiliser PHP et MySQL pour construire une application CRUD.

Qu'est-ce que CRUD

CRUD estC reate,R ead,U pdate etD D pour Delete, le sigle de elete. Les opérations CRUD sont les opérations de données de base de la base de données. Dans les chapitres précédents, nous avons appris à effectuer des opérations de création (c'est-à-dire d'insertion), de lecture (c'est-à-dire de sélection), de mise à jour et de suppression. Dans ce tutoriel, nous allons créer une application PHP simple pour exécuter toutes ces opérations sur une table de base de données MySQL.

Très bien, commençons par créer une table, que nous utiliserons dans tous les exemples.

Créer une table de base de données

Exécuter la requête SQL suivante pour créer une base de données nomméeemployeela table s. Nous utiliserons cette table pour toutes les opérations futures.

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 require_once()函数将此配置文件包含在其他页面中。

Exemple en ligne

<?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”的文件,并将以下代码放入其中:

Exemple en ligne

!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Dashboard</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">Détails des employés</h2>
                        <a href="create.php" class="btn btn-success pull-right">Ajouter un nouveau employé</a>
                    </div>
                    <?php
                    //Inclure le fichier de configuration
                    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>Name</th>";
                                        echo "<th>Address</th>";
                                        echo "<th>Salary</th>";
                                        echo "<th>Action</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>";
                            // Libération du jeu de résultats
                            mysqli_free_result($result);
                        } else{
                            echo "<p class='lead'><em>No records were found.</em></p>";
                        }
                    } else{
                        echo "Erreur : Impossible d'exécuter $sql. " . mysqli_error($link);
                    }
 
                    //Fermez la connexion
                    mysqli_close($link);
                    ?>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

DansemployeesAprès avoir inséré quelques enregistrements dans le tableau, la page de connexion CRUD ou le tableau de données peut ressembler à ce qui suit :

Astuce :Nous avons utilisé le cadre Bootstrap pour créer rapidement et de manière élégante la mise en page de l'application CRUD. Bootstrap est le cadre frontend le plus populaire et le plus puissant, utilisé pour le développement Web plus rapide et plus facile.

Page d'enregistrement de création

Dans cette section, nous allons construire la page d'enregistrement de création pour l'application CRUD.C la fonction de création.

Créons un fichier nommé "create.php" et mettons-y le code suivant. Il générera un formulaire Web utilisable pouremployeeInsertion d'un enregistrement dans le tableau.

Exemple en ligne

<?php
//Inclut le fichier de configuration
require_once "config.php";
 
//Définir des variables et les initialiser avec des valeurs vides
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
 
//Traiter les données du formulaire lors de la soumission du formulaire
if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Valider le nom
    $input_name = trim($_POST["name"]);
    if(empty($input_name)){
        $name_err = "Veuillez entrer un nom.";
    } si (!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = "Veuillez entrer un nom valide.";
    } else{
        $name = $input_name;
    }
    
    //Vérification de l'adresse
    $input_address = trim($_POST["address"]);
    if(empty($input_address)){
        $address_err = "Please enter an address.";     
    } else{
        $address = $input_address;
    }
    
    //验证薪水
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "Veuillez entrer le montant du salaire.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "Veuillez entrer un entier positif.";
    } else{
        $salary = $input_salary;
    }
    
    //Vérification des erreurs d'entrée avant l'insertion dans la base de données
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        //Préparation de l'insertion de l'expression INSERT
        $sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)";
         
        if($stmt = mysqli_prepare($link, $sql)){
            //Liens les variables en tant que paramètres à la requête préparée
            mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary);
            
            // Set parameters
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            
            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                //L'enregistrement a été créé avec succès. Redirection vers la page de connexion
                header("location: index.php");
                exit();
            } else{
                echo "S'est produit un problème. Veuillez réessayer plus tard.";
            }
        }
         
        // Close statement
        mysqli_stmt_close($stmt);
    }
    
    //Fermez la connexion
    mysqli_close($link);
}
?>
 
!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    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>Créer l'enregistrement</h2>
                    </div>
                    <p>Remplissez ce tableau et soumettez-le pour ajouter un enregistrement d'employé à la base de données.</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>Adresse</label>
                            <textarea name="address" class="form-control/textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>">
                            <label>Salaire</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="Soumettre">
                        <a href="index.php" class="btn btn-default">Annuler</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</html>

Le même fichier "create.php" affichera le formulaire HTML et traitera les données du formulaire soumis. Avant de sauvegarder les données, il effectuera également une validation de base des entrées de l'utilisateur.

Créer la page de lecture

Il est maintenant temps de construire la page de lecture de l'application CRUD.R fonction de lecture.

Créons un fichier nommé "read.php" et mettons le code suivant à l'intérieur. Il utiliseraEmployéde l'attribut id pour récupérer les enregistrements de la table employees.

Exemple en ligne

<?php
// 在进一步处理之前检查id参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
    //Inclure le fichier de configuration
    require_once "config.php";
    
    //Requête SELECT
    $sql = "SELECT * FROM employees WHERE id = ?";
    
    if($stmt = mysqli_prepare($link, $sql)){
        //Liens les variables en tant que paramètres à la requête préparée
        mysqli_stmt_bind_param($stmt, "i", $param_id);
        
        //设置参数
        $param_id = trim($_GET["id"]);
        
        //Essayer d'exécuter une requête préparée
        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{
                //L'URL ne contient pas un paramètre id valide. Redirigez vers la page d'erreur
                header("location: error.php");
                exit();
            }
            
        } else{
            echo "Ah ! Un problème est survenu. Veuillez réessayer plus tard.";
        }
    }
     
    // Close statement
    mysqli_stmt_close($stmt);
    
    //Fermez la connexion
    mysqli_close($link);
} else{
    //L'URL ne contient pas de paramètre id. Redirection vers la page d'erreur
    header("location: error.php");
    exit();
}
?>
!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Voir l'enregistrement</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>Voir l'enregistrement</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>Adresse</label>
                        <p class="form-control-static"><?php echo $row["address"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>Salaire</label>
                        <p class="form-control-static"><?php echo $row["salary"]; ?></p>
                    </div>
                    <p><a href="index.php" class="btn btn-primary">Retour</a></p>
                </div>
            </div>        
        </div>
    </div>
</html>

Créer la page de mise à jour

De même, nous pouvons créer la fonction UPDATE de notre application CRUD.

Créons un fichier nommé "update.php" et mettons le code suivant à l'intérieur. Il utiliseraEmployéde l'attribut idEmployéLes enregistrements existants dans le tableau.

Exemple en ligne

<?php
//Inclure le fichier de configuration
require_once "config.php";
 
//Définir des variables et les initialiser avec des valeurs vides
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
 
//Traiter les données du formulaire lors de la soumission du formulaire
if(isset($_POST["id"]) && !empty($_POST["id"])){
    // Obtenir la valeur d'un champ caché
    $id = $_POST["id"];
    
    // Valider le nom
    $input_name = trim($_POST["name"]);
    if(empty($input_name)){
        $name_err = "Veuillez saisir un nom.";
    } si (!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 address
    $input_address = trim($_POST["address"]);
    if(empty($input_address)){
        $address_err = "Please enter an address.";     
    } 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)){
            //Liens les variables en tant que paramètres à la requête préparée
            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;
            
            //Essayez d'exécuter l'instruction préparée
            if(mysqli_stmt_execute($stmt)){
                //记录更新成功。 重定向至登录页面
                header("location: index.php");
                exit();
            } else{
                echo "出了点问题。 请稍后再试。";
            }
        }
         
        // Close statement
        mysqli_stmt_close($stmt);
    }
    
    //Fermez la connexion
    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)){
            //Liens les variables en tant que paramètres à la requête préparée
            mysqli_stmt_bind_param($stmt, "i", $param_id);
            
            //设置参数
            $param_id = $id;
            
            //Essayez d'exécuter l'instruction préparée
            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 "Ah ! Un problème est survenu. Veuillez réessayer plus tard.";
            }
        }
        
        // Close statement
        mysqli_stmt_close($stmt);
        
        //Fermez la connexion
        mysqli_close($link);
    }  else{
        //L'URL ne contient pas de paramètre id. Redirection vers la page d'erreur
        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>Adresse</label>
                            <textarea name="address" class="form-control/textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>">
                            <label>Salaire</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="Soumettre">
                        <a href="index.php" class="btn btn-default">Annuler</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</html>

Créons la page de suppression

Enfin, nous construisonsdla fonction de suppression de notre application CRUD.

Créons un fichier nommé "delete.php" et insérez le code suivant. Il mettra en œuvreEmployél'attribut id estEmployéSupprimez les enregistrements existants dans le tableau.

Exemple en ligne

<?php
//Confirmez ensuite l'opération de suppression
if(isset($_POST["id"]) && !empty($_POST["id"])){
    //Inclut le fichier de configuration
    require_once "config.php";
    
    //Requête DELETE
    $sql = "DELETE FROM employees WHERE id = ?";
    
    if($stmt = mysqli_prepare($link, $sql)){
        //Liens les variables en tant que paramètres à la requête préparée
        mysqli_stmt_bind_param($stmt, "i", $param_id);
        
        // Set parameters
        $param_id = trim($_POST["id"]);
        
        //Essayez d'exécuter l'instruction préparée
        if(mysqli_stmt_execute($stmt)){
            //Suppression de l'enregistrement réussie. Redirection vers la page de connexion
            header("location: index.php");
            exit();
        } else{
            echo "Ah ! Un problème est survenu. Veuillez réessayer plus tard.";
        }
    }
     
    // Close statement
    mysqli_stmt_close($stmt);
    
    //Fermez la connexion
    mysqli_close($link);
} else{
    //Vérifiez l'existence du paramètre id
    if(empty(trim($_GET["id"]))){
        //L'URL ne contient pas de paramètre id. Redirection vers la page d'erreur
        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>Êtes-vous sûr de vouloir supprimer cet enregistrement ?</p><br>
    <p>
    <input type="submit" value="Oui" class="btn btn-danger">
    <a href="index.php" class="btn btn-default">Non</a>
</p>
</div>
</form>

Créer une page d'erreur

Enfin, créons un fichier "error.php" supplémentaire. Si la demande est invalide, c'est-à-dire que le paramètre id manque dans la chaîne de requête URL ou est invalide, cette page s'affichera.

<h1>Demande invalide</h1>
<div class="alert alert-danger fade in">
 <p>Désolé, la demande que vous avez soumise est invalide. Veuillez <a href="index.php" class="alert-link">Retour</a>Essayez encore.</p>
</div>

Après un long voyage, nous avons finalement terminé l'application CRUD en utilisant PHP et MySQL.