Dw03 Ctes Web - 10 - Consultas Mysql - Abm de Datos
Dw03 Ctes Web - 10 - Consultas Mysql - Abm de Datos
Dw03 Ctes Web - 10 - Consultas Mysql - Abm de Datos
ABM DE DATOS
Una vez establecida la conexin al MySQL, se puede realizar cualquier consulta a la misma.
En la mayora de los casos, los usuarios del sitio web sern capaces de consultar y visualizar
informacin. Eventualmente alguno usuarios pueden insertar informacin desde la interfaz web
(como por ejemplo, publicar comentarios).
Por lo general, los administradores del sistema, son los que tienen la habilidad de hacer todas
las transacciones (ver los datos existentes, publicar nuevos registros, actualizar datos ya
existentes o borrar datos que no sean necesarios).
Nos concentraremos en este modelo (de manejo de contenidos, llamado generalmente
backend, panel de control o abm) para este tutorial.
Las cuestiones inherentes a los permisos de cada usuario, sern explicados ms adelante.
LISTADO DE DATOS
Cuando un usuario accede a una determinada seccin del panel de control, el comportamiento
ms comn es que se encuentre con el listado de los datos que existen dentro del mismo.
Esta informacin puede acompaarse por estadsticas (producto o posteo ms visitado, ltimos
usuarios registrados en el sistema, etc.), pero no se trata de otra cosa ms que una serie de
consultas de tipo SELECT.
Hay dos tipos de consultas SELECT posibles:
1. Las que devuelven un solo resultado.
2. Las que devuelven ms de una fila, y habr que recorrerlas con un WHILE.
La interfaz de los registros existentes en una determinada tabla, suele respetar un modelo
bastante simple.
El listado en s de los registros (por lo general una tabla con las columnas solicitadas en
el SELECT).
Al principio o final de la tabla un botn (o link) que permite dar de alta un nuevo registro
en esa tabla. Este vnculo apunta a un formulario HTML con los datos a solicitar en cada
insercin.
Por CADA registro obtenido en la base de datos, se contar al menos con dos botones.
o Uno que permita borrar el registro que estamos viendo. Que ir a un documento
PHP que har el DELETE del ID que se est visualizando.
o Otro que permita la modificacin de los datos que estamos viendo. Que apuntar
a un documento PHP que tendr un formulario (como el de alta) con los datos
pre-existentes en la base de datos.
Entonces la interfaz del listado con los botones de modificar/borrar respetara un aspecto
similar al siguiente:
Prof. Germn Rodrguez grodriguez@escueladavinci.net
CLIENTES WEB
ABM de registros MySQL
<h1>Scripts</h1>
<div> <a class="agregar" href="cargar_script.php">Cargar script</a></div>
<table border="1">
<tr>
<th>ID</th>
<th>TITULO</th>
<th>DESCRIPCION</th>
<th>FECHA ALTA</th>
<th>BOTONES</th>
</tr>
<?php include('conexion.php');
$consulta = "SELECT * FROM scripts ORDER BY FECHA DESC";
$filas = mysqli_query($cnx, $consulta);
while( $datos = mysqli_fetch_assoc($filas) ){
echo
echo
echo
echo
echo
echo
echo
'<tr>';
'<td>'.$datos['ID'].'</td>';
'<td>'.$datos['TITULO'].'</td>';
'<td>'.$datos['DESCRIPCION'].'</td>';
'<td>'.$datos['FECHA_ALTA'].'</td>';
'<td><a href="#">borrar</a><a href="#">editar</a></td>';
'</tr>';
} ?>
</table>
Prof. Germn Rodrguez grodriguez@escueladavinci.net
CLIENTES WEB
ABM de registros MySQL
INSERTAR DATOS
La insercin de nuevos registros en la base de datos es un modelo bastante simple.
Se trata sencillamente de un formulario con los campos que se pueden insertar (por ejemplo, el
ID no es un dato que se pone a mano) que tendr como action un documento que reciba los
datos y haga una consulta de tipo INSERT INTO en la tabla respectiva.
Documento cargar_script.php
<h1>Cargar script</h1>
<?php
include('conexion.php');
#obtenemos los datos por post
$titulo = $_POST['titulo'];
$contenido = $_POST['contenido'];
#creamos la consulta mysql
#la fecha de alta la obtenemos con la funcin NOW( ) de mysql
$consulta=<<<SQL
INSERT INTO
scripts
SET
TITULO='$titulo',
CONTENIDO='$contenido',
FECHA_ALTA = NOW()
SQL;
#ejecutamos la consulta, no devuelve nada.
mysqli_query( $conexion, $consulta );
#volvemos al listado para ver el nuevo registro cargado
header("Location: listado.php");
?>
CLIENTES WEB
ABM de registros MySQL
ACTUALIZAR DATOS
La actualizacin de datos es, al igual que la insercin, un formulario con los campos que se
pueden modificar desde la interfaz del panel de control.
La nica diferencia con el formulario de alta, radica en que debe mostrar en cada campo del
formulario el dato que ya existe previamente.
Para lograrlo, es necesario seguir un modelo muy simple, que se reduce a estos pasos:
1. Cada registro del listado de los datos existentes tendr un botn (o link) que llevar al
usuario al formulario de edicin y le pasar por GET el ID del registro a modificar.
2. El archivo que hace la edicin, har una consulta MySQL inicial obteniendo los datos que
ya se cargaron para ese registro.
3. Los datos que se obtuvieron del MySQL debern aparecer como VALUE de cada campo.
4. Adems de los campos que se pueden editar desde el formulario, debe existir
(obligatoriamente) un campo de tipo HIDDEN que tenga el ID del registro que se est
editando (sino cuando pasamos al documento que guarda los cambios, ya no tendremos
en la URL qu ID estbamos viendo).
5. El archivo que recibe el POST del formulario hace un UPDATE de ese ID puntual y
redirecciona a la lista de registros (para que el usuario verifique que los cambios han
sido efectuados).
Documento: listado.php Completamos el botn de editar, pasa por GET un ID
<?php include('conexion.php');
$consulta = "SELECT * FROM scripts ORDER BY FECHA DESC";
$filas = mysqli_query($cnx, $consulta);
while( $datos = mysqli_fetch_assoc($filas) ){
echo '<tr>';
echo '<td>'.$datos['ID'].'</td>';
echo '<td>'.$datos['TITULO'].'</td>';
echo '<td>'.$datos['DESCRIPCION'].'</td>';
echo '<td>'.$datos['FECHA_ALTA'].'</td>';
echo '<td><a href="#">borrar</a>';
echo '<a href="modificar_script.php?id='.$datos['ID'].'">editar</a>';
echo '</td>';
echo '</tr>';
} ?>
CLIENTES WEB
ABM de registros MySQL
Documento: modificar_script.php Obtenemos los datos y completamos el form
<h1>Modificar script</h1>
<?php
include( 'conexion.php' );
#obtenemos el ID de la URL
$idscript = isset( $_GET['ID'] ) ? $_GET['ID'] : 0;
#consultamos al sql por ese registro puntual
$consulta="SELECT * FROM scripts WHERE ID='$idscript'";
$filas = mysqli_query($conexion, $consulta);
$datos= mysqli_fetch_assoc($filas);
#lo bajamos a variables locales para los values
$titulo = $datos['TITULO'];
$contenido = $datos['CONTENIDO'];
?>
<form method="post" action="update_script.php">
<div>Titulo:
<input type="text" name="titulo" value="<?php echo $titulo; ?>" />
</div>
<div>Contenido:</div>
<div>
<textarea name="contenido" rows="6" cols="50">
<?php echo $contenido; ?>
</textarea>
</div>
<div>
<!-- EL HIDDEN TIENE EL MISMO VALOR RECIBIDO POR GET -->
<input type="hidden" name="idscript" value="<?php echo $idscript;?>" />
<input type="submit" value="Actualizar script!" />
</div>
</form>
CLIENTES WEB
ABM de registros MySQL
Documento: update_script.php Bajamos los POST y hacemos el UPDATE.
<?php
include('conexion.php');
#obtenemos los datos por post
$titulo = $_POST['titulo'];
$contenido = $_POST['contenido'];
$id = $_POST['idscript'];
#creamos la consulta mysql
$consulta=<<<SQL
UPDATE
scripts
SET
TITULO='$titulo',
CONTENIDO='$contenido',
WHERE
ID='$id'
LIMIT 1
SQL;
#ejecutamos la consulta, no devuelve nada.
mysqli_query( $conexion, $consulta );
#volvemos al listado para ver los cambios realizados
header("Location: listado.php");
?>
BORRAR DATOS
Para eliminar un dato, solo es necesario enviarle al servidor MySQL una consulta de tipo
DELETE FROM. Como sucede en MySQL, esta consulta necesita saber qu registro es el que se
quiere eliminar.
Para lograrlo, es muy comn que el registro a eliminar sea un dato enviado por GET.
De esta manera, por cada elemento que sea listado en el panel de control, existir un botn
que est linkeado al documento que borre los datos y mandar el ID del registro a borrar.
El documento que se encarga de borrar, verificar si lleg el dato por URL, har la consulta
necesaria en el MySQL y finalmente volver a enviar al usuario al listado para que el mismo
verifique que los datos fueron borrados satisfactoriamente.
CLIENTES WEB
ABM de registros MySQL
Documento: listado.php Agregamos el botn de borrar, que pasa el ID
<?php include('conexion.php');
$consulta = "SELECT * FROM scripts ORDER BY FECHA DESC";
$filas = mysqli_query($cnx, $consulta);
while( $datos = mysqli_fetch_assoc($filas) ){
echo '<tr>';
echo '<td>'.$datos['ID'].'</td>';
echo '<td>'.$datos['TITULO'].'</td>';
echo '<td>'.$datos['DESCRIPCION'].'</td>';
echo '<td>'.$datos['FECHA_ALTA'].'</td>';
echo '<td>';
echo '<a href="delete_script.php?id='.$datos['ID'].'">borrar</a>';
echo '<a href="modificar_script.php?id='.$datos['ID'].'">editar</a>';
echo '</td>';
echo '</tr>';
} ?>
Documento: delete_script.php Recibe el ID por GET y lo elimina.
<?php
include('conexion.php');
#obtenemos los datos por get y creamos la consulta mysql
$id = $_GET['id'];
$consulta="DELETE FROM scripts WHERE ID='$id' LIMIT 1";
#ejecutamos la consulta y volvemos al listado.
mysqli_query( $conexion, $consulta );
header("Location: listado.php");
?>
Por ltimo es importante tener presente que algunos sistemas reconocen dos tipos diferentes
de borrado:
1. Borrado fsico: El registro es eliminado de la base de datos con la consulta DELETE. Esta
accin no se puede deshacer (salvo que se posea un backup de los datos).
2. Borrado lgico: En realidad el registro no se borra con DELETE, sino que se lo oculta
mediante una columna de tipo visible/invisible. Esta consulta hace un UPDATE de la
tabla, pasando dicha columna al valor que se considera invisible. Luego en la web se
consultan todos los datos que tengan el valor que corresponde con visible