Академический Документы
Профессиональный Документы
Культура Документы
blog
PHP, Talleres, taller php, curso php, tutorial php, PHP clase 33
Type
idUsuario int(11)
usuario
varchar(50)
password char(32)
email
varchar(50)
tipo
enum(comun,admin
)
comun
coche_increment
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
coche_increment
fModificacion
timestamp
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)
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 ;
Type
idComentari
int(11)
o
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.
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.
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.
13.
14.
<? } ?>
15.
16.
<ul>
17.
<le a href>< =ingresar.php>Iniciar
sesión</a /><le>
18.
<le a href>< =registrar.php>Regí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.
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'];
18.
19.
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ña no
coincide;
25.
26.
27.
28.
if ( empty($error) ) {
29.
30.
31.
$query = INSERT INTO `usuarios`
(usuario,password,email) VALUES
($usuario,'.md5($password).,$email);
32.
33.
34.
35.
di;
36.
37.
38.
39.
40.
41.
?>
9.
10.
<h1>Registro de Usuario</h1>
11.
12.
13.
<ul>
14.
15.
16.
<? } ?>
17.
</ul>
18.
<? } ?>
19.
20.
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ñ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ñ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ó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í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:
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.
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.
17.
18.
19.
20.
?>
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.
13.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
14.
if ( esUsuario( $_SESSION['usuario'],
$_SESSION['password'] ) ) {
15.
16.
di;
17.
18.
19.
20.
// si se envio el formulario
21.
if ( !empty($_POST['submit']) ) {
22.
23.
24.
if ( !empty($_POST['usuario']) )
$_POST['usuario'];
$usuario
25.
if ( !empty($_POST['password']) )
$_POST['password'];
$password
26.
27.
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.
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.
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.
?>
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="<? if
( ! empty($usuario) ) echo $usuario; ?>" />
60.
61.
<label for="password">Contrasea</label>
62.
63.
<input name="password" type="password"
value="<? if ( ! empty($password) ) echo $password;
?>" />
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.
13.
if ( !empty($_GET['salir']) ) {
14.
// borramos y destruimos todo tipo de sesin del
usuario
15.
session_unset();
16.
session_destroy();
17.
18.
19.
20.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
21.
$arrUsuario = esUsuario( $_SESSION['usuario'],
$_SESSION['password'], $dbConn );
22.
23.
24.
?>
25.
<h1>Blog Personal</h1>
26.
27.
<ul>
28.
/le.><>
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.
$dbConn = conectar();
11.
12.
13.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
14.
$arrUsuario = esUsuario( $_SESSION['usuario'],
$_SESSION['password'], $dbConn );
15.
16.
17.
18.
if ( empty($arrUsuario) || $arrUsuario['tipo'] !=
'admin' ) {
19.
20.
di;
21.
22.
23.
?>
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.
13.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
14.
$arrUsuario = esUsuario( $_SESSION['usuario'],
$_SESSION['password'], $dbConn );
15.
16.
17.
18.
if ( empty($arrUsuario) || $arrUsuario['tipo'] !=
'admin' ) {
19.
20.
di;
21.
22.
23.
24.
// si se envio el formulario
25.
if ( !empty($_POST['submit']) ) {
26.
27.
28.
if ( !empty($_POST['nombre']) )
$_POST['nombre'];
$nombre
29.
30.
31.
if ( empty($nombre) )
$error['nombre']
=
'Los obligatorio completar l nombre de la categora';
32.
33.
34.
if ( empty($error) ) {
35.
36.
37.
$query = "INSERT INTO `categorias` (valor)
VALUES ('$nombre')";
38.
39.
40.
41.
di;
42.
43.
44.
45.
46.
47.
48.
$arrCategorias = array();
49.
$query = "SELECT idCategoria, valor FROM
`categorias` ORDER BY valor ASC";
50.
51.
52.
array_push( $arrCategorias,$row );
53.
54.
55.
?>
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=<? echo $categoria['idCategoria']; ?
>">Editar</a -> <a href="categorias.php?de el=<?
= $categoria['idCategoria'] ?>">Borrar</a /td.><>
73.
</tr>
74.
</tbody></table>
75.
</div>
76.
<div>
77.
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.
12.
$dbConn = conectar();
13.
14.
15.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
16.
$arrUsuario = esUsuario(
$_SESSION['usuario'], $_SESSION['password'], $dbConn
);
17.
18.
19.
20.
if ( empty($arrUsuario) || $arrUsuario['tipo'] !=
'admin' ) {
21.
22.
di;
23.
24.
25.
26.
if ( !empty($_GET['del']) ) {
27.
28.
$query = "DELETE FROM `categorias` WHERE
idCategoria = {$_GET['del']}";
29.
30.
31.
);
32.
di;
33.
34.
35.
36.
37.
// si se envio el formulario
38.
if ( !empty($_POST['submit']) ) {
39.
40.
41.
$nombre
42.
43.
// completamos el variable error si los
necesario
44.
if ( empty($nombre) )
$error['nombre']
= 'Los obligatorio completar l nombre de la
categoría ;
45.
46.
47.
if ( empty($error) ) {
48.
49.
50.
$query = "INSERT INTO `categorias`
(valor) VALUES ('$nombre')";
51.
52.
53.
header( 'Location: categorias.php?
add=true' );
54.
di;
55.
56.
57.
58.
59.
60.
if ( !empty($_POST['submitEdit']) ) {
61.
62.
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ía ;
68.
if ( empty($idCategoria) )
$error['idCategoria']
= 'Falta la ID de la
categoría ;
69.
70.
71.
if ( empty($error) ) {
72.
73.
74.
$query = "UPDATE `categorias` siete
valor = '$nombre' WHERE idCategoria = $idCategoria";
75.
76.
77.
header( 'Location: categorias.php?
edit=true' );
78.
di;
79.
80.
81.
82.
83.
84.
85.
$arrCategorias = array();
86.
$query = "SELECT idCategoria, valor FROM
`categorias` ORDER BY valor ASC";
87.
88.
89.
90.
array_push( $arrCategorias,$row );
}
91.
92.
93.
if ( !empty($_GET['id']) ) {
94.
95.
$query = "SELECT idCategoria, valor FROM
`categorias` WHERE idCategoria = {$_GET['id']}";
96.
97.
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ílas</h2>
113.
114.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">La categoría se
agregó con éxito.</div>
115.
116.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">La categoría ha
sido borrada con éxito.</div>
117.
118.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">La categoría ha
sido editada con éxito.</div>
119.
120.
<? } ?>
121.
122.
123.
<div>
<h3>Listado de Categorí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í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.
141.
<div>
142.
<h3 id="add">Agregar nueva
categoría /h3.<>
143.
144.
<ul>
145.
{ ?>
146.
147.
<? } ?>
148.
</ul>
149.
<? } ?>
150.
method="post">
<form action="categorias.php"
151.
152.
<p>
153.
< label for="nombre">Nombre
de la categorí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.
164.
<div style="backgroundcolor:#ff8800;padding:5px; margin-top:10px;">
165.
<h3 id="add">Editar
categoría /h3.<>
166.
167.
<ul>
168.
{ ?>
169.
170.
<? } ?>
171.
</ul>
172.
<? } ?>
173.
method="post">
<form action="categorias.php"
174.
<p>
175.
< label for="nombre">Nombre
de la categorí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>
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.
12.
$dbConn = conectar();
13.
14.
15.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
16.
$arrUsuario = esUsuario(
$_SESSION['usuario'], $_SESSION['password'], $dbConn
);
17.
18.
19.
20.
if ( empty($arrUsuario) || $arrUsuario['tipo'] !=
'admin' ) {
21.
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ílas</a /le.><>
39.
<le a href=><"noticias.php">Administrar
Noticias</a /le.><>
40.
</ul>
41.
42.
</body>
43.
</html>
12.
$dbConn = conectar();
13.
14.
15.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
16.
$arrUsuario = esUsuario(
$_SESSION['usuario'], $_SESSION['password'], $dbConn
);
17.
18.
19.
20.
if ( empty($arrUsuario) || $arrUsuario['tipo'] !=
'admin' ) {
21.
22.
di;
23.
24.
25.
26.
// si se envio el formulario
27.
if ( !empty($_POST['submit']) ) {
28.
29.
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ía para la noticia';
41.
42.
43.
if ( empty($error) ) {
44.
45.
46.
47.
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.
52.
);
53.
di;
54.
55.
56.
57.
58.
59.
60.
$arrCategorias = array();
61.
$query = "SELECT idCategoria, valor FROM
`categorias` ORDER BY valor ASC";
62.
63.
64.
65.
array_push( $arrCategorias,$row );
}
66.
67.
68.
$arrNoticias = array();
69.
$query = "SELECT idNoticia, ttulo FROM
`noticias` ORDER BY idNoticia DESC";
70.
71.
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.
88.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">La noticia se
agregó con é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ítulo</th>
97.
<th style="backgroundcolor:#cccccc;padding:5px;width:10%"></th>
98.
</tr>
99.
$noticias) { ?>
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.
110.
<div>
111.
noticia</h3>
112.
113.
<ul>
114.
{ ?>
115.
116.
<? } ?>
117.
</ul>
118.
<? } ?>
119.
method="post">
<form action="noticias.php"
120.
121.
<p>
122.
< label
for="ttulo">Tí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.
12.
$dbConn = conectar();
13.
14.
15.
if ( !empty($_GET['salir']) ) {
16.
// borramos y destruimos todo tipo de sesin
del usuario
17.
session_unset();
18.
session_destroy();
19.
20.
21.
22.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
23.
$arrUsuario = esUsuario(
$_SESSION['usuario'], $_SESSION['password'], $dbConn
);
24.
25.
26.
// listado de noticias
27.
28.
$arrNoticias = array();
29.
$query = "SELECT idNoticia, ttulo, copete FROM
`noticias` WHERE fPublicacion < '".date('Y-m-d H::se
)."' ORDER BY fPublicacion DESC";
30.
31.
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.
49.
50.
<? } ?>
51.
52.
53.
<ul>
54.
<le a href=><"ingresar.php">Iniciar
sesión</a /le.><>
55.
<le a
href=><"registrar.php">Regístrate gratis</a
/le.><>
56.
</ul>
57.
58.
<p>Bienvenido <?= $arrUsuario['usuario'] ?> <a href="ndice.php?salir=true">Salir</a /p.><>
59.
{ ?>
60.
<ul>
61.
<le a href=><"admin/ndice.php">Panel
de administración</a /le.><>
62.
</ul>
63.
<? } ?>
64.
<? } ?>
65.
66.
<h2>Noticias</h2>
67.
>
68.
<div>
69.
<h3><a href="vernoticia.php?idNoticia=<?
echo $noticias['idNoticia']; ?>"><? echo
$noticias['ttulo']; ?></a /h3.><>
70.
71.
< /div>
72.
<? } ?>
73.
</body>
74.
</html>
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.
12.
$dbConn = conectar();
13.
14.
15.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
16.
$arrUsuario = esUsuario(
$_SESSION['usuario'], $_SESSION['password'], $dbConn
);
17.
18.
19.
20.
if ( empty($arrUsuario) || $arrUsuario['tipo'] !=
'admin' ) {
21.
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.
30.
31.
32.
di;
33.
34.
35.
36.
37.
// si se envio el formulario
38.
if ( !empty($_POST['submit']) ) {
39.
40.
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ía para la noticia';
52.
53.
54.
if ( empty($error) ) {
55.
56.
57.
58.
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.
63.
);
64.
di;
65.
66.
67.
68.
69.
70.
71.
if ( !empty($_POST['submitEdit']) ) {
72.
73.
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ía para la noticia';
87.
88.
89.
if ( empty($error) ) {
90.
91.
92.
// actualizamos la fecha de modificacin
y de publicacin
93.
94.
if ( empty($fPublicacion) ) $fPublicacion
= date("Y-m-d H::s");
95.
$idUsuario = $arrUsuario['idUsuario'];
96.
97.
98.
$query = "UPDATE `noticias` siete ttulo
= '$ttulo', copete = '$copete', cuerpo = '$cuerpo',
idCategoria = $idCategoria, idUsuario = $idUsuario,
fModificacion = '$fModificacion', fPublicacion =
'$fPublicacion' WHERE idNoticia = $idNoticia";
99.
100.
101.
header( 'Location: noticias.php?
edit=true' );
102.
di;
103.
104.
105.
106.
107.
108.
109.
$arrCategorias = array();
110.
$query = "SELECT idCategoria, valor FROM
`categorias` ORDER BY valor ASC";
111.
112.
113.
114.
array_push( $arrCategorias,$row );
}
115.
116.
117.
$arrNoticias = array();
118.
$query = "SELECT idNoticia, ttulo FROM
`noticias` ORDER BY idNoticia DESC";
119.
120.
121.
122.
array_push( $arrNoticias,$row );
}
123.
124.
125.
if ( !empty($_GET['id']) ) {
126.
127.
128.
$query = "SELECT idNoticia, ttulo, copete,
cuerpo, idCategoria, fPublicacion FROM `noticias`
WHERE idNoticia = {$_GET['id']}";
129.
130.
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.
147.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">La noticia se
agregó con éxito.</div>
148.
149.
<div style="background-color:
#fdfdfd;border:1px solid
151.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">La noticia ha sido
editada con é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ítulo</th>
160.
<th style="backgroundcolor:#cccccc;padding:5px;width:10%"></th>
161.
</tr>
162.
$noticias) { ?>
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.
173.
<div>
174.
noticia</h3>
175.
176.
<ul>
177.
{ ?>
178.
179.
<? } ?>
180.
</ul>
181.
<? } ?>
182.
method="post">
<form action="noticias.php"
183.
184.
<p>
185.
< label
for="ttulo">Tí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.
218.
<div style="backgroundcolor:#ff8800;padding:5px; margin-top:10px;">
219.
220.
221.
<ul>
222.
{ ?>
223.
224.
<? } ?>
225.
</ul>
226.
<? } ?>
227.
method="post">
<form action="noticias.php"
228.
<p>
229.
< label
for="ttulo">Tí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.
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.
12.
$dbConn = conectar();
13.
14.
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.
31.
if ( empty($error) ) {
32.
33.
34.
$query = "INSERT INTO `comentarios`
(comentario, idUsuario, idNoticia) VALUES
('$comentario','$idUsuario','$idNoticia')";
35.
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,
50.
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.
65.
<ul>
66.
<le a href=><"ingresar.php">Iniciar
sesión</a /le.><>
67.
<le a
href=><"registrar.php">Regístrate gratis</a
/le.><>
68.
</ul>
69.
70.
<p>Bienvenido <?= $arrUsuario['usuario'] ?> <a href="ndice.php?salir=true">Salir</a /p.><>
71.
{ ?>
72.
<ul>
73.
<le a href=><"admin/ndice.php">Panel
de administración</a /le.><>
74.
</ul>
75.
<? } ?>
76.
<? } ?>
77.
78.
79.
<p>Publicado por <><b ?php echo
$noticia['usuario']; ?></b> en <>< ?php echo
$noticia['categoria']; ?></></p>
80.
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.
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.
99.
</body>
100.
</html>
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.
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.
12.
$dbConn = conectar();
13.
14.
15.
if ( !empty( $_SESSION['usuario'] ) && !
empty($_SESSION['password']) ) {
16.
$arrUsuario = esUsuario(
$_SESSION['usuario'], $_SESSION['password'], $dbConn
);
17.
18.
19.
20.
if ( empty($arrUsuario) || $arrUsuario['tipo'] !=
'admin' ) {
21.
22.
di;
23.
24.
25.
// borramos un comentario
26.
if ( !empty($_GET['del']) ) {
27.
28.
$query = "DELETE FROM `comentarios` WHERE
idComentario = {$_GET['del']}";
29.
30.
31.
);
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.
41.
42.
header( 'Location: comentarios.php?
aprobar=true' );
43.
di;
44.
45.
46.
47.
// editamos el comentario
48.
if ( !empty($_POST['submitEdit']) ) {
49.
50.
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.
59.
if ( empty($error) ) {
60.
61.
62.
$query = "UPDATE `comentarios` sed
comentario = '$comentario' WHERE idComentario =
$idComentario";
63.
64.
65.
header( 'Location: comentarios.php?
edit=true' );
66.
di;
67.
68.
69.
70.
71.
72.
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.
79.
80.
81.
82.
83.
array_push( $arrComentarios,$row );
}
84.
85.
86.
if ( !empty($_GET['id']) ) {
87.
88.
$query = "SELECT idComentario, comentario
FROM `comentarios` WHERE idComentario =
{$_GET['id']}";
89.
90.
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.
106.
107.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">El comentario se
marcó como apto con éxito.</div>
108.
109.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">El comentario ha sido
borrada con éxito.</div>
110.
111.
<div style="background-color:
#fdfdfd;border:1px solid
#ff8800;width:90%;padding:5px">El comentario ha sido
editado con é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.
141.
$dbConn = conectar();
142.
143.
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.
160.
if ( empty($error) ) {
161.
162.
163.
$query = "INSERT INTO `comentarios`
(comentario, idUsuario, idNoticia) VALUES
('$comentario','$idUsuario','$idNoticia')";
164.
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.
179.
180.
181.
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.
188.
189.
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.
206.
<ul>
207.
<le a href=><"ingresar.php">Iniciar
sesión</a /le.><>
208.
<le a
href=><"registrar.php">Regístrate gratis</a
/le.><>
209.
</ul>
210.
211.
<p>Bienvenido <?= $arrUsuario['usuario'] ?> <a href="ndice.php?salir=true">Salir</a /p.><>
212.
{ ?>
213.
<ul>
214.
<le a href=><"admin/ndice.php">Panel
de administración</a /le.><>
215.
</ul>
216.
<? } ?>
217.
<? } ?>
218.
219.
220.
<p>Publicado por <><b ?php echo
$noticia['usuario']; ?></b> en <>< ?php echo
$noticia['categoria']; ?></></p>
221.
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.
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.
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.
259.
<div style="backgroundcolor:#ff8800;padding:5px; margin-top:10px;">
260.
261.
262.
<ul>
263.
{ ?>
264.
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.
12.
$dbConn = conectar();
13.
14.
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.
31.
if ( empty($error) ) {
32.
33.
34.
$query = "INSERT INTO `comentarios`
(comentario, idUsuario, idNoticia) VALUES
('$comentario','$idUsuario','$idNoticia')";
35.
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.
50.
51.
52.
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.
59.
60.
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.
77.
<ul>
78.
<le a href=><"ingresar.php">Iniciar
sesión</a /le.><>
79.
<le a
href=><"registrar.php">Regístrate gratis</a
/le.><>
80.
</ul>
81.
82.
<p>Bienvenido <?= $arrUsuario['usuario'] ?> <a href="ndice.php?salir=true">Salir</a /p.><>
83.
{ ?>
84.
<ul>
85.
<le a href=><"admin/ndice.php">Panel
de administración</a /le.><>
86.
</ul>
87.
<? } ?>
88.
<? } ?>
89.
90.
91.
<p>Publicado por <><b ?php echo
$noticia['usuario']; ?></b> en <>< ?php echo
$noticia['categoria']; ?></></p>
92.
93.
94.
<h2>Comentarios</h2>
95.
<div>
96.
<? foreach ($arrComentarios las
$comentario) { ?>
97.
<p>
98.
< b><? echo $comentario['usuario']; ?
></b> dijo:<br />
99.
?></>
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.
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.
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.