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

Tutorial básico PHP

Tutorial avanzado PHP

PHP & MySQL

Manual de referencia PHP

PHP MySQL Añadir/Eliminar/Actualizar/Borrar (CRUD)

En este tutorial, aprenderá cómo construir aplicaciones CRUD utilizando PHP y MySQL.

¿Qué es CRUD

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.

Crear tabla de base de datos

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
);

Crear archivo de configuración

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.

Ejemplo en línea

<?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());
}
?>

Crear página de inicio de sesión

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:

Ejemplo en línea

!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.

Página de creación de registros

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.

Ejemplo en línea

<?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.

Crear página de lectura

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.

Ejemplo en línea

<?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>

Crear página de actualización

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.

Ejemplo en línea

<?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>

Crear la página de eliminación

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.

Ejemplo en línea

<?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>

Crear página de error

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.