Título: CRUD PDO UPDATE y DELETE recogiendo varias primary key Publicado por: synysevend90 en 5 Abril 2017, 16:16 pm Buenas tardes. Tengo un proyecto entre manos que consta de 7 tablas de las que debo de crear un CRUD.
Tengo 6 de 7 tablas ya montadas pudiendo eliminar modificar e insertar datos a traves de una interfaz web. Incluso puedo cambiar las primary key de las tablas modificandose en cascada. Bien el problema es el siguiente. En la 7 tabla tengo 4 primary keys que se necesitan las unas a las otras. Y mi problema esque soy incapaz de hacer que funcione correctamente, o llega con valores vacios o directamente eliminas una fila y se carga 20 por no preguntar a las demas primarys keys. Les indexo el codigo y tambien lo e subido a mega con su correspondientes tablas de mysql. Este es el Index7.php <?php require_once 'alumno.entidad7.php'; require_once 'alumno.model7.php'; // Logica $alm = new Categoria(); $model = new CategoriaModel(); if (isset($_REQUEST['action'])) { switch ($_REQUEST['action']) { case 'actualizar': // Recupero el id del campo hidden $alm->__SET('titulo_documento', $_REQUEST['titulo_documento']); $alm->__SET('proyecto', $_REQUEST['proyecto']); $alm->__SET('estado', $_REQUEST['estado']); $alm->__SET('idioma', $_REQUEST['idioma']); $alm->__SET('num_documento', $_REQUEST['num_documento']); $alm->__SET('version', $_REQUEST['version']); $alm->__SET('revision', $_REQUEST['revision']); $alm->__SET('descripcion', $_REQUEST['descripcion']); $alm->__SET('fecha', $_REQUEST['fecha']); $alm->__SET('subcategoria', $_REQUEST['subcategoria']); $alm->__SET('confidencialidad', $_REQUEST['confidencialidad']); $alm->__SET('tipo_documento', $_REQUEST['tipo_documento']); $alm->__SET('acro_usuario', $_REQUEST['acro_usuario']); $alm->__SET('aprobado_por', $_REQUEST['aprobado_por']); $alm->__SET('autorizado_por', $_REQUEST['autorizado_por']); $alm->__SET('revisor', $_REQUEST['revisor']); $alm->__SET('compania', $_REQUEST['compania']); $alm->__SET('codigo_proyecto', $_REQUEST['codigo_proyecto']); $update_results = $model->Actualizar($alm, $_POST['id']); header('Location: index7.php'); break; case 'registrar': $alm->__SET('titulo_documento', $_REQUEST['titulo_documento']); $alm->__SET('proyecto', $_REQUEST['proyecto']); $alm->__SET('estado', $_REQUEST['estado']); $alm->__SET('idioma', $_REQUEST['idioma']); $alm->__SET('num_documento', $_REQUEST['num_documento']); $alm->__SET('version', $_REQUEST['version']); $alm->__SET('revision', $_REQUEST['revision']); $alm->__SET('descripcion', $_REQUEST['descripcion']); $alm->__SET('fecha', $_REQUEST['fecha']); $alm->__SET('subcategoria', $_REQUEST['subcategoria']); $alm->__SET('confidencialidad', $_REQUEST['confidencialidad']); $alm->__SET('tipo_documento', $_REQUEST['tipo_documento']); $alm->__SET('acro_usuario', $_REQUEST['acro_usuario']); $alm->__SET('aprobado_por', $_REQUEST['aprobado_por']); $alm->__SET('autorizado_por', $_REQUEST['autorizado_por']); $alm->__SET('revisor', $_REQUEST['revisor']); $alm->__SET('compania', $_REQUEST['compania']); $alm->__SET('codigo_proyecto', $_REQUEST['codigo_proyecto']); $model->Registrar($alm); header('Location: index7.php'); break; case 'eliminar': $model->Eliminar = array(($_REQUEST['titulo_documento']['num_documento']['version']['revision'])); header('Location: index7.php'); break; case 'editar': // Recupero los datos por el id // $obj_categoria es un objeto del tipo Categoria $obj_categoria = $model->Obtener($_REQUEST['id']); break; default: // MENSAJE 404 PARA CUANDO LA ACCION NO ES VALIDA header('HTTP/1.0: 404 Not Found'); die('<h1>404 Page Not Found</h1>'); } } ?> <!DOCTYPE html> <html lang="es"> <head> <title>Anexsoft</title> <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/pure-min.css"> <script src="https://code.jquery.com/jquery-3.2.0.js"></script> <script> $(document).ready(function () { $('#titulo_documento, #compania, #subcategoria, #proyecto, #fecha, #idioma').change(function () { $('#codigo_proyecto').val($('#titulo_documento').val() + "-" + $('#compania').val() + "-" + $('#subcategoria').val() + "-" + $('#proyecto').val() + "-" + $('#fecha').val() + "-(" + $('#idioma').val() + ")"); }); }); </script> </head> <body style="padding:15px;"> <div class="pure-g"> <div class="pure-u-1-12"> <form action="?action=<?php echo isset($obj_categoria) ? 'actualizar' : 'registrar'; ?>" method="POST" class="pure-form pure-form-stacked" style="margin-bottom:30px;"> <input type="" name="id" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('titulo_documento') : ''; ?>" /> <table style="width:500px;"> <tr> <th style="text-align:left;">Titulo del Documento</th> <td><input type="text" name="titulo_documento" id="titulo_documento" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('titulo_documento') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Acronimo Proyecto</th> <td><input type="text" name="proyecto" id="proyecto" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('proyecto') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Estado</th> <td><input type="text" name="estado" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('estado') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Numero de documento</th> <td><input type="text" name="num_documento" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('num_documento') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Idioma</th> <td><input type="text" name="idioma" id="idioma" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('idioma') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Version</th> <td><input type="text" name="version" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('version') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Revision</th> <td><input type="text" name="revision" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('revision') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <tr> <th style="text-align:left;">Descripcion</th> <td><input type="text" name="descripcion" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('descripcion') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Fecha</th> <td><input type="text" name="fecha" id="fecha" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('fecha') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Acronimo Subcategoria</th> <td><input type="text" name="subcategoria" id="subcategoria" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('subcategoria') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Confidencialidad</th> <td><input type="text" name="confidencialidad" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('confidencialidad') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Tipo de documento</th> <td><input type="text" name="tipo_documento" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('tipo_documento') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Usuario</th> <td><input type="text" name="acro_usuario" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('acro_usuario') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Aprobado por</th> <td><input type="text" name="aprobado_por" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('aprobado_por') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Autorizado por</th> <td><input type="text" name="autorizado_por" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('autoriado_por') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Revisor</th> <td><input type="text" name="revisor" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('revisor') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Compaņia</th> <td><input type="text" name="compania" id="compania" value="<?php echo isset($obj_categoria) ? $obj_categoria->__GET('compania') : ''; ?>" style="width:100%;" required /></td> </tr> <tr> <th style="text-align:left;">Codigo del proyecto</th> <td><input type="text" name="codigo_proyecto" readonly id="codigo_proyecto" style="width:100%;" required/></td> <td colspan="2"> <button type="submit" class="pure-button pure-button-primary">Guardar</button> </td> </tr> </table> </form> <table class="pure-table pure-table-horizontal"> <thead> <tr> <th style="text-align:left;">Titulo del documento</th> <th style="text-align:left;">Acronimo Proyecto</th> <th style="text-align:left;">Estadp</th> <th style="text-align:left;">Idioma</th> <th style="text-align:left;">Nē del documento</th> <th style="text-align:left;">Version</th> <th style="text-align:left;">Revision</th> <th style="text-align:left;">Descripcion</th> <th style="text-align:left;">Fecha</th> <th style="text-align:left;">Acronimo Subcategoria</th> <th style="text-align:left;">Confidencialidad</th> <th style="text-align:left;">Tipo de documento</th> <th style="text-align:left;">Usuario</th> <th style="text-align:left;">Aprobado por</th> <th style="text-align:left;">Autorizado por</th> <th style="text-align:left;">Revisor</th> <th style="text-align:left;">Compaņia</th> <th style="text-align:left;">Codigo proyecto</th> <th style="text-align:left;">Edicion</th> <th style="text-align:left;">Eliminar</th> </tr> </thead> <?php foreach ($model->Listar() as $r): ?> <tr> <td><?php echo $r->__GET('titulo_documento'); ?></td> <td><?php echo $r->__GET('proyecto'); ?></td> <td><?php echo $r->__GET('estado'); ?></td> <td><?php echo $r->__GET('idioma'); ?></td> <td><?php echo $r->__GET('num_documento'); ?></td> <td><?php echo $r->__GET('version'); ?></td> <td><?php echo $r->__GET('revision'); ?></td> <td><?php echo $r->__GET('descripcion'); ?></td> <td><?php echo $r->__GET('fecha'); ?></td> <td><?php echo $r->__GET('subcategoria'); ?></td> <td><?php echo $r->__GET('confidencialidad'); ?></td> <td><?php echo $r->__GET('tipo_documento'); ?></td> <td><?php echo $r->__GET('acro_usuario'); ?></td> <td><?php echo $r->__GET('aprobado_por'); ?></td> <td><?php echo $r->__GET('autorizado_por'); ?></td> <td><?php echo $r->__GET('revisor'); ?></td> <td><?php echo $r->__GET('compania'); ?></td> <td><?php echo $r->__GET('codigo_proyecto'); ?></td> <td> <a href="?action=editar&id=<?php echo $r->titulo_documento; ?>"><img src="icon_editthis.png" width="30px" height="30px"/></a> </td> <td> <a href="?action=eliminar&titulo_documento=<?php echo $r->titulo_documento; ?>"><img src="delete.png" width="30px" height="30px"/></a> </td> </tr> <?php endforeach; ?> </table> </div> </div> </body> </html> Este es alumno.model7.php <?php class CategoriaModel { private $pdo; public function __CONSTRUCT() { try { $this->pdo = new PDO('mysql:host=localhost;dbname=deimos1', 'root', ''); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (Exception $e) { die($e->getMessage()); } } public function Listar() { try { $result = array(); $stm = $this->pdo->prepare("SELECT * FROM documento"); $stm->execute(); foreach ($stm->fetchAll(PDO::FETCH_OBJ) as $r) { $alm = new Categoria(); $alm->__SET('titulo_documento', $r->titulo_documento); $alm->__SET('proyecto', $r->proyecto); $alm->__SET('estado', $r->estado); $alm->__SET('idioma', $r->idioma); $alm->__SET('num_documento', $r->num_documento); $alm->__SET('version', $r->version); $alm->__SET('revision', $r->revision); $alm->__SET('descripcion', $r->descripcion); $alm->__SET('fecha', $r->fecha); $alm->__SET('subcategoria', $r->subcategoria); $alm->__SET('confidencialidad', $r->confidencialidad); $alm->__SET('tipo_documento', $r->tipo_documento); $alm->__SET('acro_usuario', $r->acro_usuario); $alm->__SET('aprobado_por', $r->aprobado_por); $alm->__SET('autorizado_por', $r->autorizado_por); $alm->__SET('revisor', $r->revisor); $alm->__SET('compania', $r->compania); $alm->__SET('codigo_proyecto', $r->codigo_proyecto); $result[] = $alm; } return $result; } catch (Exception $e) { die($e->getMessage()); } } public function Obtener($acronimo) { try { $stm = $this->pdo->prepare("SELECT * FROM documento WHERE titulo_documento = ?"); $stm->execute(array($acronimo)); $r = $stm->fetch(PDO::FETCH_OBJ); $alm = new Categoria(); $alm->__SET('titulo_documento', $r->titulo_documento); $alm->__SET('proyecto', $r->proyecto); $alm->__SET('estado', $r->estado); $alm->__SET('idioma', $r->idioma); $alm->__SET('num_documento', $r->num_documento); $alm->__SET('version', $r->version); $alm->__SET('revision', $r->revision); $alm->__SET('descripcion', $r->descripcion); $alm->__SET('fecha', $r->fecha); $alm->__SET('subcategoria', $r->subcategoria); $alm->__SET('confidencialidad', $r->confidencialidad); $alm->__SET('tipo_documento', $r->tipo_documento); $alm->__SET('acro_usuario', $r->acro_usuario); $alm->__SET('aprobado_por', $r->aprobado_por); $alm->__SET('autorizado_por', $r->autorizado_por); $alm->__SET('revisor', $r->revisor); $alm->__SET('compania', $r->compania); $alm->__SET('codigo_proyecto', $r->codigo_proyecto); return $alm; } catch (Exception $e) { die($e->getMessage()); } } public function Eliminar($categoria) { try { $stm = $this->pdo ->prepare("DELETE FROM documento WHERE titulo_documento = ? and num_documento = ? and version = ? and revision = ?"); $stm->execute(array($categoria)); } catch (Exception $e) { die($e->getMessage()); } } // ############################################################################################## // CAMBIOS REALIZADOS // - USO DE PARAMETROS NOMBRADOS EN EN METODO .execute() // ############################################################################################## public function Actualizar(Categoria $data, $titulo_documento_viejo) { try { $sql = "UPDATE documento SET proyecto =:proyecto, estado =:estado, idioma =:idioma, num_documento =:num_documento," . "version =:version, revision =:revision, descripcion =:descripcion, fecha =:fecha, subcategoria =:subcategoria," . "confidencialidad =:confidencialidad, tipo_documento =:tipo_documento, acro_usuario =:acro_usuario, aprobado_por =:aprobado_por" . "autorizado_por =:autorizado_por, revisor =:revisor, compania =: compania, codigo_proyecto =:codigo_proyecto," . "titulo_documento =:titulo_documento WHERE titulo_documento =:titulo_documento_viejo"; return $this->pdo->prepare($sql) ->execute( array( ':titulo_documento_viejo' => $titulo_documento_viejo, ':titulo_documento' => $data->__GET('titulo_documento'), ':proyecto' => $data->__GET('proyecto'), ':estado' => $data->__GET('estado'), ':idioma' => $data->__GET('idioma'), ':num_documento' => $data->__GET('num_documento'), ':version' => $data->__GET('version'), ':revision' => $data->__GET('revision'), ':descripcion' => $data->__GET('descripcion'), ':fecha' => $data->__GET('fecha'), ':subcategoria' => $data->__GET('subcategoria'), ':confidencialidad' => $data->__GET('confidencialidad'), ':tipo_documento' => $data->__GET('tipo_documento'), ':acro_usuario' => $data->__GET('acro_usuario'), ':aprobado_por' => $data->__GET('aprobado_por'), ':autorizado_por' => $data->__GET('autorizado_por'), ':revisor' => $data->__GET('revisor'), ':compania' => $data->__GET('compania'), ':codigo_proyecto' => $data->__GET('codigo_proyecto') ) ); } catch (Exception $e) { die($e->getMessage()); } } // ############################################################################################## public function Registrar(Categoria $data) { try { $sql = "INSERT INTO documento (titulo_documento,proyecto,estado,idioma,num_documento,version,revision,descripcion,fecha,subcategoria,confidencialidad, tipo_documento,acro_usuario,aprobado_por,autorizado_por,revisor,compania,codigo_proyecto) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $this->pdo->prepare($sql) ->execute( array( $data->__GET('titulo_documento'), $data->__GET('proyecto'), $data->__GET('estado'), $data->__GET('idioma'), $data->__GET('num_documento'), $data->__GET('version'), $data->__GET('revision'), $data->__GET('descripcion'), $data->__GET('fecha'), $data->__GET('subcategoria'), $data->__GET('confidencialidad'), $data->__GET('tipo_documento'), $data->__GET('acro_usuario'), $data->__GET('aprobado_por'), $data->__GET('autorizado_por'), $data->__GET('revisor'), $data->__GET('compania'), $data->__GET('codigo_proyecto') ) ); } catch (Exception $e) { die($e->getMessage()); } } } Este es alumno.entidad7.php <?php class Categoria { private $titulo_documento; private $proyecto; private $estado; private $idioma; private $num_documento; private $version; private $revision; private $descripcion; private $fecha; private $subcategoria; private $confidencialidad; private $tipo_documento; private $acro_usuario; private $aprobado_por; private $autorizado_por; private $revisor; private $compania; private $codigo_proyecto; public function __GET($k){ return $this->$k; } public function __SET($k, $v){ return $this->$k = $v; } } Este el enlace de MEGA https://mega.nz/#!qV502IoI!dy9GMklaq5LL5q3aNP7zXjHMcGzlG2WFrlZVD7hoBsg |