Foro de elhacker.net

Programaciķn => Bases de Datos => Mensaje iniciado por: synysevend90 en 5 Abril 2017, 16:16 pm



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