Tutoriales de Informática y Dispositivos Móviles › Foros › Programación › Php › Insert Múltiple con PHP PDO bajo el patrón MVC
Etiquetado: PHP PDO MVC MySQL
- Este debate tiene 3 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 4 años, 1 mes por
kamilore.
- AutorEntradas
- diciembre 20, 2018 a las 7:44 pm #5033
DjCrazy
ParticipanteHola, 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;
}
}diciembre 21, 2018 a las 5:10 pm #5034kamilore
SuperadministradorHola. 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
diciembre 21, 2018 a las 6:21 pm #5035DjCrazy
ParticipanteNo 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.
diciembre 22, 2018 a las 3:11 am #5036kamilore
SuperadministradorMe alegro que lo hayas resuelto. Un saludo
- AutorEntradas
- Debes estar registrado para responder a este debate.