Insertar registro con PDO

En esta entrada voy a explicar como se inserta un registro en una tabla de una base de datos Mysql con o procedimiento PDO

Preparamos en primero lugar el formulario onde vamos registrando los datos que queremos insertar

Codigo html del formulario


        <!doctype html>
<html lang="en">

<head>
    <title>Title</title>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS v5.2.1 -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">

</head>

<body>
    <header>
        <nav class="navbar navbar-expand navbar-light bg-light">
            <ul class="nav navbar-nav">
                <li class="nav-item">
                    <a class="nav-link" href="insertar_personal.php">Insertar</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="lista_personal.php">Lista Personal</a>
                </li>
            </ul>
        </nav><br>
    </header>
    <main>
        <div class="container border border-danger border-2 p-3">
            <form action="" method="post" class="row g-2 bg-warning p-3">
                <label for="">nombres</label>
                <input class="form-control" type="text" name="txtNombre" id="">
                <label for="">email</label>
                <input class="form-control" type="email" name="txtEmail" id="">
                <label for="">edad</label>
                <input class="form-control" type="text" name="txtEdad" id="">
                <label for="">pais</label>
                <input class="form-control" type="text" name="txtPais" id="">
                <label for="">fecha</label>
                <input class="form-control" type="date" name="txtFecha" id="">
                <button name="insertar" type="submit" class="btn btn-success  btn-block">Guardar</button>
            </form>
        </div>
    </main>
    <footer>
        <!-- place footer here -->
    </footer>
    <!-- Bootstrap JavaScript Libraries -->
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"
        integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous">
    </script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.min.js"
        integrity="sha384-7VPbUDkoPSGFnVtYi0QogXtr74QeVeeIs99Qfg5YCF+TidwNdjvaKZX19NZ/e6oz" crossorigin="anonymous">
    </script>
</body>
</html>
    



...

Como bien sabemos el formulario tiene que hacer un envio por POST y la accion la dejamos en blanco para que se redirecione a la propria pagina.

1-Declaramos la condicional de envío

Cuando hacemos clic en el button enviar o guardar o insertar dependiendo de como se le llame, hacemos un envio tipo POST

Como la accion esta en blanco el envio sera hecho a la propria pagina, asi que ya dentro del codigo php vamos a verificar esa condicion

        if(isset($_POST['insertar'])){
            ....
            }
    



2-Condiciones de datos

En esta seccion podemos ver varias condiciones, como por ejemplo que:

  • Los datos no vayam vacios
  • Los datos (Email, telefono etc) no sean repetidos

NOTA para verificar si el telefono o email existe en la base de datos hay que hacer otra consulta dentro de la condicion


        if (empty($_POST['txtNombre']) || empty($_POST['txtEmail'])) { ?>
            <script>
            alert('Tiene que rellenar todos los campos');
            </script>
            <?php  }
    



Las variables enviadas

Si hasta este punto esta todo bien, las validaciones correctas, y hubo envio POST procedemos a recopilar los datos enviados del formulario en variables


        $name = $_POST['txtNombre'];
        $email = $_POST['txtEmail'];
        $edad = $_POST['txtEdad'];
        $pais = $_POST['txtPais'];
        $fecha = $_POST['txtFecha'];
        print_r($_POST);
    



Crear una consulta INSERT

Llego el momento de crear la consulta para insertar el registro

       $sql = ("INSERT INTO tbl_personal (idPersonal, nombres, email, edad, pais, fecha_registro)
       VALUES (NULL, :nombres, :email, :edad, :pais, :fecha);");
       $stmt = $pdo->prepare($sql);
       $stmt->bindParam('nombres', $name);
       $stmt->bindParam('email', $email);
       $stmt->bindParam('edad', $edad);
       $stmt->bindParam('pais', $pais);
       $stmt->bindParam('fecha', $fecha);
       $stmt->execute();
    



1º-Preparar la consulta

       $sql = ("INSERT INTO tbl_personal (idPersonal, nombres, email, edad, pais, fecha_registro)
       VALUES (NULL, :nombres, :email, :edad, :pais, :fecha);");
       $stmt = $pdo->prepare($sql);
    



2º-Enlazamos los parametros (bindParam) con las variables

$stmt->bindParam('nombres', $name);
$stmt->bindParam('email', $email);
$stmt->bindParam('edad', $edad);
$stmt->bindParam('pais', $pais);
$stmt->bindParam('fecha', $fecha);
    



Ejecutamos la consulta:

$stmt->execute();
    



Comprovacion de la isercion

Llegados a este punto nos resta saber si la insercion fue excitosa o no

Si lo fue nos redimensionara a la lista del personal y si no nos enviara un alert alertandonos de lo ocorrido

        if ($lastInsertId > 0) {

            header('location:lista_personal.php');
        } else {
            echo "
No se pueden agregar datos, comuníquese con el administrador
"; print_r($stmt->errorInfo()); }



Codigo del ejemplo completo

            <?php
            include_once('conexion.php');
            
            $alert = '';
            if (isset($_POST['insertar'])) {
                //print_r($_POST);
                // exit;
                //Verificacion si el input va vacio
                if (empty($_POST['txtNombre']) || empty($_POST['txtEmail'])) { ?>
            
            <script>
            alert('Tiene que rellenar todos los campos');
            </script>
            
            
            <?php  } else {
            
                    $name = $_POST['txtNombre'];
                    $email = $_POST['txtEmail'];
                    $edad = $_POST['txtEdad'];
                    $pais = $_POST['txtPais'];
                    $fecha = $_POST['txtFecha'];
                    print_r($_POST);
            
                    $sql = ("INSERT INTO tbl_personal (idPersonal, nombres, email, edad, pais, fecha_registro)
                     VALUES (NULL, :nombres, :email, :edad, :pais, :fecha);");
                    $stmt = $pdo->prepare($sql);
                    $stmt->bindParam('nombres', $name);
                    $stmt->bindParam('email', $email);
                    $stmt->bindParam('edad', $edad);
                    $stmt->bindParam('pais', $pais);
                    $stmt->bindParam('fecha', $fecha);
                    $stmt->execute();
                    $lastInsertId = $pdo->lastInsertId();
                    if ($lastInsertId > 0) {
            
                        header('location:lista_personal.php');
                    } else {
                        echo "<div class='content alert alert-danger'> No se pueden agregar datos, comuníquese con el administrador  </div>";
            
                        print_r($stmt->errorInfo());
                    }
                }
            }
             
            ?>
            
            <!doctype html>
            <html lang="en">
            
            <head>
                <title>Title</title>
                <!-- Required meta tags -->
                <meta charset="utf-8">
                <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
            
                <!-- Bootstrap CSS v5.2.1 -->
                <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/css/bootstrap.min.css" rel="stylesheet"
                    integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
            
            </head>
            
            <body>
                <header>
                    <nav class="navbar navbar-expand navbar-light bg-light">
                        <ul class="nav navbar-nav">
                            <li class="nav-item">
                                <a class="nav-link" href="insertar_personal.php">Insertar</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="lista_personal.php">Lista Personal</a>
                            </li>
                        </ul>
                    </nav><br>
                </header>
                <main>
                    <div class="container border border-danger border-2 p-3">
            
                        <h1 class="text-center " style="font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;">
                            Insertar datos del personal</h1><br>
                        <form action="" method="post" class="row g-2 bg-warning p-3">
            
                            <label for="">nombres</label>
                            <input class="form-control" type="text" name="txtNombre" id="">
                            <label for="">email</label>
                            <input class="form-control" type="email" name="txtEmail" id="">
                            <label for="">edad</label>
                            <input class="form-control" type="text" name="txtEdad" id="">
                            <label for="">pais</label>
                            <input class="form-control" type="text" name="txtPais" id="">
                            <label for="">fecha</label>
                            <input class="form-control" type="date" name="txtFecha" id="">
                            <button name="insertar" type="submit" class="btn btn-success  btn-block">Guardar</button>
                        </form>
                    </div><br>
            
                </main>
                <footer>
                    <!-- place footer here -->
                </footer>
                <!-- Bootstrap JavaScript Libraries -->
                <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"
                    integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous">
                </script>
            
                <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.min.js"
                    integrity="sha384-7VPbUDkoPSGFnVtYi0QogXtr74QeVeeIs99Qfg5YCF+TidwNdjvaKZX19NZ/e6oz" crossorigin="anonymous">
                </script>
            
            </body>
            
            </html>
        





Publicar un comentario

0 Comentarios