2023-02-13 0 ∞ 1
В этой статье мы рассмотрим разработку простого набора CRUD операций на PHP, предназначенного для работы с базой данных MySQL. Для создания кода CRUD будет использовано расширение MySQLi, для оформления – стили Bootstrap. Приложение будет выполнять все стандартные операции CRUD – создание, чтение, модификацию и удаление записей.
Что такое CRUD: это аббревиатура, обозначающая четыре главные операции, используемые в приложениях для управления базами данных – создание (create), чтение (read), модификацию (update) и удаление (delete) записей.
Итак, приступим к разработке CRUD на PHP и MySQLi с нуля.
Шаг 1: Создание таблицы базы данных
Приведенная ниже SQL команда создает таблицу с данными пользователей в базе MySQL.
CREATE TABLE users ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL, phone_number VARCHAR(15) NOT NULL, address VARCHAR(255) NOT NULL );
Шаг 2: Создание файла конфигурации
После создания таблицы мы переходим к настройке подключения к серверу базы данных MySQL. Для этого нужно создать файл config.php и поместить в него приведенный ниже код.
<?php define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', ''); define('DB_NAME', 'php_crud'); $conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); if ($conn === false) { die("ERROR: Could not connect. " . mysqli_connect_error()); } ?>
Это подключение можно вызывать на всех страницах – с помощью PHP функции require_once().
Шаг 3: Посадочная страница
На посадочной странице данные пользователей будут выводиться в виде таблицы. Мы предусмотрим иконки для операций редактирования, просмотра и удаления данных.
Для создания лендинга мы добавим файл index.php в директорию CRUD. Вставьте в файл данный ниже код.
<!DOCTYPE html> <html lang="en"> <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://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <style> .wrapper { width: 1200px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <h2 class="text-center">PHP CRUD Tutorial Example with <a href="https://codingdriver.com/">Coding Driver</a></h2> <div class="col-md-12"> <div class="page-header clearfix"> <h2 class="pull-left">Users</h2> <a href="create.php" class="btn btn-success pull-right">Add New User</a> </div> <?php // Include config file require_once "config.php"; // select all users $data = "SELECT * FROM users"; if($users = mysqli_query($conn, $data)){ if(mysqli_num_rows($users) > 0){ echo "<table class='table table-bordered table-striped'> <thead> <tr> <th>#</th> <th>First Name</th> <th>Last Name</th> <th>Email</th> <th>Phone Number</th> <th>Address</th> <th>Action</th> </tr> </thead> <tbody>"; while($user = mysqli_fetch_array($users)) { echo "<tr> <td>" . $user['id'] . "</td> <td>" . $user['first_name'] . "</td> <td>" . $user['last_name'] . "</td> <td>" . $user['email'] . "</td> <td>" . $user['phone_number'] . "</td> <td>" . $user['address'] . "</td> <td> <a href='read.php?id=". $user['id'] ."' title='View User' data-toggle='tooltip'><span class='glyphicon glyphicon-eye-open'></span></a> <a href='edit.php?id=". $user['id'] ."' title='Edit User' data-toggle='tooltip'><span class='glyphicon glyphicon-pencil'></span></a> <a href='delete.php?id=". $user['id'] ."' title='Delete User' data-toggle='tooltip'><span class='glyphicon glyphicon-trash'></span></a> </td> </tr>"; } echo "</tbody> </table>"; mysqli_free_result($users); } else{ echo "<p class='lead'><em>No records found.</em></p>"; } } else{ echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); } // Close connection mysqli_close($conn); ?> </div> </div> </div> </div> </body> </html>
Основы работы с MySQL в PHP
Можно вставить какие-нибудь тестовые данные прямо в таблицу базы данных, изменения отобразятся на странице.
Шаг 4: Страница создания записей
На этом этапе мы разработаем CRUD операцию по созданию записей. Для этого создайте новый файл под названием create.php и поместите в него следующий код:
<?php require_once "config.php"; $first_name = $last_name = $email = $phone_number = $address = ""; $first_name_error = $last_name_error = $email_error = $phone_number_error = $address_error = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $firstName = trim($_POST["first_name"]); if (empty($firstName)) { $first_name_error = "First Name is required."; } elseif (!filter_var($firstName, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Zs]+$/")))) { $first_name_error = "First Name is invalid."; } else { $firstName = $firstName; } $lastName = trim($_POST["last_name"]); if (empty($lastName)) { $last_name_error = "Last Name is required."; } elseif (!filter_var($firstName, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Zs]+$/")))) { $last_name_error = "Last Name is invalid."; } else { $lastName = $lastName; } $email = trim($_POST["email"]); if (empty($email)) { $email_error = "Email is required."; } elseif (!filter_var($firstName, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Zs]+$/")))) { $email_error = "Please enter a valid email."; } else { $email = $email; } $phoneNumber = trim($_POST["phone_number"]); if(empty($phoneNumber)){ $phone_number_error = "Phone Number is required."; } else { $phoneNumber = $phoneNumber; } $address = trim($_POST["address"]); if(empty($address)){ $address_error = "Address is required."; } else { $address = $address; } if (empty($first_name_error_err) && empty($last_name_error) && empty($email_error) && empty($phone_number_error) && empty($address_error) ) { $sql = "INSERT INTO `users` (`first_name`, `last_name`, `email`, `phone_number`, `address`) VALUES ('$firstName', '$lastName', '$email', '$phoneNumber', '$address')"; if (mysqli_query($conn, $sql)) { header("location: index.php"); } else { echo "Something went wrong. Please try again later."; } } mysqli_close($conn); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Create User</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <style> .wrapper { width: 1200px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h2>Create User</h2> </div> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="form-group <?php echo (!empty($first_name_error)) ? 'has-error' : ''; ?>"> <label>First Name</label> <input type="text" name="first_name" class="form-control" value=""> <span class="help-block"><?php echo $first_name_error;?></span> </div> <div class="form-group <?php echo (!empty($last_name_error)) ? 'has-error' : ''; ?>"> <label>Last Name</label> <input type="text" name="last_name" class="form-control" value=""> <span class="help-block"><?php echo $last_name_error;?></span> </div> <div class="form-group <?php echo (!empty($email_error)) ? 'has-error' : ''; ?>"> <label>Email</label> <input type="email" name="email" class="form-control" value=""> <span class="help-block"><?php echo $email_error;?></span> </div> <div class="form-group <?php echo (!empty($phone_number_error)) ? 'has-error' : ''; ?>"> <label>Phone Number</label> <input type="number" name="phone_number" class="form-control" value=""> <span class="help-block"><?php echo $phone_number_error;?></span> </div> <div class="form-group <?php echo (!empty($address_error)) ? 'has-error' : ''; ?>"> <label>Address</label> <textarea name="address" class="form-control"></textarea> <span class="help-block"><?php echo $address_error;?></span> </div> <input type="submit" class="btn btn-primary" value="Submit"> <a href="index.php" class="btn btn-default">Cancel</a> </form> </div> </div> </div> </div> </body> </html>
Создаем CRUD-приложение с помощью Yii за считанные минуты
Файл create.php будет отображать HTML форму для ввода и валидации данных.
Шаг 5: Страница модификации записей
По аналогии со страницей создания записей мы разработаем функцию и страницу модификации данных. Создайте файл с именем edit.php и вставьте в него приведенный ниже код, который обеспечивает редактирование записей, уже существующих в базе данных.
<?php require_once "config.php"; $first_name = $last_name = $email = $phone_number = $address = ""; $first_name_error = $last_name_error = $email_error = $phone_number_error = $address_error = ""; if (isset($_POST["id"]) && !empty($_POST["id"])) { $id = $_POST["id"]; $firstName = trim($_POST["first_name"]); if (empty($firstName)) { $first_name_error = "First Name is required."; } elseif (!filter_var($firstName, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Zs]+$/")))) { $first_name_error = "First Name is invalid."; } else { $firstName = $firstName; } $lastName = trim($_POST["last_name"]); if (empty($lastName)) { $last_name_error = "Last Name is required."; } elseif (!filter_var($firstName, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Zs]+$/")))) { $last_name_error = "Last Name is invalid."; } else { $lastName = $lastName; } $email = trim($_POST["email"]); if (empty($email)) { $email_error = "Email is required."; } elseif (!filter_var($firstName, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Zs]+$/")))) { $email_error = "Please enter a valid email."; } else { $email = $email; } $phoneNumber = trim($_POST["phone_number"]); if (empty($phoneNumber)){ $phone_number_error = "Phone Number is required."; } else { $phoneNumber = $phoneNumber; } $address = trim($_POST["address"]); if (empty($address)) { $address_error = "Address is required."; } else { $address = $address; } if (empty($first_name_error_err) && empty($last_name_error) && empty($email_error) && empty($phone_number_error) && empty($address_error) ) { $sql = "UPDATE `users` SET `first_name`= '$firstName', `last_name`= '$lastName', `email`= '$email', `phone_number`= '$phoneNumber', `address`= '$address' WHERE id='$id'"; if (mysqli_query($conn, $sql)) { header("location: index.php"); } else { echo "Something went wrong. Please try again later."; } } mysqli_close($conn); } else { if (isset($_GET["id"]) && !empty(trim($_GET["id"]))) { $id = trim($_GET["id"]); $query = mysqli_query($conn, "SELECT * FROM users WHERE ID = '$id'"); if ($user = mysqli_fetch_assoc($query)) { $firstName = $user["first_name"]; $lastName = $user["last_name"]; $email = $user["email"]; $phoneNumber = $user["phone_number"]; $address = $user["address"]; } else { echo "Something went wrong. Please try again later."; header("location: edit.php"); exit(); } mysqli_close($conn); } else { echo "Something went wrong. Please try again later."; header("location: edit.php"); exit(); } } ?> <!DOCTYPE html> <html lang="en"> <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> .wrapper { width: 1200px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h2>Update User</h2> </div> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <input type="hidden" name="id" value="<?php echo $id; ?>"/> <div class="form-group <?php echo (!empty($first_name_error)) ? 'has-error' : ''; ?>"> <label>First Name</label> <input type="text" name="first_name" class="form-control" value="<?php echo $firstName; ?>"> <span class="help-block"><?php echo $first_name_error;?></span> </div> <div class="form-group <?php echo (!empty($last_name_error)) ? 'has-error' : ''; ?>"> <label>Last Name</label> <input type="text" name="last_name" class="form-control" value="<?php echo $lastName; ?>"> <span class="help-block"><?php echo $last_name_error;?></span> </div> <div class="form-group <?php echo (!empty($email_error)) ? 'has-error' : ''; ?>"> <label>Email</label> <input type="email" name="email" class="form-control" value="<?php echo $email; ?>"> <span class="help-block"><?php echo $email_error;?></span> </div> <div class="form-group <?php echo (!empty($phone_number_error)) ? 'has-error' : ''; ?>"> <label>Phone Number</label> <input type="number" name="phone_number" class="form-control" value="<?php echo $phoneNumber; ?>"> <span class="help-block"><?php echo $phone_number_error;?></span> </div> <div class="form-group <?php echo (!empty($address_error)) ? 'has-error' : ''; ?>"> <label>Address</label> <textarea name="address" class="form-control"><?php echo $address; ?></textarea> <span class="help-block"><?php echo $address_error;?></span> </div> <input type="submit" class="btn btn-primary" value="Submit"> <a href="index.php" class="btn btn-default">Cancel</a> </form> </div> </div> </div> </div> </body> </html>
Расширения PHP для работы с mp3
Шаг 6: Чтение записей
Для вывода на экран данных пользователей мы разработаем функцию чтения записей. Создайте файл read.php, сохраните в нем данный ниже код. Файл будет запрашивать данные пользователей по ID из таблицы базы данных.
<!DOCTYPE html> <html lang="en"> <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> .wrapper{ width: 1200px; margin: 0 auto; } </style> </head> <body> <?php if (isset($_GET["id"]) && !empty(trim($_GET["id"]))) { require_once "config.php"; $id = trim($_GET["id"]); $query = mysqli_query($conn, "SELECT * FROM users WHERE ID = '$id'"); if ($user = mysqli_fetch_assoc($query)) { $firstName = $user["first_name"]; $lastName = $user["last_name"]; $email = $user["email"]; $phoneNumber = $user["phone_number"]; $address = $user["address"]; } else { header("location: read.php"); exit(); } mysqli_close($conn); } else { header("location: read.php"); exit(); } ?> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h1> User View</h1> </div> <div class="form-group"> <label>First Name</label> <p class="form-control-static"><?php echo $firstName ?></p> </div> <div class="form-group"> <label>Last Name</label> <p class="form-control-static"><?php echo $lastName ?></p> </div> <div class="form-group"> <label>Email</label> <p class="form-control-static"><?php echo $email ?></p> </div> <div class="form-group"> <label>Phone Number</label> <p class="form-control-static"><?php echo $phoneNumber ?></p> </div> <div class="form-group"> <label>Address</label> <p class="form-control-static"><?php echo $address ?></p> </div> <p><a href="index.php" class="btn btn-primary">Back</a></p> </div> </div> </div> </div> </body> </html>
Шаг 7: Удаление записей
На заключительном этапе мы разработаем функцию удаления записей. Создайте файл delete.php, вставьте в него приведенный ниже код, который отвечает за удаление существующих в базе записей по ID пользователя.
<?php if (isset($_POST["id"]) && !empty($_POST["id"])) { require_once "config.php"; $id = $_POST["id"]; $query = "DELETE FROM users WHERE id = '$id'"; if (mysqli_query($conn, $query)) { header("location: index.php"); } else { echo "Something went wrong. Please try again later."; } mysqli_close($conn); } else { if (empty(trim($_GET["id"]))) { echo "Something went wrong. Please try again later."; header("location: index.php"); exit(); } } ?> <!DOCTYPE html> <html lang="en"> <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> .wrapper{ width: 500px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h1>Delete Record</h1> </div> <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>Are you sure you want to delete this record?</p><br> <p> <input type="submit" value="Yes" class="btn btn-danger"> <a href="index.php" class="btn btn-default">No</a> </p> </div> </form> </div> </div> </div> </div> </body> </html>
Наконец, наш набор CRUD операций для работы с записями в базе данных MySQL готов. Если у вас есть вопросы или замечания – ждем их в комментариях.
Источник: