¡Hola! Hoy vamos a extender la clase anterior en la cual vimos cómo hacer las altas de categorÃas para nuestro sitio. En la clase de hoy vamos a ver cómo editar las categorÃas y como borrarlas.
Para ello vamos a utilizar un único archivo, admin/categorias.php, asà es, ya lo tenemos creado, sólo lo vamos a extender con algunos “if”. Antes que nada, como vengo haciendo las últimas clases, primero les muestro el archivo y despues explico lo que hago.
- <?
- // iniciamos session
- session_start ();
- // archivos necesarios
- require_once 'config.php';
- require_once 'conexion.php';
- require_once 'esUsuario.php';
- // obtengo puntero de conexion con la db
- $dbConn = conectar();
- // verificamos que no este conectado el usuario
- if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {
- $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );
- }
- // verificamos que sea un admin
- if ( empty($arrUsuario) || $arrUsuario['tipo'] != 'admin' ) {
- header( 'Location: ../index.php' );
- die;
- }
- // borramos una categoria
- if ( !empty($_GET['del']) ) {
- $query = "DELETE FROM `categorias` WHERE idCategoria = {$_GET['del']}";
- $result = mysql_query($query, $dbConn);
- header( 'Location: categorias.php?dele=true' );
- die;
- }
- // agregamos una categoria en la db
- // si se envio el formulario
- if ( !empty($_POST['submit']) ) {
- // definimos las variables
- if ( !empty($_POST['nombre']) ) $nombre = $_POST['nombre'];
- // completamos la variable error si es necesario
- if ( empty($nombre) ) $error['nombre'] = 'Es obligatorio completar el nombre de la categoría';
- // si no hay errores registramos al usuario
- if ( empty($error) ) {
- // inserto los datos de registro en la db
- $query = "INSERT INTO `categorias` (valor) VALUES ('$nombre')";
- $result = mysql_query($query, $dbConn);
- header( 'Location: categorias.php?add=true' );
- die;
- }
- }
- if ( !empty($_POST['submitEdit']) ) {
- // definimos las variables
- if ( !empty($_POST['nombre']) ) $nombre = $_POST['nombre'];
- if ( !empty($_POST['idCategoria']) ) $idCategoria = $_POST['idCategoria'];
- // completamos la variable error si es necesario
- if ( empty($nombre) ) $error['nombre'] = 'Es obligatorio completar el nombre de la categoría';
- if ( empty($idCategoria) ) $error['idCategoria'] = 'Falta la ID de la categoría';
- // si no hay errores registramos al usuario
- if ( empty($error) ) {
- // inserto los datos de registro en la db
- $query = "UPDATE `categorias` set valor = '$nombre' WHERE idCategoria = $idCategoria";
- $result = mysql_query($query, $dbConn);
- header( 'Location: categorias.php?edit=true' );
- die;
- }
- }
- // traemos listado de categorias
- $arrCategorias = array();
- $query = "SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC";
- $resultado = mysql_query ($query, $dbConn);
- while ( $row = mysql_fetch_assoc ($resultado)) {
- array_push( $arrCategorias,$row );
- }
- // si tenemos una categoria puntual
- if ( !empty($_GET['id']) ) {
- // traemos una categoria
- $query = "SELECT idCategoria, valor FROM `categorias` WHERE idCategoria = {$_GET['id']}";
- $resultado = mysql_query ($query, $dbConn);
- $row = mysql_fetch_assoc ($resultado);
- }
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <title>Blog Personal</title>
- </head>
- <body>
- <h1>Blog Personal</h1>
- <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="index.php">Panel de control</a> - <a href="../index.php?salir=true">Salir</a></p>
- <h2>Categorías</h2>
- <? if ( !empty($_GET['add']) ) { ?>
- <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La categoría se agregó con éxito.</div>
- <? } elseif ( !empty($_GET['dele']) ) { ?>
- <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La categoría ha sido borrada con éxito.</div>
- <? } elseif ( !empty($_GET['edit']) ) { ?>
- <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La categoría ha sido editada con éxito.</div>
- <? } ?>
- <div>
- <h3>Listado de Categorías</h3>
- <table style="width:90%;padding:5px;border:1px solid #cccccc">
- <tr>
- <th style="background-color:#cccccc;padding:5px;">id</th>
- <th style="width:90%;background-color:#cccccc;padding:5px;">categoría</th>
- <th style="background-color:#cccccc;padding:5px;width:10%"></th>
- </tr>
- <? foreach ($arrCategorias as $categoria) { ?>
- <tr>
- <td style="padding:5px;"><? echo $categoria['idCategoria']; ?></td>
- <td style="padding:5px;"><? echo $categoria['valor']; ?></td>
- <td style="padding:5px;"><a href="categorias.php?id=<? echo $categoria['idCategoria']; ?>">Editar</a> - <a href="categorias.php?del=<?= $categoria['idCategoria'] ?>">Borrar</a>
- </tr>
- <? } ?>
- </table>
- </div>
- <? if ( empty($_GET['id']) ) { ?>
- <div>
- <h3 id="add">Agregar nueva categoría</h3>
- <? if (!empty($error)) { ?>
- <ul>
- <? foreach ($error as $mensaje) { ?>
- <li><?= $mensaje ?></li>
- <? } ?>
- </ul>
- <? } ?>
- <form action="categorias.php" method="post">
- <p>
- <label for="nombre">Nombre de la categoría</label><br />
- <input name="nombre" type="text" value="" />
- </p>
- <p>
- <input name="submit" type="submit" value="Agregar" />
- </p>
- </form>
- </div>
- <? } ?>
- <? if ( !empty($_GET['id']) ) { ?>
- <div style="background-color:#ff8800;padding:5px; margin-top:10px;">
- <h3 id="add">Editar categoría</h3>
- <? if (!empty($error)) { ?>
- <ul>
- <? foreach ($error as $mensaje) { ?>
- <li><?= $mensaje ?></li>
- <? } ?>
- </ul>
- <? } ?>
- <form action="categorias.php" method="post">
- <p>
- <label for="nombre">Nombre de la categoría</label><br />
- <input name="nombre" type="text" value="<? echo $row['valor']; ?>" />
- </p>
- <p>
- <input name="idCategoria" type="hidden" value="<? echo $row['idCategoria']; ?>" />
- <input name="submitEdit" type="submit" value="Editar" />
- </p>
- </form>
- </div>
- <? } ?>
- </body>
- </html>
Como podrán ver luego de nuestras comprobaciones de rutina, si estamos logueados, si somos administrador, etc, que hay un condicional preguntando si enviamos la variable del por get.
Si esta condición se cumple ejecutamos el query a la base de datos borrando la fila que le estamos pasando por get.
Luego, tenemos nuestro submit de la nueva categorÃa que vimos la clase anterior y a continuación, nos fijamos si se envió otro post pero ahora es submitEdit, el cual va a llevar los datos para editar la categorÃa. En caso de que estén todos los campos obligatorios, editamos la categorÃa.
Tango en la edición como en el borrado, luego de realizar los cambios en la base de datos, redireccionamos a la misma página pero con una variable get que va a informar que la acción se realizó correctamente.
Bueno, luego de la edición tenemos la consulta para traer el listado de categorÃas y finalmente una nueva condición preguntando si tenemos la variable get id, esta variable va a contener la id de la categorÃa que queremos editar, para que podamos rellenar el formulario de edición con los datos de la misma de la base de datos, por lo que, si se cumple la condición quiere decir que queremos editar una categorÃa y hacemos la consulta para traer toda la información guardada en la db.
Luego pasamos al html, tenemos varias condiciones también. La primera que encontramos es una que pregunta si tenemos la variable get add, o dele o edit, que son las que vamos a editar luego de realizar las acciones del ABM correctamente. En caso de tener una de ellas, mostramos el mensaje diciendo que la acción se realizo con éxito.
Luego de esto, mostramos el listado con las categorÃas, fÃjense que tenemos una columna al final que contiene dos enlaces, uno para editar la categorÃa, y el otro para borrarla. Los dos enlaces apuntan a la misma página pero con diferentes variables get, dependiendo si tenemos esas variables es que vamos a realizar las acciones que expliqué más arriba. Ojo, es muy común al principio, cuando somos principiantes pisarnos las variables con nombres iguales, tienen que prestar mucha atención de elegir variables con diferentes nombres a lo largo de todo nuestro script, en este caso el archivo admin/categorias.php.
A continuación tenemos dos condiciones nuevas más (la condición que pregunta si hay errores no cuenta, ya la expliqué la clase anterior :p), una que pregunta si esta vacÃa la variable get ID, en cuyo caso mostramos el formulario para agregar una nueva categorÃa, y la siguiente condición es si NO esta vacÃa, entonces mostramos el formulario de edición.
Presten atención que en el formulario de edición agregamos un campo input hidden con la id de la categorÃa que queremos editar. Esta va a ser necesaria para poder hacer el UPDATE en la base de datos.
Bueno, eso es todo por hoy, les dejo los archivos usados en la clase para que descarguen.
<< CLASE ANTERIOR |
Martes, 21 de octubre de 2008 a las 17.28
Ami me salen un monton de errores pronto los dare con mas detalles…
Miércoles, 22 de octubre de 2008 a las 15.32
¿Que paso con la clase de esta semana?
Viernes, 24 de octubre de 2008 a las 10.54
Muchas gracias por tu pregunta, Justi está súper atareado con otros proyectos, he publicado una entrada para aclararlo, puedes verla aquÃ:
http://www.elwebmaster.com/actualidad/taller-de-php-stand-by
Como digo allÃ, no hay que preocuparse que en breve vuelve el Taller con todo. ¡Muchos saludos!
Viernes, 24 de octubre de 2008 a las 13.44
Me alegro que fue por una razon buena como es el trabajo y no por temas feos.
Suerte con el proyecto!!!
Miércoles, 13 de abril de 2011 a las 02.30
por que me dice q la contrasela es incorrecta? si tengo todo bien!!
Sábado, 30 de abril de 2011 a las 03.31
Antes que nada quiero corregirte algo…
No todos los servidores aceptan la forma abreviada de escritura para php, en vez de poner de esta forma deberÃa ser ya que en algunos servidores aparecen con errores o te dejan la pagina en blanco etc etc y demas etc…
otra cosa… cuando pongo para borrar no me borra pero debe ser que puse algo mal.
saludos, muy buenas las clases!!
Sábado, 30 de abril de 2011 a las 03.38
disculpen el mensaje anterior pero no se ve lo que puse…
en vez de esta forma < ?
^(ese espacio no va)
deberÃa ser asi: < ?php
^(ese espacio no va tampoco)
Sábado, 30 de abril de 2011 a las 03.44
y con respecto al usuario admin resulta mas que interesante el hacer un usuario admin, luego exportar la db donde estan los usuarios y modificar donde muestra el usuario admin como comun y ponerlo como admin
ejemplo: se registra un usuario (en este ejemplo que pongo es admin pero puede ser cualquiera) y luego vamos a phpmyadmin (yo porque uso ese) y exportamos la tabla “usuarios”
en la tabla exportada deberÃa aparecer asÃ:
CREATE TABLE IF NOT EXISTS `usuarios` (
`idUsuario` int(11) unsigned NOT NULL AUTO_INCREMENT,
`usuario` varchar(50) NOT NULL,
`password` char(32) NOT NULL,
`email` varchar(50) NOT NULL,
`tipo` enum(‘comun’,’admin’) NOT NULL DEFAULT ‘comun’,
PRIMARY KEY (`idUsuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
—
— Volcar la base de datos para la tabla `usuarios`
—
INSERT INTO `usuarios` (`idUsuario`, `usuario`, `password`, `email`, `tipo`) VALUES
(1, ‘admin’, ‘62969736beba44c82f0dff1a5b3108bf’, ‘admin@blog.com’, ‘comun’);
ahora bien… para volver un usuario como admin debemos modificar el volcado de la db de esta forma guardar e importar nuevamente desde phpmyadmin
—
— Volcar la base de datos para la tabla `usuarios`
—
INSERT INTO `usuarios` (`idUsuario`, `usuario`, `password`, `email`, `tipo`) VALUES
(1, ‘admin’, ‘62969736beba44c82f0dff1a5b3108bf’, ‘admin@blog.com’, ‘admin’);
Lunes, 3 de octubre de 2011 a las 21.58
¿Donde puedo ver la primer clase?