English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à utiliser PHP et MySQL pour construire une application 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.
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()函数将此配置文件包含在其他页面中。
<?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>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.
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.
<?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.
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.
<?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>
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.
<?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>
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.
<?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>
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.