Insert Múltiple con PHP PDO bajo el patrón MVC

Tutoriales de Informática y Dispositivos Móviles Foros Programación Php Insert Múltiple con PHP PDO bajo el patrón MVC

Etiquetado: 

Este debate contiene 3 respuestas, tiene 2 mensajes y lo actualizó  kamilore hace 6 meses, 4 semanas.

Viendo 4 publicaciones - del 1 al 4 (de un total de 4)
  • Autor
    Publicaciones
  • #5033

    DjCrazy
    Participante

    Hola, estoy tratando de implementar un insert múltiple (de una tabla HTML) a MySQL con PDO a través del patrón MVC.

    El siguiente es el código que tengo hasta ahora. Sospecho que me falta un ciclo pero no se donde debe ir (en la vista, en el controlador o en el modelo).

    Gracias desde ahora si me pueden ayudar a resolverlo!!!

    Tabla MySQL:

    CREATE TABLE valor.prueba ( documento INT(15) NOT NULL , nombre VARCHAR(50) NOT NULL ) ENGINE = InnoDB;

    Vista:

    <?php

    require_once «controlador.php»;
    require_once «modelo.php»;

    ?>

    <!DOCTYPE html>
    <html>
    <head>
    <title></title>
    </head>
    <body>
    <form role=»form» method=»post»>
    <table>
    <thead>
    <tr>
    <th>Documento</th>
    <th>Nombre</th>
    </tr>
    </thead>
    <tbody>
    <?php for ($i=0; $i < 2; $i++) :?>
    <tr>
    <td>
    <input type=»text» name=»documento[]»>
    </td>
    <td>
    <input type=»text» name=»nombre[]»>
    </td>
    </tr>
    <?php endfor; ?>
    </tbody>
    </table>
    <input type=»submit» name=»guardar» value=»Guardar»>
    <?php
    $ingresarDatos = new ControladorDatos();
    $ingresarDatos -> ctrIngresarDato();
    ?>
    </form>
    </body>
    </html>

    Controlador:

    <?php
    class ControladorDatos {
    static public function ctrIngresarDato(){
    if (isset($POST_[«documento»])) {
    $tabla = «prueba»;
    $datos = array(«documento»=>$POST_[«documento»], «nombre»=>$POST_[«nombre»]);

    $respuesta = ModeloDatos::mdlIngresarDatos($tabla, $datos);

    if ($respuesta == «ok») {
    echo «Se han insertado los datos»;
    } else {
    echo «No se han insertado los datos»;
    }
    }
    }
    }

    Modelo:

    <?php
    class Conexion{
    static public function conectar(){
    $link = new PDO(«mysql:host=localhost;dbname=valor»,»root»,»»);
    }
    }

    class ModeloDatos{
    static public function mdlIngresarDatos($tabla, $datos){
    $stmt = Conexion::conectar()->prepare(«INSERT INTO $tabla(documento, nombre) VALUES (:documento, :nombre)»);
    $stmt->bindParam(«:documento», $datos[«documento»], PDO::PARAM_STR);
    $stmt->bindParam(«:nombre», $datos[«nombre»], PDO::PARAM_STR);

    if ($stmt->execute()) {
    return «ok»;
    } else {
    return «error»;
    }
    $stmt = null;
    }
    }

    #5034

    kamilore
    Jefe de claves

    Hola. Hoy estuve muy liado. A ver si mañana lo veo pero te doy alguna pista a ver si te sirve.

    Lo que recibe el controlador por post son dos arrays. Para usarlos debes escribir $_POST[‘documento’] y $_POST[‘nombre’]

    En el modelo, la clase que crea la conexión debe tener un return. Tal como la tienes no funcionará.
    debes añadir: return $objetoPDO;

    Deberás hacer un bucle para ejecutar el $stmt->execute() para introducir los datos de los dos arrays

    Un saludo. Espero haberte ayudado

    #5035

    DjCrazy
    Participante

    No te preocupes, igual estuve probando y lo resolví así:

    class ModeloDatos{
    static public function mdlIngresarDatos($tabla, $datos){

    $stmt = Conexion::conectar()->prepare(«INSERT INTO $tabla(documento, nombre) VALUES (:documento, :nombre)»);

    foreach ($datos as $value) {
    $stmt->bindParam(«:documento», $value[«documento»], PDO::PARAM_STR);
    $stmt->bindParam(«:nombre», $value[«nombre»], PDO::PARAM_STR);

    if ($stmt->execute()) {
    return «ok»;
    }
    }
    return «error»;

    $stmt = null;
    }
    }

    Mil gracias por tu interés, tu apoyo y por habilitar el espacio en tu sitio.

    #5036

    kamilore
    Jefe de claves

    Me alegro que lo hayas resuelto. Un saludo

Viendo 4 publicaciones - del 1 al 4 (de un total de 4)

Debes estar registrado para responder a este debate.

Translate »
Ir a la barra de herramientas