Вы находитесь на странице: 1из 85

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.cmo! El da


de hoy veremos la introduccin para crear un blog desde cero. La idea de esta etapa
final del curso, los que vean ms el menos cmo se relaciona todo el que estuvimos
viendo hasta el momento.
En qu consiste nuestro blog? Bsicamente el que vamos a hacer los uno sistema que
muestre noticias, ordenadas por fecha cronolgicamente 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 annimo, 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 comn 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 prcticos.

Diferente caractersticas del contenido


El contenido del sitio va a estar separado por categoras por el que las noticias no solo
se debern de mostrar cronolgicamente sino que tambin se tendrn que poder filtrar
por categoras.

FrontEnd y BackEnd. Qu somos?

Esto ms 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 annimo
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 ms 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 Creacin


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.
Bsicamente vamos a tener cuatro tablas. Una de usuarios, otra de noticias, una tercera
con las categoras 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

idUsuario int(11)
usuario

Null Key Default Extra


PRI NULL

varchar(50)

password char(32)
email

varchar(50)

tipo

enum(comun,admin
)

comun

coche_increment

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, tambin 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 limitrselo 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 codificacin md5 y los cdigos 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

idNoticia

int(11)

ttulo

varchar(50)

copete

varchar(255)

cuerpo

text

idUsuario

int(11)

idCategoria

int(11)

fPublicacion

timestamp

fCreacion

timestamp

Null Key Default Extra


PRI NULL

coche_increment

fModificacion

timestamp

Sintaxis sql para crear la tabla:


1. CREATE TABLE `noticias` (
2. `idNoticia` INT( 11 ) UNSIGNED NOT NULL COCHE_INCREMENT
PRIMARY KEY ,
3. `ttulo` 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, tambin tenemos una primary key en idNoticia
para identificar a cada una, tenemos una relacin 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 categoras, una noticia puede tener una suela
categora pero una categora puede tener muchas noticias.
Y tambin tenemos tres campos de fechas, uno para la fecha de publicacin de la
noticia, otra para la fecha en cuanto se cre y finalmente cuando se modific.
Para la tabla de categoras vamos a tener:
Tabla: categoras
Field

Type

idCategoria

int(11)

valor

varchar(50)

Null Key Default Extra


PRI NULL

coche_increment

Sql:
1. CREATE TABLE `categorias` (
2. `idCategoria` INT( 11 ) UNSIGNED NOT NULL COCHE_INCREMENT
PRIMARY KEY ,
3. `valor` VARCHAR( 50 ) NOT NULL

4. ) ENGINE = MYISAM ;

Y finalmente la tabla de comentarios:


Tabla: comentarios
Field

Type

idComentari
int(11)
o

Null Key Default


PRI NULL

Extra
coche_increme
nt

comentario text
idUsuario

int(11)

idNoticia

int(11)

estado

enum(sin
validar,apto)

fCreacion

timestamp

sin
validar

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 tambin una relacin 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 todava no estamos en esa disyuntiva) y los
mismos aparecern en un listado general para que un admin los apruebe el los borre.
Y por ltimo tenemos la fecha de creacin 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 codificacin del mismo.

Taller de PHP: Nuestro Blog Registro


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

Hola! Cmo les va? En la clase de hoy vamos a ver cmo hacer
para crear un formulario para que se registren nuestros usuarios.
Por un lado vamos a tener algunos archivos en la carpeta raz, pero por otro vamos a
tener una carpeta llamada admin que los donde va a estar nuestro backend. En esta
carpeta tambin tendremos dos archivos adicionales que somos necesarios antes de
arrancar.

Cmo vamos a organizar nuestros archivos


La estructura de archivos por le momento ser:
+ admin

config.php
conexin.php

ndice.php
registrar.php
El primer archivo que vamos a ver, config.php, los uno archivo de configuracin, en l
cual guardaremos constantes que vamos a necesitar al largo del sitio. l misma va a
contener:
admin/config.php
1. <?php
2.
3. // constantes de conexin de db
4. define( DB_SERVER, localhost );
5. define( DB_NAME, blogit);
6. define( DB_USER, root);

7. define( DB_PASS, );
8.
9. ?>
El mismo deber de estar completo con los datos de su base de datos.
El siguiente archivo, conexin.php, contiene una funcin que devuelve false el l
puntero a la conexin con la base de datos, puesto que en todas el casi todas las
pginas de nuestro sitio necesitaremos una conexin con la db, los prctico mantenerla
dentro de una funcin.
admin/conexin.php
1. <?php
2.
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.

?>

Fjense que estamos usando las constantes que agregamos en el archivo config.php,
esto los prctico a la hora de tener que cambiar de base de datos, el migrar el sitio, solo
tendremos que modificar el archivo de configuracin.
Listo, ya tenemos nuestros dos archivos antes de comenzar l proceso de registro.
En el archivo ndice.php tendremos una presentacin por el momento, donde se podr
optar por registrarse el ingresar (ms adelante tendremos las noticias, pero todava
estamos muy verdes).
ndice.php
1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.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>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>

Fjense que en el body hay una sentencia php, los uno if preguntando si no esta vaca
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 lgica
de nuestro registro. Primero les muestro todo el cdigo y despus les voy explicando
qu los el que hace cada cosa.
1. <?php

2.
3. // archivos necesarios
4. require_once admin/config.php;
5. require_once admin/conexin.php;
6.
7. // obtengo puntero de conexin 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']) )
= $_POST['usuario'];

$usuario

15.

$password

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

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

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

$email

18.
19.

// completamos el variable error si los necesario

20.

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

21.
22.

if ( empty($password) ) $error['password']
= Los obligatorio completar la contrasea;
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) ) {

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/xhtml1strict.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)) { ?>

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 />
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 cdigo 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. Fjense que uso <?= $mensaje ?>, eso los equivalente
a hacer <? echo $mensaje; ?>, los muy prctico a la hora de tener que imprimir una
suela linea el algo en el medio de html.
Pronto tenemos el formulario, la accin del mismo los sobre el mismo archivo
registrar.php, de esta forma podemos marcar en el momento si hubo algn 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 cdigo php.
Primero incluimos nuestros dos archivos necesarios, config y conexin, y llamamos a la
funcin conexin 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
mostrrsela al usuario en caso de erraste. Pronto definimos nuestro array $error con los
mensajes de error en caso de que los haya.
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 cmo nuestros usuarios se podan


registrar en nuestro sitio, en la clase de hoy vamos a ver cmo van a poder iniciar
sesin. Hay una cosita que me qued pendiente de la clase anterior y los explicar cmo
los que hice la consulta para ingresar los datos del usuario a travs del sistema de
registro.
Si prestan atencin, en donde va la contrasea le agregu una funcin que se llama
md5(), esta funcin el que nos permite los mantener las contraseas encriptadas, de
forma que ninguna persona pueda llegar a conocer jams la contrasea de un usuario.
Los muy comn en los sitios serios utilizar este mtodo de encriptacin de contrasea.
Una forma de verificar que esto se este utilizando en los sitios los con l proceso de
recuperacin de la misma en caso de olvido. Si les envan su contrasea tal cual la
escribieron los porque no se est encriptando, en cambio si les envan una nueva
contrasea el la posibilidad de escribirla nuevamente, los muy probable que estemos
encriptndola. 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, $conexin )
{

2.
3. // verifica que esten los dos campos completos.
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, $conexin);
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 funcin a la que le pasaremos por parmetros l nombre de usuario, la


contrasea (ya encriptada con md5) y el puntero de conexin. Bsicamente el que
buscamos con esta funcin los que nos devuelva un array con los datos del usuario en
la base de datos en caso de que complete bueno la informacin solicitada el FALSE en
caso de que no exista el la contrasea no coincida.
El primero que hacemos los verificar que tanto $usuario como $password no se
encuentren vacos. Pronto hacemos una consulta a la base de datos tratando de buscar
toda la informacin del usuario correspondiente con $usuario.
Pronto de esto verificamos que la contrasea ingresada por parmetro $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 ms adelante veremos la forma de crear una funcin que
verifique esto, el si no la solucin 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 sesiones
2. session_start ();
3.
4. // archivos necesarios
5. require_once 'admin/config.php';
6. require_once 'admin/conexin.php';
7. require_once 'admin/esUsuario.php';
8.
9. // obtengo puntero de conexin 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']) )
$_POST['usuario'];

$usuario

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

$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 contrasea';

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']

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

= $arrUsuario['usuario'];
=

40.
41.

header('Location: ndice.php');

42.

di;

43.
44.

} else {

45.
$error['noExiste']
= 'l nombre de usuario
el contrasea no coinciden';
46.

47.
48.

49.
50.

51.
52.

?&gt;

53.

<h1>Inicio de sesin</h1>

54.

<ul>

55.
56.

<le /le.><>
</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">Contrasea</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 ms que nada.
Vamos a ir explicndolo 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 ms el nuevo que creamos reciente para verificar el usuario.
Creamos el puntero a la base de datos y mediante un if verificamos que no estemos
vacos ni $_SESSION['usuario'] ni $_SESSION['password'], las sesiones estas
todava no las creamos, pero lo habremos en caso de que se enve 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 sesin, el que hacemos los
verificar si no estamos vacas ambas sesiones, en caso positivo, verificamos mediante la
utilizacin de nuestra funcin esUsuario si pertenece a un usuario registrado, los decir
si el usuario y contrasea coinciden.
Nuevamente, en caso afirmativo redireccionamos al home de nuestro sitio, puesto que
no tendra 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 pgina 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 vaco, creamos la variable de
$error . Pasada esta verificacin, vamos a ver si los datos ingresados en el formulario
realmente corresponden con un usuario registrado en nuestro sitio.
Para ello, utilizamos nuevamente nuestra funcin 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 funcin
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.
Fjense que en el segundo parmetro de la funcin nuevamente le estoy pasando md5() a
$password, en este caso el estoy haciendo porque la base de datos ya tenemos la
contrasea 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 funcin en esta misma
pgina, no fui necesario pasarle md5 puesto que la sesin la vamos a guardar encriptada
tambin.
Bueno, ya pas todos los chequeos el envo del formulario, ya verificamos que los datos
ingresados por el usuario estemos completos, correspondan a un usuario de la base de
datos y adems coinciden las contraseas de la db con las del post, los momento de
crear las sesiones.
Vamos a crear dos sesiones, una sesin que va a contener l nombre de usuario y otra
con la contrasea encriptada. Pronto de esto, redireccionamos al ndice.php, puesto que
un usuario logueado no tendra que por que seguir viendo el formulario de ingreso.
Finalmente tenemos nuestra ndice.php modificada
1. // iniciamos session

2. session_start ();
3.
4. // archivos necesarios
5. require_once 'admin/config.php';
6. require_once 'admin/conexin.php';
7. require_once 'admin/esUsuario.php';
8.
9. // obtengo puntero de conexin 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 sesin 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.><>

<le a href=><"ingresar.php">Iniciar sesin</a

29.
<le a href=><"registrar.php">Regstrate
gratis</a /le.><>
30.

</ul>

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

< ul>

33.
<le a href=><"admin/ndice.php">Panel de
administracin</a /le.><>
34.

</ul>

Esta bastante ms completa ahora la ndice de nuestro sitio, veamos el codigo php.
Iniciamos sesin, para ver si el usuario esta conectado, agregamos los archivos
requeridos y creamos el puntero de conexin. 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 sesin
que tenga el usuario, para que el desloguee.
Pronto nos fijamos si tenemos sesiones, en caso de que estemos, asignamos a
$arrUsuario la funcin esUsuario(). Y eso los todo nuestro cdigo php.
En el html agregamos tambin un par de if ms. El primero los uno if verificando si
existe el usuario, en caso de que sea un usuario sin iniciar sesin le mostramos el
ingresar el registrarse. En caso de que sea un usuario conocido, le damos la bienvenida
y la posibilidad de cerrar sesin.
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

En la clase de hoy vamos a ver puntualmente un administrador de


categoras para nuestro sitio. Vamos a necesitar las mismas para que las diferente
publicaciones de nuestro blog se puedan ubicar en diferente categoras 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 cmo hacer un ABM de
categoras, 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 session
2. session_start ();
3.
4. // archivos necesarios
5. require_once 'config.php';
6. require_once 'conexin.php';
7. require_once 'esUsuario.php';
8.
9. // obtengo puntero de conexin 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.

?&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
Categoras</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 conexin 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 vaco el no los uno administrador, en caso
de que esta condicin se cumpla, quiere decir que, el no estoy logueado el soy un
usuario comn, por el que no debera de tener acceso a esta seccin, 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, ms
abajo, en el html tenemos la bienvenida al usuario y l enlace con la opcin 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 categoras
que los el que vamos a empezar a ver hoy.
Por el momento nuestro archivo de categoras va a tener el siguiente:
admin/categorias.php
1. // iniciamos session
2. session_start ();

3.
4. // archivos necesarios
5. require_once 'config.php';
6. require_once 'conexin.php';
7. require_once 'esUsuario.php';
8.
9. // obtengo puntero de conexin 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']) )
$_POST['nombre'];

$nombre

29.
30.

// completamos el variable error si los necesario

31.
if ( empty($nombre) )
$error['nombre']
=
'Los obligatorio completar l nombre de la categora';
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;

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>Categoras</h2>

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

<div>

61.

<h3>Listado de Categoras</h3>

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

<tbody>

64.

<tr>

65.
<th style="backgroundcolor:#cccccc;padding:5px;">id</th>
66.
<th style="padding: 5px; width: 90%; backgroundcolor: #cccccc;">categora</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 categora</h3>

78.
<form action="categorias.php"
method="post"><label for="nombre">Nombre de la
categora</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 verificacin la vamos a tener a lo largo de todos nuestros archivos
dentro del panel de admin.
Pronto tenemos la comprobacin de si se envi el formulario para agregar nuevas
categoras a nuestro sitio. Las comprobaciones somos muy similares a las que usamos
en la registracin del usuario.
Finalmente tenemos una consulta a la base de datos para mostrar todas las categoras
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
categoras y les paso el adjunto de los archivos incluyendo el abm de categoras.
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


cmo hacer las altas de categoras para nuestro sitio. En la clase de hoy vamos a ver
cmo editar las categoras y como borrarlas.

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 'conexin.php';
9. require_once 'esUsuario.php';
10.
11.

// obtengo puntero de conexin 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 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.
41.

// definimos las variables


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

$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

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.
$nombre

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

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

array_push( $arrCategorias,$row );
}

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.

99.
100.

?>

101.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.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.
106.

<title>Blog Personal</title>
</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>

119.
120.

<? } ?>

121.
122.
123.

<div>
<h3>Listado de Categor&iacute;las</h3>

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

<tr>

126.
<th style="backgroundcolor:#cccccc;padding:5px;">id</th>
127.
<th style="width:90%;backgroundcolor:#cccccc;padding:5px;">categor&iacute;a /th.<>
128.
<th style="backgroundcolor:#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.
138.

</table>
</div>

139.
140.

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

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.
method="post">

<form action="categorias.php"

151.
152.

<p>

153.
< label for="nombre">Nombre
de la categor&iacute;a /label<><br />
154.
type="text" value="" />
155.

</p>

156.

< p>

<input name="nombre"

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

</p>

159.

< /form>

160.
161.

</div>
<? } ?>

162.
163.

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

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

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.
method="post">

<form action="categorias.php"

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

</div>
<? } ?>

185.
186.

</body>

187.

</html>

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 condicin 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 categora que vimos la clase anterior y a
continuacin, nos fijamos si se envi otro post pero ahora los submitEdit, l cual va a
llevar los datos para editar la categora. En caso de que estemos todos los campos
obligatorios, editamos la categora.
Tango en la edicin como en el borrado, pronto de realizar los cambios en la base de
datos, redireccionamos a la misma pgina pero con una variable get que va a informar
que la accin se realiz correctamente.
Bueno, pronto de la edicin tenemos la consulta para traer el listado de categoras y
finalmente una nueva condicin preguntando si tenemos la variable get id, esta variable
va a contener la id de la categora que queremos editar, para que podamos rellenar el
formulario de edicin con los datos de la misma de la base de datos, por el que, si se
cumple la condicin quiere decir que queremos editar una categora y hacemos la
consulta para traer toda la informacin guardada en la db.
Pronto pasamos al html, tenemos varias condiciones tambin. 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 accin se realizo
con xito.
Pronto de esto, mostramos el listado con las categoras, fjense que tenemos una
columna al final que contiene dos enlaces, uno para editar la categora, y el otro para
borrarla. Los dos enlaces apuntan a la misma pgina pero con diferente variables get,
dependiendo si tenemos esas variables los que vamos a realizar las acciones que
expliqu ms llega. Ojo, los muy comn al principio, cuando somos principiantes
pisarnos las variables con nombres iguales, tienen que prestar mucha atencin de elegir
variables con diferente nombres a lo largo de todo nuestro script, en este caso el archivo
admin/categorias.php.
A continuacin tenemos dos condiciones nuevas ms (la condicin que pregunta si hay
erraste no cuenta, ya la expliqu la clase anterior :p), una que pregunta si esta vaca la
variable get ID, en cuyo caso mostramos el formulario para agregar una nueva
categora, y la siguiente condicin los si NO esta vaca, entonces mostramos el
formulario de edicin.
Presten atencin que en el formulario de edicin agregamos un campo input hidden con
la id de la categora que queremos editar. Esta va a ser necesaria para poder hacer el
UPDATE en la base de datos.

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 cmo dar de alta noticias y mostrarlas en la home. Una
particularidad a diferencia del alta de las categoras los que ahora para dar de alta una
noticia, tambin vamos a necesitar de la tabla de categoras y la de usuarios, por el que
ya empezamos a interactuar entre las diferente tablas.
Antes de continuar, tengo que hacer una correccin 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 'conexin.php';
9. require_once 'esUsuario.php';

10.
11.

// obtengo puntero de conexin 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/xhtml1strict.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.
31.

<title>Blog Personal</title>
</head>

32.
33.

<body>

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 cdigo 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 'conexin.php';
9. require_once 'esUsuario.php';
10.
11.

// obtengo puntero de conexin 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.

// agregamos una categoria en la db

26.

// si se envio el formulario

27.

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

28.
29.

// definimos las variables

30.
$ttulo

if ( !empty($_POST['ttulo']) )
= $_POST['ttulo'];

31.
$copete

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

32.
$cuerpo

if ( !empty($_POST['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($ttulo) )
$error['ttulo']
= 'Los obligatorio completar el&t iacute;tulo de la
noticia';

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`
(ttulo,copete,cuerpo,idCategoria,idUsuario,fCreacion,
fModificacion,fPublicacion) VALUES
('$ttulo','$copete','$cuerpo','$idCategoria','$idUsua
rio','$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();

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

array_push( $arrCategorias,$row );
}

66.
67.

// traemos listado de noticias

68.

$arrNoticias = array();

69.
$query = "SELECT idNoticia, ttulo 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/xhtml1strict.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.
80.

<title>Blog Personal</title>
</head>

81.
82.

<body>

83.
84.

<h1>Blog Personal</h1>

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

<div>
<h3>Listado de Noticias</h3>

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

<tr>

95.
<th style="backgroundcolor:#cccccc;padding:5px;">id</th>
96.
<th style="width:90%;backgroundcolor:#cccccc;padding:5px;">t&iacute;tulo</th>
97.
<th style="backgroundcolor:#cccccc;padding:5px;width:10%"></th>
98.

</tr>

99.
$noticias) { ?>

<? foreach ($arrNoticias las

100.

<tr>

101.
<td style="padding:5px;"><? echo
$noticias['idNoticia']; ?></td>
102.
<td style="padding:5px;"><? echo
$noticias['ttulo']; ?></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>

104.

< /tr>

105.

<? } ?>

106.
107.

</table>
</div>

108.
109.

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

110.

<div>

111.
noticia</h3>

<h3 id="add">Agregar nueva

112.

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

113.

<ul>

114.
{ ?>

<? foreach ($error las $mensaje)

115.

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

116.

<? } ?>

117.

</ul>

118.

<? } ?>

119.
method="post">

<form action="noticias.php"

120.
121.

<p>

122.
< label
for="ttulo">T&iacute;tulo de la noticia</label><br />
123.
type="text" value="" />
124.

</p>

125.

< p>

<input name="ttulo"

126.
< label
for="idCategoria">Categora</label><br />
127.

<select name="idCategoria">

128.
<option
value="">Seleccione una categora</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 publicacin (aaaa-mm-dd
hh:mm:ss) Ej: 2008-10-29 17:20:00 </label><br />
137.
type="text" value="" />
138.

</p>

139.

< p>

<input name="fPublicacion"

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" />

149.

</p>

150.

< /form>

151.
152.

</div>
<? } ?>

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 opcin 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 ningn 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 vaca, la fecha de
publicacin 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 tambin traemos todas las categoras. Esto los
as porque usaremos el listado de categoras para elegir la categora de cada noticia.
Si prestamos atencin a la parte del formulario, vamos a ver cmo ahora tenemos un
SELECT BOX con un FOREACH que va a recorrer todas las categoras 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 categoras.
Finalmente vamos a modificar nuestra home para mostrar las noticias que vamos
agregando.
1. <?
2.
3. // iniciamos session
4. session_start ();
5.

6. // archivos necesarios
7. require_once 'admin/config.php';
8. require_once 'admin/conexin.php';
9. require_once 'admin/esUsuario.php';
10.
11.

// obtengo puntero de conexin 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 sesin
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, ttulo, copete FROM
`noticias` WHERE fPublicacion < '".date('Y-m-d H::se
)."' ORDER BY fPublicacion DESC";
30.

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

31.

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

32.
33.

array_push( $arrNoticias,$row );
}

34.
35.
36.

?>

37.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.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.
42.

<title>Blog Personal</title>
</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.><>

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['ttulo']; ?></a /h3.><>
70.

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

71.

< /div>

72.

<? } ?>

73.

</body>

74.

</html>

El ms 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 publicacin 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 ttulo le agregu uno enlace a una nueva pgina, la misma va a tener la
noticia completa.

Bueno, eso los todo por hoy, la semana que viene vamos a ver cmo 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 da de hoy


vamos a ver cmo editar una noticia y cmo borrarla.
Si vienen siguiendo el taller ms el menos al da vern que no hay grandes diferencias
con respecto a las modificaciones y bajas de las categoras. 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 'conexin.php';
9. require_once 'esUsuario.php';
10.
11.

// obtengo puntero de conexin 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 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.

40.

// definimos las variables

41.
$ttulo

if ( !empty($_POST['ttulo']) )
= $_POST['ttulo'];

42.
$copete

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

43.
$cuerpo

if ( !empty($_POST['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($ttulo) )
$error['ttulo']
= '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'];

61.
$query = "INSERT INTO `noticias`
(ttulo,copete,cuerpo,idCategoria,idUsuario,fCreacion,
fModificacion,fPublicacion) VALUES
('$ttulo','$copete','$cuerpo','$idCategoria','$idUsua
rio','$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 edicin

71.

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

72.
73.

// definimos las variables

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

if ( !empty($_POST['ttulo']) )
= $_POST['ttulo'];

76.
$copete

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

77.
$cuerpo

if ( !empty($_POST['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

82.

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

83.

if ( empty($ttulo) )
$error['ttulo']
= '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 modificacin
y de publicacin
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 ttulo
= '$ttulo', copete = '$copete', cuerpo = '$cuerpo',
idCategoria = $idCategoria, idUsuario = $idUsuario,
fModificacion = '$fModificacion', fPublicacion =
'$fPublicacion' WHERE idNoticia = $idNoticia";
99.
100.

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

101.
header( 'Location: noticias.php?
edit=true' );
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.
114.

array_push( $arrCategorias,$row );
}

115.
116.

// traemos listado de noticias

117.

$arrNoticias = array();

118.
$query = "SELECT idNoticia, ttulo FROM
`noticias` ORDER BY idNoticia DESC";
119.

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

120.

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

121.
122.

array_push( $arrNoticias,$row );
}

123.
124.

// si tenemos una categoria puntual

125.

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

126.
127.

// traemos una categoria

128.
$query = "SELECT idNoticia, ttulo, 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/xhtml1strict.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.
139.

<title>Blog Personal</title>
</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

#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.
155.

<div>
<h3>Listado de Noticias</h3>

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

<tr>

158.
<th style="backgroundcolor:#cccccc;padding:5px;">id</th>
159.
<th style="width:90%;backgroundcolor:#cccccc;padding:5px;">t&iacute;tulo</th>
160.
<th style="backgroundcolor:#cccccc;padding:5px;width:10%"></th>
161.

</tr>

162.
$noticias) { ?>

<? foreach ($arrNoticias las

163.

<tr>

164.
<td style="padding:5px;"><? echo
$noticias['idNoticia']; ?></td>
165.
<td style="padding:5px;"><? echo
$noticias['ttulo']; ?></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.

<? } ?>

169.
170.

</table>
</div>

171.
172.

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

173.

<div>

174.
noticia</h3>

<h3 id="add">Agregar nueva

175.

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

176.

<ul>

177.
{ ?>

<? foreach ($error las $mensaje)

178.

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

179.

<? } ?>

180.

</ul>

181.

<? } ?>

182.
method="post">

<form action="noticias.php"

183.
184.

<p>

185.
< label
for="ttulo">T&iacute;tulo de la noticia</label><br />
186.
type="text" value="" />
187.

</p>

188.

< p>

<input name="ttulo"

189.
< label
for="idCategoria">Categora</label><br />
190.

<select name="idCategoria">

191.
<option
value="">Seleccione una categora</option>
192.
<option
value="">------------------------</option>

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 publicacin (aaaa-mm-dd
hh:mm:ss) Ej: 2008-10-29 17:20:00 </label><br />
200.
type="text" value="" />
201.

</p>

202.

< p>

<input name="fPublicacion"

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>

215.

<? } ?>

216.
217.

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

218.
<div style="backgroundcolor:#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.
method="post">

<form action="noticias.php"

228.

<p>

229.
< label
for="ttulo">T&iacute;tulo de la noticia</label><br />
230.
<input name="ttulo"
type="text" value="<? echo $row['ttulo']; ?>" />
231.

</p>

232.

< p>

233.
< label
for="idCategoria">Categora</label><br />
234.

<select name="idCategoria">

235.
<option
value="">Seleccione una categora</option>
236.
<option
value="">------------------------</option>
237.
<? foreach (
$arrCategorias las $categoria ) { ?>

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 publicacin (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>

258.
259.
260.

< /form>

261.
262.

</div>
<? } ?>

263.
264.

</body>

265.

</html>

Fjense que al archivo que tenamos 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 edicin, verificamos que estemos todos los datos
obligatorios y editamos.
En la parte del html el mismo, la nica grande diferencia con respecto a la edicin de
categoras 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 condicin, preguntando si la id de la categora que le corresponde coincide
con la id de categora 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.

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
categoras y la de usuarios.
Como en todas nuestras clases del blog primero voy a mostrar el cdigo y despus 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/conexin.php';
9. require_once 'admin/esUsuario.php';
10.
11.

// obtengo puntero de conexin 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'];

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.ttulo, 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.

?>

53.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.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.
58.

<title>Blog Personal</title>
</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.><>

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['ttulo']; ?></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.
83.

<div>
<?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>

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

< ?php } ?>


</div>

99.

</body>

100.

</html>

Que cosas nuevas tenemos ac?


Con el primero que nos encontramos los con una verificacin 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. Fjense 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 ponamos un STRING con el error a mostrar.
Bueno, si no tiene erraste, hacemos el insert en la base de datos.
A continuacin tenemos la consulta para traer la noticia, esta consulta los bastante ms
compleja que las que venamos usando, puesto que hace dos JOINS, uno con la tabla de
categoras y otro con la tabla de usuarios. De esta forma, en una suela consulta
obtenemos l nombre de la categora y l nombre de usuario. Recuerden que en la tabla
de noticias solo guardbamos las id de ambos. Esto nos permite estar siempre
actualizados en caso de que cambiemos l nombre de usuario el nombre de la categora
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.

Bueno, eso los todo por hoy, la clase que viene veremos cmo mostrar el listado de
comentarios aprobados por un admin en esta misma pgina, 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


despus les va a faltar diseo 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 opcin en el administrador y pronto agregaremos los comentarios
aprobados en la pgina 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 administracin. 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 'conexin.php';

9. require_once 'esUsuario.php';
10.
11.

// obtengo puntero de conexin 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.

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';

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.ttulo
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);

81.

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

82.
83.

array_push( $arrComentarios,$row );
}

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/xhtml1strict.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.
99.

<title>Blog Personal</title>
</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.><>

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="backgroundcolor:#cccccc;padding:5px;">id</th>
120.
<th style="width:80%;backgroundcolor:#cccccc;padding:5px;">comentario</th>
121.
<th style="backgroundcolor:#cccccc;padding:5px;width:20%"></th>
122.

</tr>

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

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['ttulo']; ?></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/conexin.php';

138.

require_once 'admin/esUsuario.php';

139.
140.

// obtengo puntero de conexin 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 );

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

di;

169.

170.
171.

172.
173.

// traemos la noticia

174.
$query = "SELECT noticias.idNoticia,
noticias.ttulo, 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.
191.

array_push( $arrComentarios,$row );
}

192.
193.

?>

194.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.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.
199.

<title>Blog Personal</title>
</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.><>

215.

</ul>

216.

<? } ?>

217.

<? } ?>

218.
219.

<h2><?php echo $noticia['ttulo']; ?></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.
234.

<div>
<?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 />

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

< ?php } ?>


</div>

250.

</body>

251.

</html>

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

< /tr>

254.

<? } ?>

255.
256.

</table>
</div>

257.
258.

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

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

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

261.

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

262.

<ul>

263.
{ ?>

<? foreach ($error las $mensaje)

264.

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

265.

<? } ?>

266.

</ul>

267.

<? } ?>

268.
method="post">

<form action="comentarios.php"

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

</div>
<? } ?>

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 ortografa de nuestros usuarios, no para editarles
el contenido del mismo

Para borrar los muy similar a como venamos hacindolo con los otros elementos. l
aprobar en realidad los tambin 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 venamos haciendo con los otros elementos.
De hecho la mayor dificultad que tenemos en esta pgina 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
atencin que estamos trayendo nicamente los comentarios que estan SIN VALIDAR,
los decir, todos aquellos que no hemos visto an.
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 especfica.
1. <?
2.
3. // iniciamos session
4. session_start ();
5.
6. // archivos necesarios
7. require_once 'admin/config.php';
8. require_once 'admin/conexin.php';
9. require_once 'admin/esUsuario.php';
10.
11.

// obtengo puntero de conexin 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'];
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.ttulo, 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.
62.

array_push( $arrComentarios,$row );
}

63.
64.

?>

65.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.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.
70.

<title>Blog Personal</title>
</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.

<? } ?>

88.

<? } ?>

89.
90.

<h2><?php echo $noticia['ttulo']; ?></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.
105.

<div>
<?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>

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

< ?php } ?>


</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 despus 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.

Вам также может понравиться