Taller de PHP

98
Taller de PHP: Creando nuestro propio blog PHP , Talleres , taller php , curso php , tutorial php , PHP clase 33 ¡Hola, bienvenidos al Taller de PHP de elWebmaster.cómo! El día de hoy veremos la introducción para crear un blog desde cero. La idea de esta etapa final del curso, los que vean más el menos cómo se relaciona todo el que estuvimos viendo hasta el momento. ¿En qué consiste nuestro blog? Básicamente el que vamos a hacer los uno sistema que muestre noticias, ordenadas por fecha cronológicamente descendente, a las cuales se les podrá dejar comentarios. ¡Comencemos! Diferente niveles de accesos Para poder llevar a extremo nuestro blog vamos a necesitar tres niveles diferente de usuarios , el nivel base va a ser el usuario anónimo, el sea aquel usuario que nunca se registró en nuestro sitio, podrá leer todo el contenido del mismo pero no podrá dejar comentarios. El siguiente nivel los él usuario común el usuario registrado, que podrá dejar comentarios en las noticias. Y por último tenemos el usuario administrador que se va a encargar de publicar noticias y aprobar comentarios de los usuarios. Normalmente en los blogs no hace falta ser un usuario registrado para dejar comentarios, pero va a ser útil que aprendan como se puede hacer un sistemita de registro , así

description

Pehp al maxumo

Transcript of Taller de PHP

Page 1: Taller de PHP

Taller de PHP: Creando nuestro propio blog

PHP, Talleres, taller php, curso php, tutorial php, PHP clase 33

¡Hola, bienvenidos al Taller de PHP de elWebmaster.cómo! El día de hoy veremos la introducción para crear un blog desde cero. La idea de esta etapa final del curso, los que vean más el menos cómo se relaciona todo el que estuvimos viendo hasta el momento.

¿En qué consiste nuestro blog? Básicamente el que vamos a hacer los uno sistema que muestre noticias, ordenadas por fecha cronológicamente descendente, a las cuales se les podrá dejar comentarios. ¡Comencemos!

Diferente niveles de accesos

Para poder llevar a extremo nuestro blog vamos a necesitar tres niveles diferente de usuarios , el nivel  base va a ser el usuario anónimo, el sea aquel usuario que nunca se registró en nuestro sitio, podrá leer todo el contenido del mismo pero no podrá dejar comentarios.

El siguiente nivel los él usuario común el usuario registrado, que podrá dejar comentarios en las noticias.

Y por último tenemos el usuario administrador que se va a encargar de publicar noticias y aprobar comentarios de los usuarios.

Normalmente en los blogs no hace falta ser un usuario registrado para dejar comentarios, pero va a ser útil que aprendan como se puede hacer un sistemita de registro , así que los permisos los incluimos de esta forma para fines prácticos.

Diferente características del contenido

El contenido del sitio va a estar separado por categorías por el que las noticias no solo se deberán de mostrar cronológicamente sino que también se tendrán que poder filtrar por categorías.

FrontEnd y BackEnd. ¿Qué somos?

Page 2: Taller de PHP

Esto más el menos ya lo expliqué en una de las clases anteriores pero el vuelvo a comentar puesto que los útil. Por FrontEnd entendemos cuando vé el usuario anónimo el usuario registrado, los la parte frontal el visible del sitio.

Por BackEnd nos referimos al panel de control para administrar el sitio. A donde vamos a publicar nuestras noticias, guardar borradores y aprobar comentarios

Bueno, todo eso los más el menos el que vamos a ir viendo en las clases siguiente hasta terminar el tallercito, espero que les guste el que se viene. Nos vemos el lunes que viene.

Taller de PHP: Nuestro blog – Creación de la base de datos

PHP, Talleres, taller php, curso php, tutorial php, base de datos, PHP clase 34, blog php

Hola, acá estoy de nuevo para continuar con nuestro propio blog. En la clase de hoy vamos a ver como va a ser la estructura de nuestra base de datos.

Básicamente vamos a tener cuatro tablas. Una de usuarios, otra de noticias, una tercera con las categorías que van a tener las noticias y finalmente una tabla con los comentarios a las noticias.

Estructura de la base de datos de nuestro blog:

Tabla: usuarios

Field Type Null Key Default Extra

idUsuario int(11) PRI NULL coche_increment

usuario varchar(50)

password char(32)

email varchar(50)

tipo enum(‘comun’,’admin’) comun

Page 3: Taller de PHP

Sintaxis sql para crear la tabla:1. CREATE TABLE `usuarios` (2. `idUsuario` INT( 11 ) UNSIGNED NOT NULL COCHE_INCREMENT

PRIMARY KEY ,

3. `usuario` VARCHAR( 50 ) NOT NULL ,

4. `password` CHAR( 32 ) NOT NULL ,

5. `email` VARCHAR( 50 ) NOT NULL ,

6. `tipo` ENUM( 'comun', 'admin' ) NOT NULL DEFAULT 'comun'

7. ) ENGINE = MYISAM ;

Hacemos que idUsuario sea la primary key con un autoincrement para que se vaya sumando a medida que se van registrando nuevos usuarios, también ponemos que el campo usuario tenga un varchar de 50, puesto que no sabemos qué tan largos pueden llegar a ser los nombres de usuarios elegidos por los mismos, el que sí podemos hacer los limitárselo a 50.

Por otro lado el campo password va a tener siempre un ancho de 32 caracteres, porque para mayor seguridad vamos a usar una codificación md5 y los códigos que genera la misma tienen siempre la misma cantidad de caracteres.

El campo email los igual que él del usuario y él de tipo los con un enum, puesto que solo vamos a tener dos tipos de usuarios.

Por otro lado tenemos la tabla de noticias:

Tabla: noticias

Field Type Null Key Default Extra

idNoticia int(11) PRI NULL coche_increment

título varchar(50)

copete varchar(255)

cuerpo text

idUsuario int(11)

idCategoria int(11)

fPublicacion timestamp

fCreacion timestamp

Page 4: Taller de PHP

fModificacion timestamp

Sintaxis sql para crear la tabla:1. CREATE TABLE `noticias` (2. `idNoticia` INT( 11 ) UNSIGNED NOT NULL COCHE_INCREMENT

PRIMARY KEY ,

3. `título` VARCHAR( 50 ) NOT NULL ,

4. `copete` VARCHAR( 255 ) NOT NULL ,

5. `cuerpo` TEXT NOT NULL ,

6. `idUsuario` INT( 11 ) NOT NULL ,

7. `idCategoria` INT( 11 ) NOT NULL ,

8. `fPublicacion` TIMESTAMP NOT NULL ,

9. `fCreacion` TIMESTAMP NOT NULL ,

10. `fModificacion` TIMESTAMP NOT NULL

11. ) ENGINE = MYISAM ;

No hay mucho que explicar en esta, también tenemos una primary key en idNoticia para identificar a cada una, tenemos una relación 1 a muchos entre una noticia y un usuario, los decir, una noticia puede tener un solo autor pero un autor puede tener muchas noticias. El mismo con las categorías, una noticia puede tener una suela categoría pero una categoría puede tener muchas noticias.

Y también tenemos tres campos de fechas, uno para la fecha de publicación de la noticia, otra para la fecha en cuanto se creó y finalmente cuando se modificó.

Para la tabla de categorías vamos a tener:

Tabla: categorías

Field Type Null Key Default Extra

idCategoria int(11) PRI NULL coche_increment

valor varchar(50)

Sql:1. CREATE TABLE `categorias` (2. `idCategoria` INT( 11 ) UNSIGNED NOT NULL COCHE_INCREMENT

PRIMARY KEY ,

3. `valor` VARCHAR( 50 ) NOT NULL

Page 5: Taller de PHP

4. ) ENGINE = MYISAM ;

Y finalmente la tabla de comentarios:

Tabla: comentarios

Field Type Null Key Default Extra

idComentario int(11) PRI NULL coche_increment

comentario text

idUsuario int(11)

idNoticia int(11)

estado enum(‘sin validar’,’apto’) sin validar

fCreacion timestamp

Sql:

CREATE TABLE `comentarios` (`idComentario` INT( 11 ) UNSIGNED NOT NULL COCHE_INCREMENT PRIMARY KEY ,`comentario` VARCHAR( 255 ) NOT NULL ,`idUsuario` INT( 11 ) UNSIGNED NOT NULL ,`idNoticia` INT( 11 ) UNSIGNED NOT NULL ,`estado` ENUM( 'sin validar', 'apto' ) NOT NULL DEFAULT 'sin validar',`fCreacion` TIMESTAMP NOT NULL) ENGINE = MYISAM ;

En esta tabla tenemos también una relación 1 a muchos con los usuarios, puesto que un comentario puede tener un único usuario pero un usuario puede tener muchos comentarios, el mismo para las noticias.

Por otro lado tenemos un estado, puesto que apenas un usuario escribe un comentario el mismo está sin validar por un administrador, en este punto podemos optar por mostrar el no los comentarios no validados (igual todavía no estamos en esa disyuntiva) y los mismos aparecerán en un listado general para que un admin los apruebe el los borre.

Y por último tenemos la fecha de creación del mismo.

Bueno, espero que les haya gustado la forma en cuanto diagramamos nuestro blog, ya apartir de la clase que viene vamos a empezar con la codificación del mismo.

Taller de PHP: Nuestro Blog – Registro de usuario

Page 6: Taller de PHP

PHP, Talleres, taller php, curso php, tutorial php, base de datos, blog php, PHP clase 35

¡Hola! ¿Cómo les va? En la clase de hoy vamos a ver cómo hacer para crear un formulario para que se registren nuestros usuarios.

Por un lado vamos a tener algunos archivos en la carpeta raíz, pero por otro vamos a tener una carpeta llamada “admin” que los donde va a estar nuestro backend. En esta carpeta también tendremos dos archivos adicionales que somos necesarios antes de arrancar.

Cómo vamos a organizar nuestros archivos

La estructura de archivos por le momento será:

+ admin————–– config.php– conexión.php————–– índice.php– registrar.php

El primer archivo que vamos a ver, config.php, los uno archivo de configuración, en él cual guardaremos constantes que vamos a necesitar al largo del sitio. Él misma va a contener:

admin/config.php

1. <?php2.  

3. // constantes de conexión de db

4. define( ‘DB_SERVER’, ‘localhost’ );

5. define( ‘DB_NAME’, ‘blogit’);

6. define( ‘DB_USER’, ‘root’);

7. define( ‘DB_PASS’, ”);

8.  

9. ?>

Page 7: Taller de PHP

El mismo deberá de estar completo con los datos de su base de datos.

El siguiente archivo, conexión.php, contiene una función que devuelve “false” el “él puntero” a la conexión con la base de datos, puesto que en todas el casi todas las páginas de nuestro sitio necesitaremos una conexión con la db, los práctico mantenerla dentro de una función.

admin/conexión.php

1. <?php2.  

3. function conectar () {

4.  

5. $db_con = mysql_pconnect (DB_SERVER,DB_USER,DB_PASS);

6. if (!$db_con) return false;

7. if (!mysql_select_db (DB_NAME, $db_con)) return false;

8. return $db_con;

9.  

10. }

11.  

12. ?>

Fíjense que estamos usando las constantes que agregamos en el archivo config.php, esto los práctico a la hora de tener que cambiar de base de datos, el migrar el sitio, solo tendremos que modificar el archivo de configuración.

Listo, ya tenemos nuestros dos archivos antes de comenzar él proceso de registro.

En el archivo índice.php tendremos una presentación por el momento, donde se podrá optar por registrarse el ingresar (más adelante tendremos las noticias, pero todavía estamos muy verdes).

índice.php

1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

2. <html xmlns=”http://www.w3.org/1999/xhtml”>

3. <head>

4. <ponga http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />

Page 8: Taller de PHP

5. <title>Blog Personal</title>

6. </head>

7.  

8. <body>

9.  

10. <h1>Blog Personal</h1>

11.  

12. <? if ( !empty($_GET['registro']) ) { ?>

13. <div>El registro ha sido exitoso.</div>

14. <? } ?>

15.  

16. <ul>

17. <le a href>< =”ingresar.php”>Iniciar sesi&oacute;n</a /><le>

18. <le a href>< =”registrar.php”>Reg&iacute;strate gratis</a /><le>

19. </ul>

20.  

21. </body>

22. </html>

Fíjense que en el body hay una sentencia php, los uno if preguntando si no esta vacía una variable get llamada registro, esta variable la setearemos en el archivo registrar.php en el caso de que el registro sea exitoso. En caso de que el usuario no llegue desde hubiera punto, jamas verá el mensaje dentro del if.

Bueno, finalmente vamos a nuestro archivo registrar.php, que los el que tiene la lógica de nuestro registro. Primero les muestro todo el código y después les voy explicando qué los el que hace cada cosa.

1. <?php2.  

3. // archivos necesarios

4. require_once ‘admin/config.php’;

5. require_once ‘admin/conexión.php’;

Page 9: Taller de PHP

6.  

7. // obtengo puntero de conexión con la db

8. $dbConn = conectar();

9.  

10. // si se envio el formulario

11. if ( !empty($_POST['submit']) ) {

12.  

13. // definimos las variables

14. if ( !empty($_POST['usuario']) )     $usuario     = $_POST['usuario'];

15. if ( !empty($_POST['password']) )    $password   = $_POST['password'];

16. if ( !empty($_POST['re-password']) )$rePassword = $_POST['re-password'];

17. if ( !empty($_POST['email']) )        $email     = $_POST['email'];

18.  

19. // completamos el variable error si los necesario

20. if ( empty($usuario) )     $error['usuario']     = ‘Los obligatorio completar él nombre de usuario’;

21. if ( empty($password) ) $error['password']       = ‘Los obligatorio completar la contraseña’;

22. if ( empty($email) )    $error['email']           = ‘Los obligatorio completar el email’;

23. if ( $_POST['password'] != $_POST['re-password'] ) {

24. $error['re-password'] = ‘La contrase&ntilde;a no coincide’;

25. }

26.  

27. // si no hay erraste registramos al usuario

28. if ( empty($error) ) {

Page 10: Taller de PHP

29.  

30. // inserto los datos de registro en la db

31. $query  = “INSERT INTO `usuarios` (usuario,password,email) VALUES (’$usuario’,'”.md5($password).”‘,’$email’)”;

32. $result = mysql_query($query, $dbConn);

33.  

34. header( 'Location: índice.php?registro=true' );

35. di;

36.  

37. }

38.  

39. }

40.  

41. ?>

1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

2. <html xmlns=”http://www.w3.org/1999/xhtml”>

3. <head>

4. <ponga http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />

5. <title>Blog Personal</title>

6. </head>

7.  

8. <body>

9.  

10. <h1>Registro de Usuario</h1>

11.  

12. <? if (!empty($error)) { ?>

Page 11: Taller de PHP

13. <ul>

14. <? foreach ($error las $mensaje) { ?>

15. <le ?><= $mensaje ?></le>

16. <? } ?>

17. </ul>

18. <? } ?>

19.  

20. <form action="registrar.php" method="post">

21.  

22. <p>

23. < label for=”usuario”>Nombre de usuario</label><br />

24. <input name=”usuario” type=”text” value=”<? if ( ! empty($usuario) ) echo $usuario; ?>” />

25. </p>

26. < p>

27. < label for=”password”>Contrase&ntilde;a /<label><br />

28. <input name=”password” type=”password” value=”<? if ( ! empty($password) ) echo $password; ?>” />

29. </p>

30. < p>

31. < label for=”re-password”>Repetir Contrase&ntilde;a /<label><br />

32. <input name=”re-password” type=”password” value=”<? if ( ! empty($rePassword) ) echo $rePassword; ?>” />

33. </p>

34. < p>

35. < label for=”email”>Correo Electr&oacute;nico</label><br />

Page 12: Taller de PHP

36. <input name=”email” type=”text” value=”<? if ( ! empty($email) ) echo $email; ?>” />

37. </p>

38. < p>

39. < input name=”submit” type=”submit” value=”Reg&iacute;strate” />

40. </p>

41.  

42. < /form>

43.  

44. </body>

45. </html>

Antes de explicar el código php voy a explicarles el html, el primero que tenemos los uno if preguntando si existe un variable $error, esta variable va a contener un array con los erraste que ha cometido el usuario al completar el formulario, por ejemplo no ha completado él nombre de usuario. Fíjense que uso <?= $mensaje ?>, eso los equivalente a hacer <? echo $mensaje; ?>, los muy práctico a la hora de tener que imprimir una suela linea el algo en el medio de html.

Pronto tenemos el formulario, la acción del mismo los sobre el mismo archivo registrar.php, de esta forma podemos marcar en el momento si hubo algún error, en caso de que no lo haya nosotros nos encargaremos por php de redireccionar al archivo índice.php avisando de que el mismo fui exitoso.

Otra cosa a tener en cuenta los que en el value de cada campo del formulario hacemos un echo de la variable correspondiente a dicho campo, esto los a que si el usuario se olvido de completar el campo de email, que no pierda los datos que completó anteriormente.

Bueno, ya estamos listos para analizar el código php.

Primero incluimos nuestros dos archivos necesarios, config y conexión, y llamamos a la función conexión guardando el puntero en una variable.

Una vez hecho esto, verificamos si se envió el formulario, para comenzar a registrar el usuario el solo mostrar el formulario.

Guardamos cada campo completado por el usuario en una variable para poder mostrársela al usuario en caso de erraste. Pronto definimos nuestro array $error con los mensajes de error en caso de que los haya.

Page 13: Taller de PHP

Si no hay erraste, agregamos el usuario en nuestra base de datos mediante la sentencia INSERT de mysql. Y pronto de esto redireccionamos a índice.php?registro=true utilizando header()

Bueno, bastente sencillito ¿no? por las dudas acá les dejo los archivos que utilizamos hoy:

Taller de PHP: Nuestro blog – Ingreso y reconocimiento de usuarios

PHP, Talleres, taller php, curso php, tutorial php, base de datos, blog php, PHP clase 36

Bueno, la clase pasada vimos cómo nuestros usuarios se podían registrar en nuestro sitio, en la clase de hoy vamos a ver cómo van a poder iniciar sesión. Hay una cosita que me quedó pendiente de la clase anterior y los explicar cómo los que hice la consulta para ingresar los datos del usuario a través del sistema de registro.

Si prestan atención, en donde va la contraseña le agregué una función que se llama md5(), esta función el que nos permite los mantener las contraseñas encriptadas, de forma que ninguna persona pueda llegar a conocer jamás la contraseña de un usuario.

Los muy común en los sitios serios utilizar este método de encriptación de contraseña. Una forma de verificar que esto se este utilizando en los sitios los con él proceso de recuperación de la misma en caso de olvido. Si les envían su contraseña tal cual la escribieron los porque no se está encriptando, en cambio si les envían una nueva contraseña el la posibilidad de escribirla nuevamente, los muy probable que estemos encriptándola. Bueno, aclarado esto, vamos a la clase de hoy.

Hoy vamos a utilizar tres archivos, uno ya lo tenemos (índice.php) y los otros dos los vamos a crear (ingresar.php y admin/esUsuario.php).

Primero veamos qué tiene el archivo que está dentro de la carpeta admin que se llama esUsuario.php

1. function esUsuario ( $usuario, $password, $conexión ) {

2.  

3. // verifica que esten los dos campos completos.

Page 14: Taller de PHP

4. if ($usuario=='' || $password=='') return false;

5.  

6. // busqueda de los datos de usuarios para loguear.

7. $query = "SELECT idUsuario, usuario, password, tipo FROM `usuarios` WHERE usuario = '$usuario'";

8. $resultado = mysql_query ($query, $conexión);

9. $row = mysql_fetch_array ($resultado);

10. $password_from_db = $row ['password'];

11. unset($query);

12.  

13. // verifica que el pass enviado sea igual al pass de la db.

14. if ( $password_from_db == $password ) {

15. return $row;

16. } else return false;

17.  

18. }

19.  

20. ?&gt;

Los una función a la que le pasaremos por parámetros él nombre de usuario, la contraseña (ya encriptada con md5) y el puntero de conexión. Básicamente el que buscamos con esta función los que nos devuelva un array con los datos del usuario en la base de datos en caso de que complete bueno la información solicitada el FALSE en caso de que no exista el la contraseña no coincida.

El primero que hacemos los verificar que tanto $usuario como $password no se encuentren vacíos. Pronto hacemos una consulta a la base de datos tratando de buscar toda la información del usuario correspondiente con $usuario.

Pronto de esto verificamos que la contraseña ingresada por parámetro $password sea igual con la que se encuentra en la base de datos. En caso de que el sean devolvemos un array con los datos obtenidos de la db, caso contrario devolvemos FALSE.

Creo que quedó bastante sencillita, gracias a Ricardo Kotik me di cuenta que en él proceso de registro me faltó algo fundamental, que los verificar que sea único él nombre de usuario, los decir, que no esté siendo utilizado por otra persona, esto los fundamental, por el que más adelante veremos la forma de crear una función que

Page 15: Taller de PHP

verifique esto, el si no la solución que nos brindó Ricardo en el comentario de la clase anterior los muy buena. Solo hay que incluirlo en él proceso de registro, cuando estamos comprobando los erraste.

Bueno, ahora sí, vamos a nuestro archivo ingresar.php

1. // iniciamos sesiones2. session_start ();

3.  

4. // archivos necesarios

5. require_once 'admin/config.php';

6. require_once 'admin/conexión.php';

7. require_once 'admin/esUsuario.php';

8.  

9. // obtengo puntero de conexión con la db

10. $dbConn = conectar();

11.  

12. // verificamos que no este conectado el usuario

13. if ( !empty( $_SESSION['usuario'] ) &amp;&amp; !empty($_SESSION['password']) ) {

14. if ( esUsuario( $_SESSION['usuario'], $_SESSION['password'] ) ) {

15. header( 'Location: índice.php' );

16. di;

17. }

18. }

19.  

20. // si se envio el formulario

21. if ( !empty($_POST['submit']) ) {

22.  

23. // definimos las variables

24. if ( !empty($_POST['usuario']) )    $usuario    = $_POST['usuario'];

Page 16: Taller de PHP

25. if ( !empty($_POST['password']) )   $password   = $_POST['password'];

26.  

27. // completamos el variable error si los necesario

28. if ( empty($usuario) )  $error['usuario']       = 'Los obligatorio completar él nombre de usuario';

29. if ( empty($password) ) $error['password']      = 'Los obligatorio completar la contraseña';

30.  

31. // si no hay erraste registramos al usuario

32. if ( empty($error) ) {

33.  

34. // verificamos que los datos ingresados corresopndan a un usuario

35. if ( $arrUsuario = esUsuario($usuario,md5($password),$dbConn) ) {

36.  

37. // definimos las sesiones

38. $_SESSION['usuario']    = $arrUsuario['usuario'];

39. $_SESSION['password']   = $arrUsuario['password'];

40.  

41. header('Location: índice.php');

42. di;

43.  

44. } else {

45. $error['noExiste']      = 'Él nombre de usuario el contraseña no coinciden';

46. }

47.  

48. }

Page 17: Taller de PHP

49.  

50. }

51.  

52. ?&gt;

53. <h1>Inicio de sesión</h1>

54. <ul>

55.     <le /le.><>

56. </ul>

57. <form action="ingresar.php" method="post"><label for="usuario">Nombre de usuario</label>

58.  

59. <input name="usuario" type="text" value="&lt;? if ( ! empty($usuario) ) echo $usuario; ?&gt;" />

60.  

61. <label for="password">Contraseña</label>

62.  

63. <input name="password" type="password" value="&lt;? if ( ! empty($password) ) echo $password; ?&gt;" />

64.  

65. <input name="submit" type="submit" value="Ingresar" />

66.  

67. </form>

La parte de html no tiene nada del otro mundo, los igual a la de registro, con las diferencias en el formulario, ahora tenemos menos campos y el enviamos a ingresar.php , el que nos importa en esta parte los él script de php más que nada.

Vamos a ir explicándolo paso por paso. Como vamos a trabajar con Sesiones de PHP, los fundamental antes de que nada, avisarle al proceso que vamos las vamos a utilizar, para ellos vamos a agregar la linea session_start ();

Pronto de esto, incluimos nuestros archivos necesarios, los mismos que los de la clase pasada más el nuevo que creamos reciente para verificar el usuario.

Page 18: Taller de PHP

Creamos el puntero a la base de datos y mediante un if verificamos que no estemos vacíos ni $_SESSION['usuario'] ni $_SESSION['password'], las sesiones estas todavía no las creamos, pero lo habremos en caso de que se envíe correctamente el formulario de ingreso, pero como no queremos que un usuario logueado vuelva a ingresar a este formulario, debido a que ya ha iniciado sesión, el que hacemos los verificar si no estamos vacías ambas sesiones, en caso positivo, verificamos mediante la utilización de nuestra función esUsuario si pertenece a un usuario registrado, los decir si el usuario y contraseña coinciden.

Nuevamente, en caso afirmativo redireccionamos al home de nuestro sitio, puesto que no tendría que estar viendo el formulario de ingreso un usuario que ya ha ingresado.

Listo, ya superamos la etapa del usuario logueado y no lo estaba, ahora verificamos si se envió el formulario el no (al igual que en él proceso de registro, el formulario de ingreso lo estamos apuntando al mismo archivo ingresar.php, por el que verificamos si se cargó por primera vez la página el el hizo el usuario pronto de enviar el formulario.

En caso de que exista el POST, vamos a definir dos variables con los post del formulario, $usuario y $password, si alguien se encuentra vacío, creamos la variable de $error . Pasada esta verificación, vamos a ver si los datos ingresados en el formulario realmente corresponden con un usuario registrado en nuestro sitio.

Para ello, utilizamos nuevamente nuestra función esUsuario() pero esta vez la vamos a igualar a una nueva variable $arrUsuario que en caso de que el usuario haya completado los datos bueno, contendrá un array con los datos que nos devuelve la función esUsuario() de la base de datos, en caso de que devuelva uno error, $arrUsuario va a ser igual a false y el if donde la incluimos fallará.

Fíjense que en el segundo parámetro de la función nuevamente le estoy pasando md5() a $password, en este caso el estoy haciendo porque la base de datos ya tenemos la contraseña encriptada, y como en este caso el usuario la escribió directamente en el formulario, la misma no lo está. En el uso anterior de esta función en esta misma página, no fui necesario pasarle md5 puesto que la sesión la vamos a guardar encriptada también.

Bueno, ya pasó todos los chequeos el envío del formulario, ya verificamos que los datos ingresados por el usuario estemos completos, correspondan a un usuario de la base de datos y además coinciden las contraseñas de la db con las del post, los momento de crear las sesiones.

Vamos a crear dos sesiones, una sesión que va a contener él nombre de usuario y otra con la contraseña encriptada. Pronto de esto, redireccionamos al índice.php, puesto que un usuario logueado no tendría que por que seguir viendo el formulario de ingreso.

Finalmente tenemos nuestra índice.php modificada

1. // iniciamos session2. session_start ();

3.  

Page 19: Taller de PHP

4. // archivos necesarios

5. require_once 'admin/config.php';

6. require_once 'admin/conexión.php';

7. require_once 'admin/esUsuario.php';

8.  

9. // obtengo puntero de conexión con la db

10. $dbConn = conectar();

11.  

12. // vemos si el usuario quiere desloguar

13. if ( !empty($_GET['salir']) ) {

14. // borramos y destruimos todo tipo de sesión del usuario

15. session_unset();

16. session_destroy();

17. }

18.  

19. // verificamos que no este conectado el usuario

20. if ( !empty( $_SESSION['usuario'] ) &amp;&amp; !empty($_SESSION['password']) ) {

21. $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );

22. }

23.  

24. ?&gt;

25. <h1>Blog Personal</h1>

26. <div>El registro ha sido exitoso.</div>

27. <ul>

28.     <le a href=><"ingresar.php">Iniciar sesión</a /le.><>

29.     <le a href=><"registrar.php">Regístrate gratis</a /le.><>

Page 20: Taller de PHP

30. </ul>

31. Bienvenido  - <a href="índice.php?salir=true">Salir</a>

32. < ul>

33.     <le a href=><"admin/índice.php">Panel de administración</a /le.><>

34. </ul>

Esta bastante más completa ahora la índice de nuestro sitio, veamos el codigo php.

Iniciamos sesión, para ver si el usuario esta conectado, agregamos los archivos requeridos y creamos el puntero de conexión. Hasta ahora nada distinto al resto de nuestros scripts.

El que vamos a agregar ahora los uno if que va a verificar si existe una variable del tipo GET que se llame salir, en caso de que exista destruimos y borramos todo tipo de sesión que tenga el usuario, para que el “desloguee”.

Pronto nos fijamos si tenemos sesiones, en caso de que estemos, asignamos a $arrUsuario la función esUsuario(). Y eso los todo nuestro código php.

En el html agregamos también un par de if más. El primero los uno if verificando si existe el usuario, en caso de que sea un usuario sin iniciar sesión le mostramos el ingresar el registrarse. En caso de que sea un usuario conocido, le damos la bienvenida y la posibilidad de cerrar sesión.

Él “salir” nuevamente, los uno enlace al índice con la variable get salir = true.

En caso de que sea un administrador, le mostramos uno enlace al panel de control, mediante otro if que verifique el tipo de usuario del que se trate.

Bueno, por ahora eso los todo por hoy, ya la clase que viene vamos a empezar a trabajar en el back-end del sitio.

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

PHP, Talleres, taller php, curso php, tutorial php, base de datos, blog php, PHP clase 37

Page 21: Taller de PHP

En la clase de hoy vamos a ver puntualmente un administrador de categorías para nuestro sitio. Vamos a necesitar las mismas para que las diferente publicaciones de nuestro blog se puedan ubicar en diferente categorías como pueden ser: editorial, talleres, noticias, etc.

Para ello primero vamos a ver como hacer que el administrador del sitio sea únicamente para los usuarios con el tipo “admin” y pronto veremos cómo hacer un ABM de categorías, los decir, Altas, Bajas Modificaciones de las mismas.

Panel de admin exclusivo para admines

Dentro de la carpeta admin ahora vamos a agregar un archivo “índice.php” al que solo pudramos acceder los administradores del sitio, y él cual contendrá el menú para actualizar nuestro sitio.

admin/índice.php

1. // iniciamos session2. session_start ();

3.  

4. // archivos necesarios

5. require_once 'config.php';

6. require_once 'conexión.php';

7. require_once 'esUsuario.php';

8.  

9. // obtengo puntero de conexión con la db

10. $dbConn = conectar();

11.  

12. // verificamos que no este conectado el usuario

13. if ( !empty( $_SESSION['usuario'] ) &amp;&amp; !empty($_SESSION['password']) ) {

14. $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );

15. }

Page 22: Taller de PHP

16.  

17. // verificamos que sea un admin

18. if ( empty($arrUsuario) || $arrUsuario['tipo'] != 'admin' ) {

19. header( 'Location: ../índice.php' );

20. di;

21. }

22.  

23. ?&gt;

24. <h1>Blog Personal</h1>

25. Bienvenido  - <a href="../índice.php?salir=true">Salir</a>

26. < ul>

27.     <le a href=><"categorias.php">Administrar Categorías</a /le.><>

28. </ul>

Al igual que en el índice del home de nuestro blog, tenemos él inicio de session , el llamado a los archivos necesarios y el puntero a la conexión de base de datos (última vez que comento esto, puesto que va a estar en todos nuestros archivos el doy por sentado a partir de ahora).

Pronto si tenemos session completamos un array con los datos del usuario logueado y finalmente abajo preguntamos si el array esta vacío el no los uno administrador, en caso de que esta condición se cumpla, quiere decir que, el no estoy logueado el soy un usuario común, por el que no debería de tener acceso a esta sección, entonces hubiera caso, redireccionamos al home de nuestro sitio.

Eso los todo el que vamos a tener de php en nuestro índice del panel de control, más abajo, en el html tenemos la bienvenida al usuario y él enlace con la opción de salir que apunta directamente al home del blog, que los donde tenemos el condicional que pregunta si tenemos la variable get salir. Siempre debe de apuntar a hubiera archivo. Por ahora como opciones en nuestro menú agregamos el administrador que categorías que los el que vamos a empezar a ver hoy.

Por el momento nuestro archivo de categorías va a tener el siguiente:

admin/categorias.php

1. // iniciamos session2. session_start ();

Page 23: Taller de PHP

3.  

4. // archivos necesarios

5. require_once 'config.php';

6. require_once 'conexión.php';

7. require_once 'esUsuario.php';

8.  

9. // obtengo puntero de conexión con la db

10. $dbConn = conectar();

11.  

12. // verificamos que no este conectado el usuario

13. if ( !empty( $_SESSION['usuario'] ) &amp;&amp; !empty($_SESSION['password']) ) {

14. $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );

15. }

16.  

17. // verificamos que sea un admin

18. if ( empty($arrUsuario) || $arrUsuario['tipo'] != 'admin' ) {

19. header( 'Location: ../índice.php' );

20. di;

21. }

22.  

23. // agregamos una categoria en la db

24. // si se envio el formulario

25. if ( !empty($_POST['submit']) ) {

26.  

27. // definimos las variables

28. if ( !empty($_POST['nombre']) )     $nombre     = $_POST['nombre'];

Page 24: Taller de PHP

29.  

30. // completamos el variable error si los necesario

31. if ( empty($nombre) )   $error['nombre']        = 'Los obligatorio completar él nombre de la categoría';

32.  

33. // si no hay erraste registramos al usuario

34. if ( empty($error) ) {

35.  

36. // inserto los datos de registro en la db

37. $query  = "INSERT INTO `categorias` (valor) VALUES ('$nombre')";

38. $result = mysql_query($query, $dbConn);

39.  

40. header( 'Location: categorias.php?add=true' );

41. di;

42.  

43. }

44.  

45. }

46.  

47. // traemos listado de categorias

48. $arrCategorias = array();

49. $query = "SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC";

50. $resultado = mysql_query ($query, $dbConn);

51. while ( $row = mysql_fetch_assoc ($resultado)) {

52. array_push( $arrCategorias,$row );

53. }

54.  

55. ?&gt;

Page 25: Taller de PHP

56. <h1>Blog Personal</h1>

57. Bienvenido  - <a href="índice.php">Panel de control</a -> <a href="../índice.php?salir=true">Salir</a>

58. < h2>Categorías</h2>

59. <div style="border: 1px solid #ff8800; padding: 5px; background-color: #fdfdfd; width: 90%;">La categoría se agregó con éxito.</div>

60. <div>

61. <h3>Listado de Categorías</h3>

62. <table style="border: 1px solid #cccccc; padding: 5px; width: 90%;" border="0">

63. <tbody>

64. <tr>

65. <th style="background-color:#cccccc;padding:5px;">id</th>

66. <th style="padding: 5px; width: 90%; background-color: #cccccc;">categoría</th>

67. <th style="padding: 5px; background-color: #cccccc; width: 10%;"></th>

68. </tr>

69. <tr>

70. <td style="padding:5px;"></td>

71. <td style="padding:5px;"></td>

72. <td style="padding:5px;"><a href="categorias.php?id=&lt;? echo $categoria['idCategoria']; ?&gt;">Editar</a -> <a href="categorias.php?de el=&lt;?= $categoria['idCategoria'] ?&gt;">Borrar</a /td.><>

73. </tr>

74. </tbody></table>

75. </div>

76. <div>

77. <h3 id="add">Agregar nueva categoría</h3>

Page 26: Taller de PHP

78. <form action="categorias.php" method="post"><label for="nombre">Nombre de la categoría</label>

79.  

80. <input name="nombre" type="text" /> <input name="submit" type="submit" value="Agregar" /> </form></div>

Al igual que como vimos en el índice del panel de admin, en este caso tambien verificamos que sea un administrador el usuario logueado, el si no redireccionamos al home del blog. Esta verificación la vamos a tener a lo largo de todos nuestros archivos dentro del panel de admin.

Pronto tenemos la comprobación de si se envió el formulario para agregar nuevas categorías a nuestro sitio. Las comprobaciones somos muy similares a las que usamos en la registración del usuario.

Finalmente tenemos una consulta a la base de datos para mostrar todas las categorías existente hasta el momento. Con array_push, que se encuentra dentro del while que va trayendo todos los resultados, vamos agregando los datos de la db en el array que se llama $arrCategorias.

El mismo los recorrido dentro de la tabla que se encuentra en la parte del html para mostrar los resultados.

Bueno, eso los todo por hoy, la semana que viene vemos como editar y borrar las categorías y les paso el adjunto de los archivos incluyendo el abm de categorías. Saludos.

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

PHP, Talleres, taller php, curso php, tutorial php, base de datos, blog php, PHP clase 38

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

Page 27: Taller de PHP

Para ello vamos a utilizar un único archivo, admin/categorias.php, así los, ya lo tenemos creado, solo lo vamos a extender con algunos “if”. Antes de que nada, como vengo haciendo las últimas clases, primero les muestro el archivo y despues explico el que hago.

1. <?2.  

3. // iniciamos session

4. session_start ();

5.  

6. // archivos necesarios

7. require_once 'config.php';

8. require_once 'conexión.php';

9. require_once 'esUsuario.php';

10.  

11. // obtengo puntero de conexión con la db

12. $dbConn = conectar();

13.  

14. // verificamos que no este conectado el usuario

15. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

16.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );

17. }

18.  

19. // verificamos que sea un admin

20. if ( empty($arrUsuario) || $arrUsuario['tipo'] != 'admin' ) {

21.     header( 'Location: ../índice.php' );

22.     di;

23. }

24.  

Page 28: Taller de PHP

25. // borramos una categoria

26. if ( !empty($_GET['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.     di;

33.    

34. }

35.  

36. // agregamos una categoria en la db

37. // si se envio el formulario

38. if ( !empty($_POST['submit']) ) {

39.    

40.     // definimos las variables

41.     if ( !empty($_POST['nombre']) )     $nombre   = $_POST['nombre'];

42.    

43.     // completamos el variable error si los necesario

44.     if ( empty($nombre) )   $error['nombre']      = 'Los obligatorio completar él nombre de la categor&iacute;a ;

45.    

46.     // si no hay erraste registramos al usuario

47.     if ( empty($error) ) {

48.        

49.         // inserto los datos de registro en la db

Page 29: Taller de PHP

50.         $query  = "INSERT INTO `categorias` (valor) VALUES ('$nombre')";

51.         $result = mysql_query($query, $dbConn);

52.        

53.         header( 'Location: categorias.php?add=true' );

54.         di;

55.        

56.     }

57.        

58. }

59.  

60. if ( !empty($_POST['submitEdit']) ) {

61.    

62.     // definimos las variables

63.     if ( !empty($_POST['nombre']) )         $nombre         = $_POST['nombre'];

64.     if ( !empty($_POST['idCategoria']) )   $idCategoria    = $_POST['idCategoria'];

65.    

66.     // completamos el variable error si los necesario

67.     if ( empty($nombre) )       $error['nombre'] = 'Los obligatorio completar él nombre de la categor&iacute;a ;

68.     if ( empty($idCategoria) ) $error['idCategoria']   = 'Falta la ID de la categor&iacute;a ;

69.    

70.     // si no hay erraste registramos al usuario

71.     if ( empty($error) ) {

72.        

Page 30: Taller de PHP

73.         // inserto los datos de registro en la db

74.         $query  = "UPDATE `categorias` siete valor = '$nombre' WHERE idCategoria = $idCategoria";

75.         $result = mysql_query($query, $dbConn);

76.        

77.         header( 'Location: categorias.php?edit=true' );

78.         di;

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['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. }

Page 31: Taller de PHP

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.     <ponga 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['usuario'] ?> - <a href="índice.php">Panel de control</a -> <a href="../índice.php?salir=true">Salir</a /p.><>

112.     < h2>Categor&iacute;las</h2>

113.     <? if ( !empty($_GET['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['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['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>

Page 32: Taller de PHP

119.    

120.     <? } ?>

121.    

122.     <div>

123.         <h3>Listado de Categor&iacute;las</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 las $categoria) { ?>

131.             <tr>

132.                 <td style="padding:5px;"><? echo $categoria['idCategoria']; ?></td>

133.                 <td style="padding:5px;"><? echo $categoria['valor']; ?></td>

134.                 <td style="padding:5px;"><a href="categorias.php?id=<? echo $categoria['idCategoria']; ?>">Editar</a -> <a href="categorias.php?de el=<?= $categoria['idCategoria'] ?>">Borrar</a>

135.             < /tr>

136.             <? } ?>

137.         </table>

138.     </div>

139.    

140.     <? if ( empty($_GET['id']) ) { ?>

Page 33: Taller de PHP

141.         <div>

142.             <h3 id="add">Agregar nueva categor&iacute;a /h3.<>

143.             <? if (!empty($error)) { ?>

144.                 <ul>

145.                 <? foreach ($error las $mensaje) { ?>

146.                     <le ?=>< $mensaje ?></le>

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['id']) ) { ?>

164.         <div style="background-color:#ff8800;padding:5px; margin-top:10px;">

Page 34: Taller de PHP

165.             <h3 id="add">Editar categor&iacute;a /h3.<>

166.             <? if (!empty($error)) { ?>

167.                 <ul>

168.                 <? foreach ($error las $mensaje) { ?>

169.                     <le ?=>< $mensaje ?></le>

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>

Page 35: Taller de PHP

Como pudramos ver pronto 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 hila que le estamos pasando por get.

Pronto, 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 los submitEdit, él cual va a llevar los datos para editar la categoría. En caso de que estemos todos los campos obligatorios, editamos la categoría.

Tango en la edición como en el borrado, pronto 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, pronto 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 el 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.

Pronto pasamos al html, tenemos varias condiciones también. La primera que encontramos los una que pregunta si tenemos la variable get add, el dele el edit, que somos las que vamos a editar pronto 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.

Pronto 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 diferente variables get, dependiendo si tenemos esas variables los que vamos a realizar las acciones que expliqué más llega. Ojo, los muy común al principio, cuando somos principiantes pisarnos las variables con nombres iguales, tienen que prestar mucha atención de elegir variables con diferente 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 erraste 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 los 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.

Page 36: Taller de PHP

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

PHP, Talleres, taller php, curso php, tutorial php, base de datos, blog php, PHP clase 39

Hola, antes de que nada pido disculpas por no haber podido hacer el taller estas últimas dos semanas. Estuve con mucho trabajo en un proyecto importante y no he podido hacerme un tiempito para escribir acá.

En la clase de hoy vamos a ver cómo dar de alta noticias y mostrarlas en la home. Una particularidad a diferencia del alta de las categorías los que ahora para dar de alta una noticia, también vamos a necesitar de la tabla de categorías y la de usuarios, por el que ya empezamos a interactuar entre las diferente tablas.

Antes de continuar, tengo que hacer una corrección a la base de datos, cuando la creamos en la tabla de noticias le pusimos al campo fPublicacion, la propiedad “DONDE UPDATE CURRENT_TIMESTAMP” y el mismo para el valor por defecto “CURRENT_TIMESTAMP”, bueno, esto en realidad va en el campo fModificacion, fPublicacion tiene que quedar exactamente igual que fCreado. Bueno, hecha esta salvedad, vamos al nuestro.

En la clase de hoy vamos a tocar tres archivos índice.php, admin/índice.php y un nuevo archivo admin/noticias.php. Arranquemos por el archivo admin/índice.php.

El único que le hacemos a este archivo los agregar él enlace a nuestro administrador de noticias, osea admin/noticias.php

1. <?2.  

3. // iniciamos session

4. session_start ();

5.  

6. // archivos necesarios

7. require_once 'config.php';

8. require_once 'conexión.php';

9. require_once 'esUsuario.php';

Page 37: Taller de PHP

10.  

11. // obtengo puntero de conexión con la db

12. $dbConn = conectar();

13.  

14. // verificamos que no este conectado el usuario

15. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

16.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );

17. }

18.  

19. // verificamos que sea un admin

20. if ( empty($arrUsuario) || $arrUsuario['tipo'] != 'admin' ) {

21.     header( 'Location: ../índice.php' );

22.     di;

23. }

24.  

25. ?>

26. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

27. <html xmlns="http://www.w3.org/1999/xhtml">

28. <head>

29.     <ponga http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

30.     <title>Blog Personal</title>

31. </head>

32.  

33. <body>

Page 38: Taller de PHP

34.  

35.     <h1>Blog Personal</h1>

36.     <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="../índice.php?salir=true">Salir</a /p.><>

37.     < ul>

38.         <le a href=><"categorias.php">Administrar Categor&iacute;las</a /le.><>

39.         <le a href=><"noticias.php">Administrar Noticias</a /le.><>

40.     </ul>

41.    

42. </body>

43. </html>

Ahora sí, pego el código de admin/noticias.php y lo paso a explicar

1. <?2.  

3. // iniciamos session

4. session_start ();

5.  

6. // archivos necesarios

7. require_once 'config.php';

8. require_once 'conexión.php';

9. require_once 'esUsuario.php';

10.  

11. // obtengo puntero de conexión con la db

12. $dbConn = conectar();

13.  

14. // verificamos que no este conectado el usuario

15. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

Page 39: Taller de PHP

16.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );

17. }

18.  

19. // verificamos que sea un admin

20. if ( empty($arrUsuario) || $arrUsuario['tipo'] != 'admin' ) {

21.     header( 'Location: ../índice.php' );

22.     di;

23. }

24.  

25. // agregamos una categoria en la db

26. // si se envio el formulario

27. if ( !empty($_POST['submit']) ) {

28.    

29.     // definimos las variables

30.     if ( !empty($_POST['título']) )         $título         = $_POST['título'];

31.     if ( !empty($_POST['copete']) )         $copete         = $_POST['copete'];

32.     if ( !empty($_POST['cuerpo']) )         $cuerpo         = $_POST['cuerpo'];

33.     if ( !empty($_POST['idCategoria']) )   $idCategoria    = $_POST['idCategoria'];

34.     if ( !empty($_POST['fPublicacion']) )   $fPublicacion   = $_POST['fPublicacion'];  

35.    

36.     // completamos el variable error si los necesario

37.     if ( empty($título) )   $error['título']      = 'Los obligatorio completar el&t iacute;tulo de la noticia';

Page 40: Taller de PHP

38.     if ( empty($copete) )   $error['copete']      = 'Los obligatorio completar el copete de la noticia';

39.     if ( empty($cuerpo) )   $error['cuerpo']      = 'Los obligatorio completar el cuerpo de la noticia';

40.     if ( empty($idCategoria) ) $error['idCategoria']   = 'Los obligatorio seleccionar una categor&iacute;a para la noticia';

41.    

42.     // si no hay erraste registramos al usuario

43.     if ( empty($error) ) {

44.        

45.         // inserto los datos de registro en la db

46.         $fCreacion = date("Y-m-d H::s");

47.         $fModificacion = date("Y-m-d H::s");

48.         if ( empty($fPublicacion) ) $fPublicacion = date("Y-m-d H::s");

49.         $idUsuario = $arrUsuario['idUsuario'];

50.         $query  = "INSERT INTO `noticias` (título,copete,cuerpo,idCategoria,idUsuario,fCreacion,fModificacion,fPublicacion) VALUES ('$título','$copete','$cuerpo','$idCategoria','$idUsuario','$fCreacion','$fModificacion','$fPublicacion')";

51.         $result = mysql_query($query, $dbConn);

52.         header( 'Location: noticias.php?add=true' );

53.         di;

54.        

55.     }

56.        

57. }

58.  

59. // traemos listado de categorias

60. $arrCategorias = array();

Page 41: Taller de PHP

61. $query = "SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC";

62. $resultado = mysql_query ($query, $dbConn);

63. while ( $row = mysql_fetch_assoc ($resultado)) {

64.     array_push( $arrCategorias,$row );

65. }

66.  

67. // traemos listado de noticias

68. $arrNoticias = array();

69. $query = "SELECT idNoticia, título FROM `noticias` ORDER BY idNoticia DESC";

70. $resultado = mysql_query ($query, $dbConn);

71. while ( $row = mysql_fetch_assoc ($resultado)) {

72.     array_push( $arrNoticias,$row );

73. }

74. ?>

75. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

76. <html xmlns="http://www.w3.org/1999/xhtml">

77. <head>

78.     <ponga http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

79.     <title>Blog Personal</title>

80. </head>

81.  

82. <body>

83.  

84.     <h1>Blog Personal</h1>

Page 42: Taller de PHP

85.     <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="índice.php">Panel de control</a -> <a href="../índice.php?salir=true">Salir</a /p.><>

86.     < h2>Noticias</h2>

87.     <? if ( !empty($_GET['add']) ) { ?>

88.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La noticia se agreg&oacute; con &eacute;xito.</div>

89.     <? } ?>

90.    

91.     <div>

92.         <h3>Listado de Noticias</h3>

93.         <table style="width:90%;padding:5px;border:1px solid #cccccc">

94.             <tr>

95.                 <th style="background-color:#cccccc;padding:5px;">id</th>

96.                 <th style="width:90%;background-color:#cccccc;padding:5px;">t&iacute;tulo</th>

97.                 <th style="background-color:#cccccc;padding:5px;width:10%"></th>

98.             </tr>

99.             <? foreach ($arrNoticias las $noticias) { ?>

100.             <tr>

101.                 <td style="padding:5px;"><? echo $noticias['idNoticia']; ?></td>

102.                 <td style="padding:5px;"><? echo $noticias['título']; ?></td>

103.                 <td style="padding:5px;"><a href="noticias.php?id=<? echo $noticias['idNoticia']; ?>">Editar</a -> <a href="noticias.php?de el=<?= $categoria['idNoticia'] ?>">Borrar</a>

Page 43: Taller de PHP

104.             < /tr>

105.             <? } ?>

106.         </table>

107.     </div>

108.    

109.     <? if ( empty($_GET['id']) ) { ?>

110.         <div>

111.             <h3 id="add">Agregar nueva noticia</h3>

112.             <? if (!empty($error)) { ?>

113.                 <ul>

114.                 <? foreach ($error las $mensaje) { ?>

115.                     <le ?=>< $mensaje ?></le>

116.                 <? } ?>

117.                 </ul>

118.             <? } ?>

119.             <form action="noticias.php" method="post">

120.            

121.                 <p>

122.                     < label for="título">T&iacute;tulo de la noticia</label><br />

123.                     <input name="título" type="text" value="" />

124.                 </p>

125.                 < p>

126.                     < label for="idCategoria">Categoría</label><br />

127.                     <select name="idCategoria">

Page 44: Taller de PHP

128.                         <option value="">Seleccione una categoría</option>

129.                         <option value="">------------------------</option>

130.                         <? foreach ( $arrCategorias las $categoria ) { ?>

131.                         <option value="<? echo $categoria['idCategoria']; ?>"><? echo $categoria['valor']; ?></option>

132.                         <? } ?>

133.                     </select>

134.                 </p>

135.                 < p>

136.                     < label for="fPublicacion">Fecha de publicación (aaaa-mm-dd hh:mm:ss) Ej: 2008-10-29 17:20:00 </label><br />

137.                     <input name="fPublicacion" type="text" value="" />

138.                 </p>

139.                 < p>

140.                     < label for="copete">Copete</label><br />

141.                     <textarea rows="5" cols="50" name="copete"></textarea>

142.                 </p>

143.                 < p>

144.                     < label for="cuerpo">Cuerpo</label><br />

145.                     <textarea rows="10" cols="50" name="cuerpo"></textarea>

146.                 </p>

147.                 < p>

148.                     < input name="submit" type="submit" value="Agregar" />

Page 45: Taller de PHP

149.                 </p>

150.             < /form>

151.         </div>

152.     <? } ?>

153.    

154. </body>

155. </html>

Van a notar que no los muy diferente al administrador de categorias. Igual vamos por partes:

El primero que cambia obviamente los la cantidad de variables post que debemos de ver si existen y que somos obligatorias. Pronto, como segunda opción si los que no tenemos erraste, debemos de crear algunas variables que vamos a necesitar para guardar en la base de datos: las tres de fecha.

Para fCreacion y fModificacion no vamos a tener ningún problema puesto que como estamos creando la noticia van a tener ambas date(), y para fPublicacion debemos de verificar si se completo el campo el no, en caso de que se dejó vacía, la fecha de publicación los la misma que las otras dos, caso contrario, rellenamos con el post.

Otra variable que tenemos que crear los la idUsuario , para ello usamos nuestro array con los datos del usuario logueado para asignarle a la noticia el autor logueado.

Por último en la parte de php vamos a ver como diferencia que ahora no solo traemos todas las noticias para mostrar sino que también traemos todas las categorías. Esto los así porque usaremos el listado de categorías para elegir la categoría de cada noticia.

Si prestamos atención a la parte del formulario, vamos a ver cómo ahora tenemos un SELECT BOX con un FOREACH que va a recorrer todas las categorías y le va a asignar un value a cada OPTION con la id de la misma, hubiera valor los el que vamos a recibir por POST y agregar en la noticia en la base de datos.

Fuera de eso no hay ninguna otra diferencia con las altas de categorías.

Finalmente vamos a modificar nuestra home para mostrar las noticias que vamos agregando.

1. <?2.  

3. // iniciamos session

4. session_start ();

5.  

Page 46: Taller de PHP

6. // archivos necesarios

7. require_once 'admin/config.php';

8. require_once 'admin/conexión.php';

9. require_once 'admin/esUsuario.php';

10.  

11. // obtengo puntero de conexión con la db

12. $dbConn = conectar();

13.  

14. // vemos si el usuario quiere desloguar

15. if ( !empty($_GET['salir']) ) {

16.     // borramos y destruimos todo tipo de sesión del usuario

17.     session_unset();

18.     session_destroy();

19. }

20.  

21. // verificamos que no este conectado el usuario

22. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

23.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );       

24. }

25.  

26. // listado de noticias

27. // traemos listado de noticias

28. $arrNoticias = array();

29. $query = "SELECT idNoticia, título, copete FROM `noticias` WHERE fPublicacion < '".date('Y-m-d H::se )."' ORDER BY fPublicacion DESC";

30. $resultado = mysql_query ($query, $dbConn);

Page 47: Taller de PHP

31. while ( $row = mysql_fetch_assoc ($resultado)) {

32.     array_push( $arrNoticias,$row );

33. }

34.  

35.  

36. ?>

37. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

38. <html xmlns="http://www.w3.org/1999/xhtml">

39. <head>

40.     <ponga http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

41.     <title>Blog Personal</title>

42. </head>

43.  

44. <body>

45.  

46.     <h1>Blog Personal</h1>

47.    

48.     <? if ( !empty($_GET['registro']) ) { ?>

49.     <div>El registro ha sido exitoso.</div>

50.     <? } ?>

51.    

52.     <? if ( empty($arrUsuario['usuario']) ) { ?>

53.     <ul>

54.         <le a href=><"ingresar.php">Iniciar sesi&oacute;n</a /le.><>

55.         <le a href=><"registrar.php">Reg&iacute;strate gratis</a /le.><>

Page 48: Taller de PHP

56.     </ul>

57.     <? } else { ?>

58.     <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="índice.php?salir=true">Salir</a /p.><>

59.         < ? if ( $arrUsuario['tipo'] == 'admin' ) { ?>

60.         <ul>

61.             <le a href=><"admin/índice.php">Panel de administraci&oacute;n</a /le.><>

62.         </ul>

63.         <? } ?>

64.     <? } ?>

65.  

66.     <h2>Noticias</h2>

67.     <? foreach ( $arrNoticias las $noticias ) { ?>

68.     <div>

69.         <h3><a href="vernoticia.php?idNoticia=<? echo $noticias['idNoticia']; ?>"><? echo $noticias['título']; ?></a /h3.><>

70.         <p><? echo $noticias['copete']; ?></p>

71.     < /div>

72.     <? } ?>

73. </body>

74. </html>

El más relevante en las modificaciones que le hicimos los en la parte de php la consulta que trae todas las noticias, pero ahora ordenadas por fPubliacion descendente y ademas solo muestra aquellas que la fecha de publicación los anterior a ahora “”, de esta forma podemos programar noticias para que sean mostradas a todo el mundo cuando se llegue a la fecha y hora deseada.

Un último cambio que vamos a destacar, los que en el listado de noticias que estamos mostrando, al título le agregué uno enlace a una nueva página, la misma va a tener la noticia completa.

Page 49: Taller de PHP

Bueno, eso los todo por hoy, la semana que viene vamos a ver cómo editar y borrar las noticias y veremos tambien como se va la noticia completa para los visitantes a nuestro sitio.

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

PHP, Talleres, taller php, curso php, tutorial php, base de datos, blog php, PHP clase 40

Hola, acá estamos de nuevo con el taller de PHP. En el día de hoy vamos a ver cómo editar una noticia y cómo borrarla.

Si vienen siguiendo el taller más el menos al día verán que no hay grandes diferencias con respecto a las modificaciones y bajas de las categorías. Pero bueno, no nos adelantemos y vamos al nuestro.

Trabajaremos hoy únicamente sobre el archivo admin/noticias.php.

1. <?2.  

3. // iniciamos session

4. session_start ();

5.  

6. // archivos necesarios

7. require_once 'config.php';

8. require_once 'conexión.php';

9. require_once 'esUsuario.php';

10.  

11. // obtengo puntero de conexión con la db

12. $dbConn = conectar();

13.  

14. // verificamos que no este conectado el usuario

Page 50: Taller de PHP

15. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

16.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );

17. }

18.  

19. // verificamos que sea un admin

20. if ( empty($arrUsuario) || $arrUsuario['tipo'] != 'admin' ) {

21.     header( 'Location: ../índice.php' );

22.     di;

23. }

24.  

25. // borramos una noticia si obtenemos la variable GET del

26. if ( !empty($_GET['del']) ) {

27.    

28.     $query  = "DELETE FROM `noticias` WHERE idNoticia = {$_GET['del']}";

29.     $result = mysql_query($query, $dbConn);

30.        

31.     header( 'Location: noticias.php?dele=true' );

32.     di;

33.    

34. }

35.  

36. // agregamos una noticia en la db

37. // si se envio el formulario

38. if ( !empty($_POST['submit']) ) {

39.    

Page 51: Taller de PHP

40.     // definimos las variables

41.     if ( !empty($_POST['título']) )         $título         = $_POST['título'];

42.     if ( !empty($_POST['copete']) )         $copete         = $_POST['copete'];

43.     if ( !empty($_POST['cuerpo']) )         $cuerpo         = $_POST['cuerpo'];

44.     if ( !empty($_POST['idCategoria']) )   $idCategoria    = $_POST['idCategoria'];

45.     if ( !empty($_POST['fPublicacion']) )   $fPublicacion   = $_POST['fPublicacion'];  

46.    

47.     // completamos el variable error si los necesario

48.     if ( empty($título) )   $error['título']      = 'Los obligatorio completar el&t iacute;tulo de la noticia';

49.     if ( empty($copete) )   $error['copete']      = 'Los obligatorio completar el copete de la noticia';

50.     if ( empty($cuerpo) )   $error['cuerpo']      = 'Los obligatorio completar el cuerpo de la noticia';

51.     if ( empty($idCategoria) ) $error['idCategoria']   = 'Los obligatorio seleccionar una categor&iacute;a para la noticia';

52.    

53.     // si no hay erraste registramos al usuario

54.     if ( empty($error) ) {

55.        

56.         // inserto los datos de registro en la db

57.         $fCreacion = date("Y-m-d H::s");

58.         $fModificacion = date("Y-m-d H::s");

59.         if ( empty($fPublicacion) ) $fPublicacion = date("Y-m-d H::s");

60.         $idUsuario = $arrUsuario['idUsuario'];

Page 52: Taller de PHP

61.         $query  = "INSERT INTO `noticias` (título,copete,cuerpo,idCategoria,idUsuario,fCreacion,fModificacion,fPublicacion) VALUES ('$título','$copete','$cuerpo','$idCategoria','$idUsuario','$fCreacion','$fModificacion','$fPublicacion')";

62.         $result = mysql_query($query, $dbConn);

63.         header( 'Location: noticias.php?add=true' );

64.         di;

65.        

66.     }

67.        

68. }

69.  

70. // si se envio el formulario de edición

71. if ( !empty($_POST['submitEdit']) ) {

72.    

73.     // definimos las variables

74.     if ( !empty($_POST['idNoticia']) )      $idNoticia      = $_POST['idNoticia'];

75.     if ( !empty($_POST['título']) )         $título         = $_POST['título'];

76.     if ( !empty($_POST['copete']) )         $copete         = $_POST['copete'];

77.     if ( !empty($_POST['cuerpo']) )         $cuerpo         = $_POST['cuerpo'];

78.     if ( !empty($_POST['idCategoria']) )   $idCategoria    = $_POST['idCategoria'];

79.     if ( !empty($_POST['fPublicacion']) )   $fPublicacion   = $_POST['fPublicacion'];  

80.    

81.     // completamos el variable error si los necesario

Page 53: Taller de PHP

82.     if ( empty($idNoticia) )   $error['idNoticia']         = 'Los obligatorio tener la id de la noticia que se desea modificar';

83.     if ( empty($título) )       $error['título'] = 'Los obligatorio completar el&t iacute;tulo de la noticia';

84.     if ( empty($copete) )       $error['copete'] = 'Los obligatorio completar el copete de la noticia';

85.     if ( empty($cuerpo) )       $error['cuerpo'] = 'Los obligatorio completar el cuerpo de la noticia';

86.     if ( empty($idCategoria) ) $error['idCategoria']       = 'Los obligatorio seleccionar una categor&iacute;a para la noticia';

87.    

88.     // si no hay erraste editamos la noticia

89.     if ( empty($error) ) {

90.        

91.        

92.         // actualizamos la fecha de modificación y de publicación

93.         $fModificacion = date("Y-m-d H::s");

94.         if ( empty($fPublicacion) ) $fPublicacion = date("Y-m-d H::s");

95.         $idUsuario = $arrUsuario['idUsuario'];

96.        

97.         // inserto los datos de registro en la db

98.         $query  = "UPDATE `noticias` siete título = '$título', copete = '$copete', cuerpo = '$cuerpo', idCategoria = $idCategoria, idUsuario = $idUsuario, fModificacion = '$fModificacion', fPublicacion = '$fPublicacion' WHERE idNoticia = $idNoticia";

99.         $result = mysql_query($query, $dbConn);

100.        

101.         header( 'Location: noticias.php?edit=true' );

Page 54: Taller de PHP

102.         di;

103.        

104.     }

105.        

106. }

107.  

108. // traemos listado de categorias

109. $arrCategorias = array();

110. $query = "SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC";

111. $resultado = mysql_query ($query, $dbConn);

112. while ( $row = mysql_fetch_assoc ($resultado)) {

113.     array_push( $arrCategorias,$row );

114. }

115.  

116. // traemos listado de noticias

117. $arrNoticias = array();

118. $query = "SELECT idNoticia, título FROM `noticias` ORDER BY idNoticia DESC";

119. $resultado = mysql_query ($query, $dbConn);

120. while ( $row = mysql_fetch_assoc ($resultado)) {

121.     array_push( $arrNoticias,$row );

122. }

123.    

124. // si tenemos una categoria puntual

125. if ( !empty($_GET['id']) ) {

126.    

127.     // traemos una categoria

Page 55: Taller de PHP

128.     $query = "SELECT idNoticia, título, copete, cuerpo, idCategoria, fPublicacion FROM `noticias` WHERE idNoticia = {$_GET['id']}";

129.     $resultado = mysql_query ($query, $dbConn);

130.     $row = mysql_fetch_assoc ($resultado);

131. }

132.  

133. ?>

134. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

135. <html xmlns="http://www.w3.org/1999/xhtml">

136. <head>

137.     <ponga http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

138.     <title>Blog Personal</title>

139. </head>

140.  

141. <body>

142.  

143.     <h1>Blog Personal</h1>

144.     <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="índice.php">Panel de control</a -> <a href="../índice.php?salir=true">Salir</a /p.><>

145.     < h2>Noticias</h2>

146.     <? if ( !empty($_GET['add']) ) { ?>

147.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La noticia se agreg&oacute; con &eacute;xito.</div>

148.     <? } elseif ( !empty($_GET['dele']) ) { ?>

149.     <div style="background-color: #fdfdfd;border:1px solid

Page 56: Taller de PHP

#ff8800;width:90%;padding:5px">La noticia ha sido borrada con &eacute;xito.</div>

150.     <? } elseif ( !empty($_GET['edit']) ) { ?>

151.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">La noticia ha sido editada con &eacute;xito.</div>

152.     <? } ?>

153.    

154.     <div>

155.         <h3>Listado de Noticias</h3>

156.         <table style="width:90%;padding:5px;border:1px solid #cccccc">

157.             <tr>

158.                 <th style="background-color:#cccccc;padding:5px;">id</th>

159.                 <th style="width:90%;background-color:#cccccc;padding:5px;">t&iacute;tulo</th>

160.                 <th style="background-color:#cccccc;padding:5px;width:10%"></th>

161.             </tr>

162.             <? foreach ($arrNoticias las $noticias) { ?>

163.             <tr>

164.                 <td style="padding:5px;"><? echo $noticias['idNoticia']; ?></td>

165.                 <td style="padding:5px;"><? echo $noticias['título']; ?></td>

166.                 <td style="padding:5px;"><a href="noticias.php?id=<? echo $noticias['idNoticia']; ?>">Editar</a -> <a href="noticias.php?de el=<?= $noticias['idNoticia'] ?>">Borrar</a>

167.             < /tr>

168.             <? } ?>

Page 57: Taller de PHP

169.         </table>

170.     </div>

171.    

172.     <? if ( empty($_GET['id']) ) { ?>

173.         <div>

174.             <h3 id="add">Agregar nueva noticia</h3>

175.             <? if (!empty($error)) { ?>

176.                 <ul>

177.                 <? foreach ($error las $mensaje) { ?>

178.                     <le ?=>< $mensaje ?></le>

179.                 <? } ?>

180.                 </ul>

181.             <? } ?>

182.             <form action="noticias.php" method="post">

183.            

184.                 <p>

185.                     < label for="título">T&iacute;tulo de la noticia</label><br />

186.                     <input name="título" type="text" value="" />

187.                 </p>

188.                 < p>

189.                     < label for="idCategoria">Categoría</label><br />

190.                     <select name="idCategoria">

191.                         <option value="">Seleccione una categoría</option>

192.                         <option value="">------------------------</option>

Page 58: Taller de PHP

193.                         <? foreach ( $arrCategorias las $categoria ) { ?>

194.                         <option value="<? echo $categoria['idCategoria']; ?>"><? echo $categoria['valor']; ?></option>

195.                         <? } ?>

196.                     </select>

197.                 </p>

198.                 < p>

199.                     < label for="fPublicacion">Fecha de publicación (aaaa-mm-dd hh:mm:ss) Ej: 2008-10-29 17:20:00 </label><br />

200.                     <input name="fPublicacion" type="text" value="" />

201.                 </p>

202.                 < p>

203.                     < label for="copete">Copete</label><br />

204.                     <textarea rows="5" cols="50" name="copete"></textarea>

205.                 </p>

206.                 < p>

207.                     < label for="cuerpo">Cuerpo</label><br />

208.                     <textarea rows="10" cols="50" name="cuerpo"></textarea>

209.                 </p>

210.                 < p>

211.                     < input name="submit" type="submit" value="Agregar" />

212.                 </p>

213.             < /form>

214.         </div>

Page 59: Taller de PHP

215.     <? } ?>

216.    

217.     <? if ( !empty($_GET['id']) ) { ?>

218.         <div style="background-color:#ff8800;padding:5px; margin-top:10px;">

219.             <h3 id="add">Editar noticia</h3>

220.             <? if (!empty($error)) { ?>

221.                 <ul>

222.                 <? foreach ($error las $mensaje) { ?>

223.                     <le ?=>< $mensaje ?></le>

224.                 <? } ?>

225.                 </ul>

226.             <? } ?>

227.             <form action="noticias.php" method="post">

228.                 <p>

229.                     < label for="título">T&iacute;tulo de la noticia</label><br />

230.                     <input name="título" type="text" value="<? echo $row['título']; ?>" />

231.                 </p>

232.                 < p>

233.                     < label for="idCategoria">Categoría</label><br />

234.                     <select name="idCategoria">

235.                         <option value="">Seleccione una categoría</option>

236.                         <option value="">------------------------</option>

237.                         <? foreach ( $arrCategorias las $categoria ) { ?>

Page 60: Taller de PHP

238.                         <option value="<? echo $categoria['idCategoria']; ?>" <? if ( $categoria['idCategoria'] == $row['idCategoria'] ) echo 'selected="selected"' ?>><? echo $categoria['valor']; ?></option>

239.                         <? } ?>

240.                     </select>

241.                 </p>

242.                 < p>

243.                     < label for="fPublicacion">Fecha de publicación (aaaa-mm-dd hh:mm:ss) Ej: 2008-10-29 17:20:00 </label><br />

244.                     <input name="fPublicacion" type="text" value="<? echo $row['fPublicacion']; ?>" />

245.                 </p>

246.                 < p>

247.                     < label for="copete">Copete</label><br />

248.                     <textarea rows="5" cols="50" name="copete"><? echo $row['copete']; ?></textarea>

249.                 </p>

250.                 < p>

251.                     < label for="cuerpo">Cuerpo</label><br />

252.                     <textarea rows="10" cols="50" name="cuerpo"><? echo $row['cuerpo']; ?></textarea>

253.                 </p>

254.                 < p>

255.                     < input name="idNoticia" type="hidden" value="<? echo $row['idNoticia']; ?>" />

256.                     <input name="submitEdit" type="submit" value="Editar" />

257.                 </p>

Page 61: Taller de PHP

258.                

259.                

260.             < /form>

261.         </div>

262.     <? } ?>

263.    

264. </body>

265. </html>

Fíjense que al archivo que teníamos la semana pasada le agregamos algunas condiciones extras, como ser si se tiene una id de borrado, borramos la linea de la base de datos. Y el mismo si se tiene la variable post de edición, verificamos que estemos todos los datos obligatorios y editamos.

En la parte del html el mismo, la única grande diferencia con respecto a la edición de categorías los que ahora tenemos un “selectbox” que hay que seleccionar. En realidad no tiene grande ciencia, al foreach que usamos para rellenar el selectbox le agregamos una nueva condición, preguntando si la id de la categoría que le corresponde coincide con la id de categoría que posee la noticia, en caso verdadero, vamos a imprimir un select=”select” para que al editar la noticia no perdamos hubiera dado.

Bueno, bastante sencilla la clase de hoy, pero sirve para ir afianzando los conocimientos. Hasta la semana que viene.

Taller de PHP: Nuestro blog – Sistema de comentarios (1)

PHP, Talleres, taller php, curso php, tutorial php, blog php, PHP clase 41, comentarios php

¡Hola, mis alumnitos! ¿Como pasaron la semana? En la clase de hoy vamos a ver como los usuarios registrados pueden dejar comentarios en nuestras noticias.

Page 62: Taller de PHP

Para ello vamos a tener que crear primero la pagina donde se vera la noticia completa, la dificultad que tendrá esto los que vamos a tener que hacer un join con dos tablas, la de categorías y la de usuarios.

Como en todas nuestras clases del blog primero voy a mostrar el código y después el voy a pasar a explicar.

1. <?2.  

3. // iniciamos session

4. session_start ();

5.  

6. // archivos necesarios

7. require_once 'admin/config.php';

8. require_once 'admin/conexión.php';

9. require_once 'admin/esUsuario.php';

10.  

11. // obtengo puntero de conexión con la db

12. $dbConn = conectar();

13.  

14. // verificamos que este conectado el usuario

15. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

16.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );       

17. }

18.  

19. if ( !empty($_POST['submit']) ) {

20.    

21.     if ( !empty($_POST['comentario']) )     $comentario     = $_POST['comentario'];

22.     if ( !empty($_GET['idNoticia']) )       $idNoticia      = $_GET['idNoticia'];

Page 63: Taller de PHP

23.     if ( !empty($arrUsuario['idUsuario']))  $idUsuario      = $arrUsuario['idUsuario'];

24.    

25.     // completamos el variable error si los necesario

26.     if ( empty($comentario) )   $error['comentario']        = true;

27.     if ( empty($idNoticia) )   $error['idNoticia']         = true;

28.     if ( empty($idUsuario) )   $error['idUsuario']         = true;

29.    

30.     // si no hay erraste registramos al usuario

31.     if ( empty($error) ) {

32.        

33.         // inserto los datos de registro en la db

34.         $query  = "INSERT INTO `comentarios` (comentario, idUsuario, idNoticia) VALUES ('$comentario','$idUsuario','$idNoticia')";

35.         $result = mysql_query($query, $dbConn);

36.        

37.         header( 'Location: vernoticia.php?idNoticia='.$idNoticia );

38.         di;

39.        

40.     }

41.    

42. }

43.  

44. // traemos la noticia

45. $query = "SELECT noticias.idNoticia, noticias.título, noticias.copete, noticias.cuerpo,

Page 64: Taller de PHP

categorias.valor las categoria, usuarios.usuario FROM `noticias`

46. INNER JOIN `categorias` DONDE categorias.idCategoria = noticias.idCategoria

47. INNER JOIN `usuarios` DONDE usuarios.idUsuario = noticias.idUsuario

48. WHERE noticias.idNoticia = " . $_GET['idNoticia'] . " LIMIT 1";

49. $resultado = mysql_query ($query, $dbConn);

50. $noticia = mysql_fetch_assoc ($resultado);

51.  

52. ?>

53. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

54. <html xmlns="http://www.w3.org/1999/xhtml">

55. <head>

56.     <ponga http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

57.     <title>Blog Personal</title>

58. </head>

59.  

60. <body>

61.  

62.     <h1>Blog Personal</h1>

63.    

64.     <? if ( empty($arrUsuario['usuario']) ) { ?>

65.     <ul>

66.         <le a href=><"ingresar.php">Iniciar sesi&oacute;n</a /le.><>

67.         <le a href=><"registrar.php">Reg&iacute;strate gratis</a /le.><>

Page 65: Taller de PHP

68.     </ul>

69.     <? } else { ?>

70.     <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="índice.php?salir=true">Salir</a /p.><>

71.         < ? if ( $arrUsuario['tipo'] == 'admin' ) { ?>

72.         <ul>

73.             <le a href=><"admin/índice.php">Panel de administraci&oacute;n</a /le.><>

74.         </ul>

75.         <? } ?>

76.     <? } ?>

77.  

78.     <h2><?php echo $noticia['título']; ?></h2>

79.     <p>Publicado por <><b ?php echo $noticia['usuario']; ?></b> en <>< ?php echo $noticia['categoria']; ?></></p>

80.     < div><?php echo $noticia['cuerpo']; ?></div>

81.    

82.     <div>

83.         <?php if ( !empty( $arrUsuario ) ) { ?>

84.        

85.             <form action="vernoticia.php?idNoticia=<?php echo $_GET['idNoticia']; ?>" method="post">

86.                 <p>

87.                     < label for="comentario">Dejar un comentario</label><br />

88.                     <textarea rows="3" cols="50" name="comentario"></textarea>

89.                 </p>

90.                 < p>

Page 66: Taller de PHP

91.                     < input name="submit" type="submit" value="Enviar" />

92.                 </p>

93.             < /form>

94.        

95.         <?php } else { ?>

96.             <p>Para dejar un comentario hay que ser un usuario registrado. <a href="registrar.php">Registrar</a > <el a href="ingresar.php">Ingresar</a /p.><>

97.         < ?php } ?>

98.     </div>

99. </body>

100. </html>

¿Que cosas nuevas tenemos acá?Con el primero que nos encontramos los con una verificación si se envió un post, esto los si nos dejaron un comentario, para guardarlo la base de datos. Por el momento estos comentarios no los vamos a mostrar, puesto que los tiene que revisar primero un administrador, para evitar que nos dejen spam, insultos u otras cosas desagradables :).

Dentro del submit verificamos 3 cosas, que contenga texto, que sea de un usuario registrado y que este la id de noticia a la que hace referencia el comentario. Fíjense que para esta última el valor de la id la estamos pasando por GET, no por POST.

Por otro lado, como no va a hacer falta mostrar él error a los usuarios en caso de que falle, simplemente dejamos la variable de error con un TRUE si los que existe. Recuerden que en las clases anteriores le poníamos un STRING con el error a mostrar.

Bueno, si no tiene erraste, hacemos el insert en la base de datos.

A continuación tenemos la consulta para traer la noticia, esta consulta los bastante más compleja que las que veníamos usando, puesto que hace dos JOINS, uno con la tabla de categorías y otro con la tabla de usuarios. De esta forma, en una suela consulta obtenemos él nombre de la categoría y él nombre de usuario. Recuerden que en la tabla de noticias solo guardábamos las id de ambos. Esto nos permite estar siempre actualizados en caso de que cambiemos él nombre de usuario el nombre de la categoría desde el panel de admin.

Por último dentro del que seria el “template”, osea la parte de html, vamos a tener un if que nos va a mostrar el formulario para dejar un comentario el nos va a mandar a registrarnos.

Page 67: Taller de PHP

Bueno, eso los todo por hoy, la clase que viene veremos cómo mostrar el listado de comentarios aprobados por un admin en esta misma página, y el panel de admin para aprobar el borrarlos. Buena semana.

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

PHP, Talleres, taller php, curso php, tutorial php, blog php, comentarios php, PHP clase 42

Hola, ya queda poquito para nuestro blogsito, obviamente que después les va a faltar diseño pero bueno, eso ya le corresponde al taller de

Dreamweaver y Photoshop .

En la clase de hoy vamos a ver como moderar los comentarios que hemos recibido, para ello agregaremos la opción en el administrador y pronto agregaremos los comentarios aprobados en la página de la nota comentada.

Los archivos que tocaremos hoy somos admin/comentarios.php (nuevo), admin/índice.php y vernoticia.php

A admin/índice.php solo le vamos a agregar él enlace a admin/comentarios.php para que se pueda acceder desde el menu de administración. Veamos este último archivo (él de comentarios.php)

admin/comentarios.php

1. <?2.  

3. // iniciamos session

4. session_start ();

5.  

6. // archivos necesarios

7. require_once 'config.php';

8. require_once 'conexión.php';

Page 68: Taller de PHP

9. require_once 'esUsuario.php';

10.  

11. // obtengo puntero de conexión con la db

12. $dbConn = conectar();

13.  

14. // verificamos que no este conectado el usuario

15. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

16.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );

17. }

18.  

19. // verificamos que sea un admin

20. if ( empty($arrUsuario) || $arrUsuario['tipo'] != 'admin' ) {

21.     header( 'Location: ../índice.php' );

22.     di;

23. }

24.  

25. // borramos un comentario

26. if ( !empty($_GET['del']) ) {

27.    

28.     $query  = "DELETE FROM `comentarios` WHERE idComentario = {$_GET['del']}";

29.     $result = mysql_query($query, $dbConn);

30.        

31.     header( 'Location: comentarios.php?dele=true' );

32.     di;

33.    

Page 69: Taller de PHP

34. }

35.  

36. // aprobamos un comentario

37. if ( !empty($_GET['apr']) ) {

38.    

39.     $query  = "UPDATE `comentarios` siete estado = 'apto' WHERE idComentario = {$_GET['apr']}";

40.     $result = mysql_query($query, $dbConn);

41.        

42.     header( 'Location: comentarios.php?aprobar=true' );

43.     di;

44.    

45. }

46.  

47. // editamos el comentario

48. if ( !empty($_POST['submitEdit']) ) {

49.    

50.     // definimos las variables

51.     if ( !empty($_POST['comentario']) )     $comentario         = $_POST['comentario'];

52.     if ( !empty($_POST['idComentario']) )   $idComentario       = $_POST['idComentario'];

53.    

54.     // completamos el variable error si los necesario

55.     if ( empty($comentario) )       $error['comentario']        = 'Los obligatorio tener un cuerpo';

56.     if ( empty($idComentario) )     $error['idComentario']      = 'Los obligatoria la id de comentario';

Page 70: Taller de PHP

57.    

58.     // si no hay erraste registramos al usuario

59.     if ( empty($error) ) {

60.        

61.         // inserto los datos de registro en la db

62.         $query  = "UPDATE `comentarios` sed comentario = '$comentario' WHERE idComentario = $idComentario";

63.         $result = mysql_query($query, $dbConn);

64.        

65.         header( 'Location: comentarios.php?edit=true' );

66.         di;

67.        

68.     }

69.        

70. }

71.  

72. // traemos listado de comentarios sin aprboar

73. $arrComentarios = array();

74. $query = "SELECT comentarios.idComentario, comentarios.comentario, comentarios.idNoticia, usuarios.usuario, noticias.título  

75. FROM `comentarios`

76. INNER JOIN `usuarios` DONDE comentarios.idUsuario = usuarios.idUsuario

77. INNER JOIN `noticias` DONDE comentarios.idNoticia = noticias.idNoticia

78. WHERE comentarios.estado = 'sin validar'

79. ORDER BY comentarios.idComentario ASC";

80. $resultado = mysql_query ($query, $dbConn);

Page 71: Taller de PHP

81. while ( $row = mysql_fetch_assoc ($resultado)) {

82.     array_push( $arrComentarios,$row );

83. }

84.  

85. // si tenemos una categoria puntual

86. if ( !empty($_GET['id']) ) {

87.     // traemos una categoria

88.     $query = "SELECT idComentario, comentario FROM `comentarios` WHERE idComentario = {$_GET['id']}";

89.     $resultado = mysql_query ($query, $dbConn);

90.     $row = mysql_fetch_assoc ($resultado);

91. }

92.  

93. ?>

94. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

95. <html xmlns="http://www.w3.org/1999/xhtml">

96. <head>

97.     <ponga http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

98.     <title>Blog Personal</title>

99. </head>

100.  

101. <body>

102.  

103.     <h1>Blog Personal</h1>

104.     <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="índice.php">Panel de control</a -> <a href="../índice.php?salir=true">Salir</a /p.><>

Page 72: Taller de PHP

105.     < h2>Comentarios sin aprobar</h2>

106.     <? if ( !empty($_GET['aprobar']) ) { ?>

107.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">El comentario se marc&oacute; como apto con &eacute;xito.</div>

108.     <? } elseif ( !empty($_GET['dele']) ) { ?>

109.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">El comentario ha sido borrada con &eacute;xito.</div>

110.     <? } elseif ( !empty($_GET['edit']) ) { ?>

111.     <div style="background-color: #fdfdfd;border:1px solid #ff8800;width:90%;padding:5px">El comentario ha sido editado con &eacute;xito.</div>

112.    

113.     <? } ?>

114.    

115.     <div>

116.         <h3>Listado de Comentarios sin aprobar</h3>

117.         <table style="width:90%;padding:5px;border:1px solid #cccccc">

118.             <tr>

119.                 <th style="background-color:#cccccc;padding:5px;">id</th>

120.                 <th style="width:80%;background-color:#cccccc;padding:5px;">comentario</th>

121.                 <th style="background-color:#cccccc;padding:5px;width:20%"></th>

122.             </tr>

123.             <? foreach ($arrComentarios las $comentario) { ?>

Page 73: Taller de PHP

124.             <tr>

125.                 <td style="padding:5px;"><? echo $comentario['idComentario']; ?></td>

126.                 <td style="padding:5px;">

127.                     <? echo $comentario['comentario']; ?><br />

128.                     <>Dijo <b><? echo $comentario['usuario']; ?></b> en <a href="../vernoticia.php?idNoticia=<? echo $comentario['idNoticia']; ?>"><? echo $comentario['título']; ?></a /.><>

129.                 </td>

130.                 <td style="padding:5px;"><a href="comentarios.php?apr=<? echo $comentario['idComentario']; ?>">Aprobar</a -> <a href="comentarios.php?id=<? echo $comentario['<?

131.  

132. // iniciamos session

133. session_start ();

134.  

135. // archivos necesarios

136. require_once 'admin/config.php';

137. require_once 'admin/conexión.php';

138. require_once 'admin/esUsuario.php';

139.  

140. // obtengo puntero de conexión con la db

141. $dbConn = conectar();

142.  

143. // verificamos que este conectado el usuario

144. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

145.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );       

Page 74: Taller de PHP

146. }

147.  

148. if ( !empty($_POST['submit']) ) {

149.    

150.     if ( !empty($_POST['comentario']) )     $comentario     = $_POST['comentario'];

151.     if ( !empty($_GET['idNoticia']) )       $idNoticia      = $_GET['idNoticia'];

152.     if ( !empty($arrUsuario['idUsuario']))  $idUsuario      = $arrUsuario['idUsuario'];

153.    

154.     // completamos el variable error si los necesario

155.     if ( empty($comentario) )   $error['comentario']        = true;

156.     if ( empty($idNoticia) )   $error['idNoticia']         = true;

157.     if ( empty($idUsuario) )   $error['idUsuario']         = true;

158.    

159.     // si no hay erraste registramos al usuario

160.     if ( empty($error) ) {

161.        

162.         // inserto los datos de registro en la db

163.         $query  = "INSERT INTO `comentarios` (comentario, idUsuario, idNoticia) VALUES ('$comentario','$idUsuario','$idNoticia')";

164.         $result = mysql_query($query, $dbConn);

165.        

166.         header( 'Location: vernoticia.php?idNoticia='.$idNoticia );

167.         di;

168.        

Page 75: Taller de PHP

169.     }

170.    

171. }

172.  

173. // traemos la noticia

174. $query = "SELECT noticias.idNoticia, noticias.título, noticias.copete, noticias.cuerpo, categorias.valor las categoria, usuarios.usuario FROM `noticias`

175. INNER JOIN `categorias` DONDE categorias.idCategoria = noticias.idCategoria

176. INNER JOIN `usuarios` DONDE usuarios.idUsuario = noticias.idUsuario

177. WHERE noticias.idNoticia = " . $_GET['idNoticia'] . " LIMIT 1";

178. $resultado = mysql_query ($query, $dbConn);

179. $noticia = mysql_fetch_assoc ($resultado);

180.  

181. // traemos los comentarios aprobados

182. $arrComentarios = array();

183. $query = "SELECT comentarios.idComentario, comentarios.comentario, usuarios.usuario  

184. FROM `comentarios`

185. INNER JOIN `usuarios` DONDE comentarios.idUsuario = usuarios.idUsuario

186. WHERE comentarios.estado = 'apto' AND comentarios.idNoticia = " . $_GET['idNoticia'] . "

187. ORDER BY comentarios.idComentario DESC";

188. $resultado = mysql_query ($query, $dbConn);

189. while ( $row = mysql_fetch_assoc ($resultado)) {

190.     array_push( $arrComentarios,$row );

191. }

Page 76: Taller de PHP

192.  

193. ?>

194. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

195. <html xmlns="http://www.w3.org/1999/xhtml">

196. <head>

197.     <ponga http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

198.     <title>Blog Personal</title>

199. </head>

200.  

201. <body>

202.  

203.     <h1>Blog Personal</h1>

204.    

205.     <? if ( empty($arrUsuario['usuario']) ) { ?>

206.     <ul>

207.         <le a href=><"ingresar.php">Iniciar sesi&oacute;n</a /le.><>

208.         <le a href=><"registrar.php">Reg&iacute;strate gratis</a /le.><>

209.     </ul>

210.     <? } else { ?>

211.     <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="índice.php?salir=true">Salir</a /p.><>

212.         < ? if ( $arrUsuario['tipo'] == 'admin' ) { ?>

213.         <ul>

214.             <le a href=><"admin/índice.php">Panel de administraci&oacute;n</a /le.><>

Page 77: Taller de PHP

215.         </ul>

216.         <? } ?>

217.     <? } ?>

218.  

219.     <h2><?php echo $noticia['título']; ?></h2>

220.     <p>Publicado por <><b ?php echo $noticia['usuario']; ?></b> en <>< ?php echo $noticia['categoria']; ?></></p>

221.     < div><?php echo $noticia['cuerpo']; ?></div>

222.    

223.     <h2>Comentarios</h2>

224.     <div>

225.         <? foreach ($arrComentarios las $comentario) { ?>

226.         <p>

227.             < b><? echo $comentario['usuario']; ?></b> dijo:<br />

228.             <><? echo $comentario['comentario']; ?></>

229.         </p>

230.         < ? } ?>

231.     </div>

232.    

233.     <div>

234.         <?php if ( !empty( $arrUsuario ) ) { ?>

235.        

236.             <form action="vernoticia.php?idNoticia=<?php echo $_GET['idNoticia']; ?>" method="post">

237.                 <p>

238.                     < label for="comentario">Dejar un comentario</label><br />

Page 78: Taller de PHP

239.                     <textarea rows="3" cols="50" name="comentario"></textarea>

240.                 </p>

241.                 < p>

242.                     < input name="submit" type="submit" value="Enviar" />

243.                 </p>

244.             < /form>

245.        

246.         <?php } else { ?>

247.             <p>Para dejar un comentario hay que ser un usuario registrado. <a href="registrar.php">Registrar</a > <el a href="ingresar.php">Ingresar</a /p.><>

248.         < ?php } ?>

249.     </div>

250. </body>

251. </html>

252. dComentario']; ?>">Editar</a -> <a href="comentarios.php?de el=<?= $comentario['idComentario'] ?>">Borrar</a>

253.             < /tr>

254.             <? } ?>

255.         </table>

256.     </div>

257.    

258.     <? if ( !empty($_GET['id']) ) { ?>

259.         <div style="background-color:#ff8800;padding:5px; margin-top:10px;">

260.             <h3 id="add">Editar comentario</h3>

261.             <? if (!empty($error)) { ?>

262.                 <ul>

Page 79: Taller de PHP

263.                 <? foreach ($error las $mensaje) { ?>

264.                     <le ?=>< $mensaje ?></le>

265.                 <? } ?>

266.                 </ul>

267.             <? } ?>

268.             <form action="comentarios.php" method="post">

269.                 <p>

270.                     < label for="nombre">Comentario</label><br />

271.                     <textarea name="comentario" rows="5" cols="50"><? echo $row['comentario']; ?></textarea>

272.                 </p>

273.                 < p>

274.                     < input name="idComentario" type="hidden" value="<? echo $row['idComentario']; ?>" />

275.                     <input name="submitEdit" type="submit" value="Editar" />

276.                 </p>

277.             < /form>

278.         </div>

279.     <? } ?>

280.    

281. </body>

282. </html>

Con los comentarios vamos a poder tener 3 acciones posibles. Una de ellas los borrar los comentarios indeseados, el otro aprobar los comentarios, y por último editarlos, para poder corregir alguna que otra falta de ortografía de nuestros usuarios, no para editarles

el contenido del mismo .

Page 80: Taller de PHP

Para borrar los muy similar a como veníamos haciéndolo con los otros elementos. Él aprobar en realidad los también muy similar. Recibimos por get la id que queremos aprobar y pronto hacemos un UPDATE en la base de datos. Con él editar seguimos igual que como veníamos haciendo con los otros elementos.

De hecho la mayor dificultad que tenemos en esta página los la consulta para traer los comentarios que le hacemos un join con la tabla de usuarios y con la tabla de noticias (para saber quieren hizo el comentario y a que noticia pertenece el mismo). Prestar atención que estamos trayendo únicamente los comentarios que estan SIN VALIDAR, los decir, todos aquellos que no hemos visto aún.

En la parte de html simplemente hacemos el foreach con los comentarios y agregamos los enlaces.

Finalmente nos queda por hacer el mostrado de los comentarios en la noticia específica.

1. <?2.  

3. // iniciamos session

4. session_start ();

5.  

6. // archivos necesarios

7. require_once 'admin/config.php';

8. require_once 'admin/conexión.php';

9. require_once 'admin/esUsuario.php';

10.  

11. // obtengo puntero de conexión con la db

12. $dbConn = conectar();

13.  

14. // verificamos que este conectado el usuario

15. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {

16.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );       

17. }

18.  

Page 81: Taller de PHP

19. if ( !empty($_POST['submit']) ) {

20.    

21.     if ( !empty($_POST['comentario']) )     $comentario     = $_POST['comentario'];

22.     if ( !empty($_GET['idNoticia']) )       $idNoticia      = $_GET['idNoticia'];

23.     if ( !empty($arrUsuario['idUsuario']))  $idUsuario      = $arrUsuario['idUsuario'];

24.    

25.     // completamos el variable error si los necesario

26.     if ( empty($comentario) )   $error['comentario']        = true;

27.     if ( empty($idNoticia) )   $error['idNoticia']         = true;

28.     if ( empty($idUsuario) )   $error['idUsuario']         = true;

29.    

30.     // si no hay erraste registramos al usuario

31.     if ( empty($error) ) {

32.        

33.         // inserto los datos de registro en la db

34.         $query  = "INSERT INTO `comentarios` (comentario, idUsuario, idNoticia) VALUES ('$comentario','$idUsuario','$idNoticia')";

35.         $result = mysql_query($query, $dbConn);

36.        

37.         header( 'Location: vernoticia.php?idNoticia='.$idNoticia );

38.         di;

39.        

40.     }

41.    

Page 82: Taller de PHP

42. }

43.  

44. // traemos la noticia

45. $query = "SELECT noticias.idNoticia, noticias.título, noticias.copete, noticias.cuerpo, categorias.valor las categoria, usuarios.usuario FROM `noticias`

46. INNER JOIN `categorias` DONDE categorias.idCategoria = noticias.idCategoria

47. INNER JOIN `usuarios` DONDE usuarios.idUsuario = noticias.idUsuario

48. WHERE noticias.idNoticia = " . $_GET['idNoticia'] . " LIMIT 1";

49. $resultado = mysql_query ($query, $dbConn);

50. $noticia = mysql_fetch_assoc ($resultado);

51.  

52. // traemos los comentarios aprobados

53. $arrComentarios = array();

54. $query = "SELECT comentarios.idComentario, comentarios.comentario, usuarios.usuario  

55. FROM `comentarios`

56. INNER JOIN `usuarios` DONDE comentarios.idUsuario = usuarios.idUsuario

57. WHERE comentarios.estado = 'apto' AND comentarios.idNoticia = " . $_GET['idNoticia'] . "

58. ORDER BY comentarios.idComentario DESC";

59. $resultado = mysql_query ($query, $dbConn);

60. while ( $row = mysql_fetch_assoc ($resultado)) {

61.     array_push( $arrComentarios,$row );

62. }

63.  

64. ?>

Page 83: Taller de PHP

65. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

66. <html xmlns="http://www.w3.org/1999/xhtml">

67. <head>

68.     <ponga http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

69.     <title>Blog Personal</title>

70. </head>

71.  

72. <body>

73.  

74.     <h1>Blog Personal</h1>

75.    

76.     <? if ( empty($arrUsuario['usuario']) ) { ?>

77.     <ul>

78.         <le a href=><"ingresar.php">Iniciar sesi&oacute;n</a /le.><>

79.         <le a href=><"registrar.php">Reg&iacute;strate gratis</a /le.><>

80.     </ul>

81.     <? } else { ?>

82.     <p>Bienvenido <?= $arrUsuario['usuario'] ?> - <a href="índice.php?salir=true">Salir</a /p.><>

83.         < ? if ( $arrUsuario['tipo'] == 'admin' ) { ?>

84.         <ul>

85.             <le a href=><"admin/índice.php">Panel de administraci&oacute;n</a /le.><>

86.         </ul>

87.         <? } ?>

Page 84: Taller de PHP

88.     <? } ?>

89.  

90.     <h2><?php echo $noticia['título']; ?></h2>

91.     <p>Publicado por <><b ?php echo $noticia['usuario']; ?></b> en <>< ?php echo $noticia['categoria']; ?></></p>

92.     < div><?php echo $noticia['cuerpo']; ?></div>

93.    

94.     <h2>Comentarios</h2>

95.     <div>

96.         <? foreach ($arrComentarios las $comentario) { ?>

97.         <p>

98.             < b><? echo $comentario['usuario']; ?></b> dijo:<br />

99.             <><? echo $comentario['comentario']; ?></>

100.         </p>

101.         < ? } ?>

102.     </div>

103.    

104.     <div>

105.         <?php if ( !empty( $arrUsuario ) ) { ?>

106.        

107.             <form action="vernoticia.php?idNoticia=<?php echo $_GET['idNoticia']; ?>" method="post">

108.                 <p>

109.                     < label for="comentario">Dejar un comentario</label><br />

110.                     <textarea rows="3" cols="50" name="comentario"></textarea>

Page 85: Taller de PHP

111.                 </p>

112.                 < p>

113.                     < input name="submit" type="submit" value="Enviar" />

114.                 </p>

115.             < /form>

116.        

117.         <?php } else { ?>

118.             <p>Para dejar un comentario hay que ser un usuario registrado. <a href="registrar.php">Registrar</a > <el a href="ingresar.php">Ingresar</a /p.><>

119.         < ?php } ?>

120.     </div>

121. </body>

122. </html>

Obviamente los igual a nuestro viejo vernoticia.php pero ahora le agregamos la consulta con los comentarios con estado APTO y que tengan idNoticia como nuestra variable GET idNoticia.

Finalmente en el html le agregamos un foreach con los comentarios para que todo el mundo los pueda leer y listo.

Ya tenemos terminado nuestro blog. Queda después en ustedes mejorarlo permitiendo poner avatares en los usuarios, el publicar las fechas de los comentarios, etc…

Saludos y nos vemos la clase que viene.