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