Justi 14 de octubre de 2008 a las 13.00
   Imprimir artículo
elWebmaster.com

Taller de PHP: Nuestro blog – Sistema de noticias (2)


¡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.

  1. <?
  2.  
  3. // iniciamos session
  4. session_start ();
  5.  
  6. // archivos necesarios
  7. require_once 'config.php';
  8. require_once 'conexion.php';
  9. require_once 'esUsuario.php';
  10.  
  11. // obtengo puntero de conexion con la db
  12. $dbConn = conectar();
  13.  
  14. // verificamos que no este conectado el usuario
  15. if ( !empty( $_SESSION&#91;'usuario'] ) && !empty($_SESSION['password']) ) {
  16.     $arrUsuario = esUsuario( $_SESSION&#91;'usuario'], $_SESSION['password'], $dbConn );
  17. }
  18.  
  19. // verificamos que sea un admin
  20. if ( empty($arrUsuario) || $arrUsuario&#91;'tipo'] != 'admin' ) {
  21.     header( 'Location: ../index.php' );
  22.     die;
  23. }
  24.  
  25. // borramos una categoria
  26. if ( !empty($_GET&#91;'del']) ) {
  27.    
  28.     $query  = "DELETE FROM `categorias` WHERE idCategoria = {$_GET['del']}";
  29.     $result = mysql_query($query, $dbConn);
  30.        
  31.     header( 'Location: categorias.php?dele=true' );
  32.     die;
  33.    
  34. }
  35.  
  36. // agregamos una categoria en la db
  37. // si se envio el formulario
  38. if ( !empty($_POST&#91;'submit']) ) {
  39.    
  40.     // definimos las variables
  41.     if ( !empty($_POST&#91;'nombre']) )     $nombre     = $_POST['nombre'];
  42.    
  43.     // completamos la variable error si es necesario
  44.     if ( empty($nombre) )   $error&#91;'nombre']        = 'Es obligatorio completar el nombre de la categor&iacute;a';
  45.    
  46.     // si no hay errores registramos al usuario
  47.     if ( empty($error) ) {
  48.        
  49.         // inserto los datos de registro en la db
  50.         $query  = "INSERT INTO `categorias` (valor) VALUES ('$nombre')";
  51.         $result = mysql_query($query, $dbConn);
  52.        
  53.         header( 'Location: categorias.php?add=true' );
  54.         die;
  55.        
  56.     }
  57.        
  58. }
  59.  
  60. if ( !empty($_POST&#91;'submitEdit']) ) {
  61.    
  62.     // definimos las variables
  63.     if ( !empty($_POST&#91;'nombre']) )         $nombre         = $_POST['nombre'];
  64.     if ( !empty($_POST&#91;'idCategoria']) )    $idCategoria    = $_POST['idCategoria'];
  65.    
  66.     // completamos la variable error si es necesario
  67.     if ( empty($nombre) )       $error&#91;'nombre']        = 'Es obligatorio completar el nombre de la categor&iacute;a';
  68.     if ( empty($idCategoria) )  $error&#91;'idCategoria']   = 'Falta la ID de la categor&iacute;a';
  69.    
  70.     // si no hay errores registramos al usuario
  71.     if ( empty($error) ) {
  72.        
  73.         // inserto los datos de registro en la db
  74.         $query  = "UPDATE `categorias` set valor = '$nombre' WHERE idCategoria = $idCategoria";
  75.         $result = mysql_query($query, $dbConn);
  76.        
  77.         header( 'Location: categorias.php?edit=true' );
  78.         die;
  79.        
  80.     }
  81.        
  82. }
  83.  
  84. // traemos listado de categorias
  85. $arrCategorias = array();
  86. $query = "SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC";
  87. $resultado = mysql_query ($query, $dbConn);
  88. while ( $row = mysql_fetch_assoc ($resultado)) {
  89.     array_push( $arrCategorias,$row );
  90. }
  91.  
  92. // si tenemos una categoria puntual
  93. if ( !empty($_GET&#91;'id']) ) {
  94.     // traemos una categoria
  95.     $query = "SELECT idCategoria, valor FROM `categorias` WHERE idCategoria = {$_GET['id']}";
  96.     $resultado = mysql_query ($query, $dbConn);
  97.     $row = mysql_fetch_assoc ($resultado);
  98. }
  99.  
  100. ?>
  101. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  102. <html xmlns="http://www.w3.org/1999/xhtml">
  103. <head>
  104.     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  105.     <title>Blog Personal</title>
  106. </head>
  107.  
  108. <body>
  109.  
  110.     <h1>Blog Personal</h1>
  111.     <p>Bienvenido <?= $arrUsuario&#91;'usuario'] ?> - <a href="index.php">Panel de control</a> - <a href="../index.php?salir=true">Salir</a></p>
  112.     <h2>Categor&iacute;as</h2>
  113.     <? if ( !empty($_GET&#91;'add']) ) { ?>
  114.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La categor&iacute;a se agreg&oacute; con &eacute;xito.</div>
  115.     <? } elseif ( !empty($_GET&#91;'dele']) ) { ?>
  116.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La categor&iacute;a ha sido borrada con &eacute;xito.</div>
  117.     <? } elseif ( !empty($_GET&#91;'edit']) ) { ?>
  118.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La categor&iacute;a ha sido editada con &eacute;xito.</div>
  119.    
  120.     <? } ?>
  121.    
  122.     <div>
  123.         <h3>Listado de Categor&iacute;as</h3>
  124.         <table style="width:90%;padding:5px;border:1px solid #cccccc">
  125.             <tr>
  126.                 <th style="background-color:#cccccc;padding:5px;">id</th>
  127.                 <th style="width:90%;background-color:#cccccc;padding:5px;">categor&iacute;a</th>
  128.                 <th style="background-color:#cccccc;padding:5px;width:10%"></th>
  129.             </tr>
  130.             <? foreach ($arrCategorias as $categoria) { ?>
  131.             <tr>
  132.                 <td style="padding:5px;"><? echo $categoria&#91;'idCategoria']; ?></td>
  133.                 <td style="padding:5px;"><? echo $categoria&#91;'valor']; ?></td>
  134.                 <td style="padding:5px;"><a href="categorias.php?id=<? echo $categoria['idCategoria']; ?>">Editar</a> - <a href="categorias.php?del=<?= $categoria['idCategoria'] ?>">Borrar</a>
  135.             </tr>
  136.             <? } ?>
  137.         </table>
  138.     </div>
  139.    
  140.     <? if ( empty($_GET&#91;'id']) ) { ?>
  141.         <div>
  142.             <h3 id="add">Agregar nueva categor&iacute;a</h3>
  143.             <? if (!empty($error)) { ?>
  144.                 <ul>
  145.                 <? foreach ($error as $mensaje) { ?>
  146.                     <li><?= $mensaje ?></li>
  147.                 <? } ?>
  148.                 </ul>
  149.             <? } ?>
  150.             <form action="categorias.php" method="post">
  151.            
  152.                 <p>
  153.                     <label for="nombre">Nombre de la categor&iacute;a</label><br />
  154.                     <input name="nombre" type="text" value="" />
  155.                 </p>
  156.                 <p>
  157.                     <input name="submit" type="submit" value="Agregar" />
  158.                 </p>
  159.             </form>
  160.         </div>
  161.     <? } ?>
  162.    
  163.     <? if ( !empty($_GET&#91;'id']) ) { ?>
  164.         <div style="background-color:#ff8800;padding:5px; margin-top:10px;">
  165.             <h3 id="add">Editar categor&iacute;a</h3>
  166.             <? if (!empty($error)) { ?>
  167.                 <ul>
  168.                 <? foreach ($error as $mensaje) { ?>
  169.                     <li><?= $mensaje ?></li>
  170.                 <? } ?>
  171.                 </ul>
  172.             <? } ?>
  173.             <form action="categorias.php" method="post">
  174.                 <p>
  175.                     <label for="nombre">Nombre de la categor&iacute;a</label><br />
  176.                     <input name="nombre" type="text" value="<? echo $row['valor']; ?>" />
  177.                 </p>
  178.                 <p>
  179.                     <input name="idCategoria" type="hidden" value="<? echo $row['idCategoria']; ?>" />
  180.                     <input name="submitEdit" type="submit" value="Editar" />
  181.                 </p>
  182.             </form>
  183.         </div>
  184.     <? } ?>
  185.    
  186. </body>
  187. </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

CLASE SIGUIENTE >>


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (9)

  1. Vladis dice:

    Ami me salen un monton de errores pronto los dare con mas detalles…

  2. Ricardo Kotik dice:

    ¿Que paso con la clase de esta semana?

  3. Juan Manuel dice:

    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!

  4. Ricardo Kotik dice:

    Me alegro que fue por una razon buena como es el trabajo y no por temas feos.
    Suerte con el proyecto!!!

  5. carlos dice:

    por que me dice q la contrasela es incorrecta? si tengo todo bien!!

  6. Mauricio dice:

    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!!

  7. Mauricio dice:

    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)

  8. Mauricio dice:

    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’);

  9. Antonio García dice:

    ¿Donde puedo ver la primer clase?

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder