English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderá cómo construir aplicaciones CRUD utilizando PHP y MySQL.
CRUD esC reate,R ead,U pdate yD La abreviatura de elete. Las operaciones CRUD son las operaciones básicas de datos de la base de datos. En los capítulos anteriores, ya hemos aprendido cómo realizar operaciones de creación (es decir, inserción), lectura (es decir, selección), actualización y eliminación. En este tutorial, crearemos una aplicación PHP simple para ejecutar todas estas operaciones en una base de datos MySQL.
Bien, comencemos creando la tabla, que utilizaremos en todos los ejemplos.
Ejecute la siguiente consulta SQL para crear una base de datos llamadaemployees de la tabla. Utilizaremos esta tabla en todas las operaciones futuras.
CREATE TABLE employees ( id INT NO NULO PRIMARIA CLAVE AUTOINCREMENT nombre VARCHAR(100) NO NULO, direccion VARCHAR(255) NO NULO, salario INT(10) NO NULO );
Después de crear la tabla, necesitamos crear un script PHP para conectarnos al servidor de la base de datos MySQL. Vamos a crear un archivo llamado "config.php" e introduce el siguiente código en él.
Más tarde, usaremos la función PHP require_once() para incluir este archivo de configuración en otras páginas.
<?php /* Credenciales de la base de datos. Supongamos que estás ejecutando MySQL Servidor con configuraciones predeterminadas (usuario "root", sin contraseña) */ define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', ''); define('DB_NAME', 'demo'); /* Intentar conectarse a la base de datos MySQL */ $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); //Revisar conexión if($link === false){ die("Error: No se puede conectar. ". mysqli_connect_error()); } ?>
Primero, crearemos una página de inicio de sesión para la aplicación CRUD, que contiene una grilla de datos que muestraemployeeregistros en la tabla de la base de datos. También para cada registro que se muestra en la grilla hay un icono de acción, puedes elegir ver sus detalles, actualizarlo o eliminarlo.
Además, agregaremos un botón de creación en la parte superior de la grilla de datos, que se puede usar paraemployeeCrear un nuevo registro en la tabla. Crea un archivo llamado "index.php" e introduce el siguiente código en él:
!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 tipo="text//cdn.staticfile.org/jquery.min.js"></2.1.1/src="https:/script> <script tipo="text//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script> <style type="text/css"> .wrapper{ width: 650px; margin: 0 auto; } .pagina-header h2{ margen-top: 0; } table tr td:last-child a{ margen-right: 15px; } </style> <script tipo="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">Detalles de Empleados</h2> <a href="create.php" class="btn btn-success pull-right">Agregar Nuevo Empleado</a> </div> <?php //Incluir archivo de configuración require_once "config.php"; //Intentar ejecutar la consulta de selección $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>Nombre</th>"; echo "<th>Dirección</th>"; echo "<th>Salario</th>"; echo "<th>Acción</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='Ver Registro' data-toggle='tooltip'><span class='glyphicon glyphicon}}-eye-open"></span></a>"; echo "<a href='update.php?id=%. $row['id'] ."' title='Actualizar Registro' data-toggle='tooltip'><span class='glyphicon glyphicon}}-pencil"></span></a>"; echo "<a href='delete.php?id=%. $row['id'] ."' title='Borrar Registro' data-toggle='tooltip'><span class='glyphicon glyphicon}}-trash'></span></a>"; echo "</td>"; echo "</tr>"; } echo "</tbody>"; echo "</table>"; // Liberar conjunto de resultados mysqli_free_result($result); } else{ echo "<p class='lead'><em>No se encontraron registros.</em></p>"; } } else{ echo "Error: No se puede ejecutar $sql. " . mysqli_error($link); } //Cerrar conexión mysqli_close($link); ?> </div> </div> </div> </div> </body> </html>
enemployeesDespués de llenar la tabla con algunos registros, la página de inicio de sesión y la cuadrícula de datos CRUD pueden verse como se muestra en la siguiente imagen:
Consejo:Usamos el framework Bootstrap para crear rápidamente y bellamente el diseño de la aplicación CRUD. Bootstrap es el framework de frontend más popular y potente, utilizado para desarrollar web más rápido y fácilmente.
En esta sección, construiremos la página de creación de la aplicación CRUD.C función de creación.
Vamos a crear un archivo llamado "create.php" y colocaremos el siguiente código en él. Generará un formulario web que se puede usar paraemployeeInsertar registro en la tabla.
<?php //Incluir el archivo de configuración require_once "config.php"; //Definir variables e inicializar con valores vacíos $name = $address = $salary = ""; $name_err = $address_err = $salary_err = ""; //Manejar datos del formulario al enviar el formulario if($_SERVER["REQUEST_METHOD"] == "POST"){ // Validar nombre $input_name = trim($_POST["name"]); if(empty($input_name)){ $name_err = "Por favor, ingrese un nombre."; si (!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Por favor, ingrese un nombre válido."; } else{ $name = $input_name; } //Verificar la dirección $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 = "Por favor, ingrese el monto del salario."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Por favor, ingrese un entero positivo."; } else{ $salary = $input_salary; } //Revisar errores de entrada antes de insertar en la base de datos if(empty($name_err) && empty($address_err) && empty($salary_err)){ //Declaración INSERT preparada $sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($link, $sql)){ //La variable se binda como parámetro a la sentencia preparada mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary); // Establecer parámetros $param_name = $name; $param_address = $address; $param_salary = $salary; // Intento de ejecutar la declaración preparada if(mysqli_stmt_execute($stmt)){ //Se ha creado el registro con éxito. Redirigiendo a la página de inicio de sesión header("location: index.php"); exit(); } else{ echo "Se produjo un problema. Por favor, inténtelo de nuevo más tarde"; } } // Cerrar declaración mysqli_stmt_close($stmt); } //Cerrar conexión mysqli_close($link); } ?> !DOCTYPE html> <html> <head> <meta charset="UTF-8"> Crear Registro/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>Crear registro</h2> </div> <p>Por favor, llene este formulario y envíelo para agregar un registro de empleado a la base de datos.</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>Address</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>Sueldo</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="Enviar"> <a href="index.php" class="btn btn-default">Cancelar</a> </form> </div> </div> </div> </div> </html>
El mismo archivo "create.php" mostrará el formulario HTML y manejará los datos del formulario enviados. Antes de guardar los datos, también realizará una validación básica de la entrada del usuario.
Ahora es hora de construir la aplicación CRUD.R función de lectura.
Vamos a crear un archivo llamado "read.php" y poner el siguiente código dentro. EstoEmpleadola propiedad de id de la tabla employees para recuperar los registros.
<?php // 在进一步处理之前检查id参数是否存在 if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ //Incluir archivo de configuración require_once "config.php"; //la sentencia SELECT $sql = "SELECT * FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //La variable se binda como parámetro a la sentencia preparada mysqli_stmt_bind_param($stmt, "i", $param_id); //Establecer parámetros $param_id = trim($_GET["id"]); //Intentar ejecutar la sentencia preparada if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* Extraer la fila de resultados como un array asociativo. Dado que el conjunto de resultados contiene solo una fila, no es necesario usar un bucle while*/ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //Buscar valor de campo individual $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ //La URL no contiene un parámetro de id válido. Redirigir a la página de error header("location: error.php"); exit(); } } else{ echo "¡Ay! ¡Se produjo un problema. Por favor, inténtelo de nuevo más tarde."; } } // Cerrar declaración mysqli_stmt_close($stmt); //Cerrar conexión mysqli_close($link); } else{ //La URL no contiene el parámetro id. Redirigir a la página de error header("location: error.php"); exit(); } ?> !DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Ver Registro</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>Ver registro</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>Address</label> <p class="form-control-static"><?php echo $row["address"]; ?><//p> </div> <div class="form-group"> <label>Sueldo</label> <p class="form-control-static"><?php echo $row["salary"]; ?><//p> </div> <p><a href="index.php" class="btn btn-primary">Volver</a></p> </div> </div> </div> </div> </html>
Del mismo modo, podemos establecer nuestra funcionalidad de UPDATE en la aplicación CRUD.
Vamos a crear un archivo llamado "update.php" y poner el siguiente código dentro. EstoEmpleadola propiedad de idEmpleadoregistros existentes en la tabla.
<?php //Incluir archivo de configuración require_once "config.php"; //Definir variables e inicializar con valores vacíos $name = $address = $salary = ""; $name_err = $address_err = $salary_err = ""; //Manejar datos del formulario al enviar el formulario if(isset($_POST["id"]) && !empty($_POST["id"])){ // Obtener valor de entrada oculta $id = $_POST["id"]; // Validar nombre $input_name = trim($_POST["name"]); if(empty($input_name)){ $name_err = "Por favor, introduzca un nombre."; 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)){ //La variable se binda como parámetro a la sentencia preparada mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_address, $param_salary, $param_id); //Establecer parámetros $param_name = $name; $param_address = $address; $param_salary = $salary; $param_id = $id; //Intentar ejecutar la declaración preparada if(mysqli_stmt_execute($stmt)){ //记录更新成功。 重定向至登录页面 header("location: index.php"); exit(); } else{ echo "出了点问题。 请稍后再试。"; } } // Cerrar declaración mysqli_stmt_close($stmt); } //Cerrar conexión 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)){ //La variable se binda como parámetro a la sentencia preparada mysqli_stmt_bind_param($stmt, "i", $param_id); //Establecer parámetros $param_id = $id; //Intentar ejecutar la declaración preparada if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* Extraer la fila de resultados como un array asociativo. Dado que el conjunto de resultados contiene solo una fila, no es necesario usar un bucle while */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //Buscar valor de campo individual $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ //La URL no contiene un ID válido. Redirigir a la página de error header("location: error.php"); exit(); } } else{ echo "¡Ay! ¡Se produjo un problema. Por favor, inténtelo de nuevo más tarde."; } } // Cerrar declaración mysqli_stmt_close($stmt); //Cerrar conexión mysqli_close($link); } else{ //La URL no contiene el parámetro id. Redirigir a la página de error header("location: error.php"); exit(); } } ?> !DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Actualizar Registro</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>Actualizar registro</h2> </div> <p>Por favor, edite el valor de entrada y envíelo para actualizar el registro.</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>Address</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>Sueldo</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="Enviar"> <a href="index.php" class="btn btn-default">Cancelar</a> </form> </div> </div> </div> </div> </html>
Finalmente, construiremosdla función de eliminación CRUD de nuestra aplicación
Vamos a crear un archivo llamado "delete.php" e insertar el siguiente código. Esto se basa enEmpleadoel atributo id desdeEmpleadoEliminar el registro existente en la tabla.
<?php //Realizar la operación de eliminación después de confirmar if(isset($_POST["id"]) && !empty($_POST["id"])){ //Incluir el archivo de configuración require_once "config.php"; //Sentencia DELETE $sql = "DELETE FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //La variable se binda como parámetro a la sentencia preparada mysqli_stmt_bind_param($stmt, "i", $param_id); // Establecer parámetros $param_id = trim($_POST["id"]); //Intentar ejecutar la declaración preparada if(mysqli_stmt_execute($stmt)){ //Registro eliminado con éxito. Redirigir a la página de inicio header("location: index.php"); exit(); } else{ echo "¡Ay! ¡Se produjo un problema. Por favor, inténtelo de nuevo más tarde."; } } // Cerrar declaración mysqli_stmt_close($stmt); //Cerrar conexión mysqli_close($link); } else{ //Verificar si el parámetro id existe if(empty(trim($_GET["id"]))){ //La URL no contiene el parámetro id. Redirigir a la página de error 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>¿Está seguro de que desea eliminar este registro?</p><br> <p> <input type="submit" value="Sí" class="btn btn-danger"> <a href="index.php" class="btn btn-default">No</a> </p> </div> </form>
Finalmente, creemos un archivo más "error.php". Si la solicitud es inválida, es decir, falta el parámetro id en la cadena de consulta de URL o el parámetro es inválido, se mostrará esta página.
<h1>Solicitud no válida</h1> <div class="alert alert-danger fade in"> <p>Lo siento, la solicitud que ha presentado no es válida. Por favor, <a href="index.php" class="alert-link">Volver</a> Intente nuevamente más tarde.</p> </div>
Después de un largo viaje, finalmente completamos la aplicación CRUD utilizando PHP y MySQL.