Foro "sencillo"
Comencemos suavemente, con lo que ya está al 100%. La unidad (o módulo, o include) que se encarga de crear una variable $admin que servirá para restringir el contenido de ciertos contenidos a los administradores del foro. (Sí, al final terminé por usar sesiones y cookies).
Quizás para entender del todo el código haga falta el resto, pero ya lo iré poniendo.
login.php <?php include ("conectar.php"); $admin = FALSE; $result = mysql_query ("SELECT * FROM admin where nombre='".$_COOKIE["admin"]."' AND clave='".$_COOKIE["pass"]."'"); if ( $row = mysql_fetch_array($result) ) { $admin = TRUE; } ?> |
UPDATE(09 - 06 - 07 /16:46)
Versión 1.0b del código. Por supuesto para el trabajo que estoy realizando va todo metido dentro de tablas y muy bonito. Una vez esté terminado lo postearé también.
foro.php <?php // By Aladaris 2007 -- GNU // http://www.es.gnu.org/modules/content/index.php?id=8 // http://www.gnu.org/philosophy/selling.es.html include("includes/login.php"); // ############################## GENERALIDADES ############################### if ( $act == "" ) { // Redireccionamos al indice de TOPICOS si no se especifica acción ?><!-- Pequeño Script en Java que se encarga de redirigir al admin al índice de tópicos --> <SCRIPT LANGUAGE="javascript"> location.href = "<? $_self ?>?act=topicos"; </SCRIPT><?php } // ############################## ADMINISTRACION ############################## // ---------------------------------------------------------------------------- if ( $act == "logadminF" ) { // Formulario para el login del ADMIN si NO esta LOGUEADO if ( !($admin) ) { ?><form method="post" action="<? $_self ?>?act=logadminC"> Nombre: <INPUT TYPE="text" NAME="nombre" SIZE=28 MAXLENGTH=50><br /> Clave: <INPUT TYPE="password" NAME="clave" SIZE=28 MAXLENGTH=50><br /> <input name="submit" type="submit" class="boton" value="Log-In"> </form><? }else{ setcookie("admin", $nombre, time()-3600); // Eliminacion de las COOKIES setcookie("pass", $clave, time()-3600); echo ('Se ha cerrado con éxito la sesión de <b>ADMINISTRADOR</b>'); } } // ---------------------------------------------------------------------------- if ( $act == "logadminC" ) { // Inicio de sesión mediante la creación de COOKIES $result = mysql_query ("SELECT * FROM admin where nombre='$nombre'"); if ( $row = mysql_fetch_array($result) ) { // Si exíste ese nombre de ADMINISTRADOR seguimos if ( $row["clave"] == $clave ) { // Comprobamos el PASSWORD setcookie("admin", $nombre, time()+3600); // Las COOKIES duraran 1 Hora setcookie("pass", $clave, time()+3600); echo ('Sesión iniciada con éxito.'); }else{ echo ('Error: La contraseña proporcionada no es válida.'); } }else{ echo ('Error: No exíste un administrador con ese nombre.'); } } // ---------------------------------------------------------------------------- if ( $act == "adminF" ) { // Formulario de cambio de clave del ADMIN if ( $admin ) { // Si es un ADMINISTRADOR proseguimos ?><!-- Formulario para cambiar la clave del administrador --> <form name="nueva clave" method="post" action="<? $_self ?>?act=adminC"> Clave actual: <INPUT TYPE="password" NAME="pass" SIZE=28 MAXLENGTH=50><br /> Nueva clave: <INPUT TYPE="password" NAME="newpass" SIZE=28 MAXLENGTH=50><br /> Repetir clave: <INPUT TYPE="password" NAME="newpass2" SIZE=28 MAXLENGTH=50><br /> <input name="submit" type="submit" class="boton" value="Cambiar"> </form> <? }else{ echo ('ERROR: No tiene permiso para realizar esta operación. Sólo un <b>ADMINISTRADOR</b> tiene acceso.'); } } // ---------------------------------------------------------------------------- if ( $act == "adminC" ) { // Cambio de clave del ADMIN if ( $admin ) { // Si es un ADMINISTRADOR proseguimos if ( $newpass == $newpass2 ) { // Evitamos errores al cambiar de clave $result = mysql_query ("SELECT * FROM admin WHERE nombre='".$_COOKIE["admin"]."'"); if ( $row = mysql_fetch_array($result) ) { // Si nos devuelve columna es que es correcto y proseguimos $sql = ("UPDATE admin SET clave='$newpass' WHERE clave='$pass'"); mysql_query($sql); echo ('Contraseña cambiada con éxito.');?> <!-- Pequeño Script en Java que se encarga de redirigir al admin al índice de tópicos --> <SCRIPT LANGUAGE="javascript"> location.href = "<? $_self ?>?act=topicos"; </SCRIPT> <? }else{ echo ('La clave de administrador que ha proporcionado no es correcta, no se realizará ningún cambio.'); } }else{ echo ('Has escrito mal la nueva contraseña, asegurese de que al repetirla lo hace exactamente igual.'); } }else{ echo ('ERROR: No tiene permiso para realizar esta operación. Sólo un <b>ADMINISTRADOR</b> tiene acceso.'); } } // ---------------------------------------------------------------------------- if ( $act == "eliminarT" ) { // Eliminar TOPICO y todos los MENSAJES relacionados if ( $admin ) { // Si es un ADMINISTRADOR proseguimos echo ('Autentificación correcta, borrando Tópico y sus Mensajes.'); $sql = ("DELETE FROM topicos WHERE id='$Tid'"); $sql2 = ("DELETE FROM mensajes WHERE ref_topic='$Tid'"); mysql_query($sql); mysql_query($sql2);?> <!-- Pequeño Script en Java que se encarga de redirigir al admin al índice de tópicos --> <SCRIPT LANGUAGE="javascript"> location.href = "<? $_self ?>?act=topicos"; </SCRIPT> <? }else{ echo ('ERROR: No tiene permiso para realizar esta operación. Sólo un <b>ADMINISTRADOR</b> tiene acceso.'); } } // ---------------------------------------------------------------------------- if ( $act == "eliminarM" ) { // Eliminar MENSAJE if ( $admin ) { // Si es un ADMINISTRADOR proseguimos echo ('Autentificación correcta, borrando Mensaje.'); $sql = ("DELETE FROM mensajes WHERE id='$Mid'"); mysql_query($sql);?> <!-- Pequeño Script en Java que se encarga de redirigir al admin al topico donde se encontraba --> <SCRIPT LANGUAGE="javascript"> location.href = "<? $_self ?>?act=mensajes&Tid=<? echo ($Tid); ?>"; </SCRIPT> <? }else{ echo ('ERROR: No tiene permiso para realizar esta operación. Sólo un <b>ADMINISTRADOR</b> tiene acceso.'); } } // ################################# TOPICOS ################################## // ---------------------------------------------------------------------------- if ( $act == "aniadirT" ) { // Escribir nuevo TOPICO en la BD if ( trim($Fnombre) != "" && trim($Ftitulo) != "" ) { // Comprobamos que no estén en blanco nombre y título $sql = ("INSERT INTO topicos (nombre,apellidos,email,titulo,fecha,descripcion) VALUES ('$Fnombre','$Fapellidos','$Femail','$Ftitulo',curdate(),'".nl2br($Fdescripcion)."')"); mysql_query($sql); echo ('Tópico añadido');?> <!-- Pequeño Script en Java que se encarga de redirigir al usuario al índice de tópicos --> <SCRIPT LANGUAGE="javascript"> location.href = "<? $_self ?>?act=topicos"; </SCRIPT> <? }else{ echo ('Introduzca su <b>Nombre</b> y un <b>Título</b>, como mínimo.'); } } // ---------------------------------------------------------------------------- if ( $act == "topicos" ) { // Ver TOPICOS $contador = 1; // $contador nos sirve para acotar el máximo de tópicos mostrado por página $result = mysql_query("SELECT * FROM topicos order by id DESC"); while ( $row = mysql_fetch_array($result) ) { echo ('<div><a href="'.$_self.'?act=mensajes&Tid='.$row["id"].'">'.$row["titulo"].'</a>'); if ( $admin ) { // Sólo mostramos la opción de borrado al ADMIN echo (' (<a href="'.$_self.'?act=eliminarT&Tid='.$row["id"].'">Borrar</a>)</div>'); }else{ echo ('</div>'); // Cerramos la etiqueta DIV } $contador ++; } ?> <!-- Formulario para añadir un nuevo TOPICO --> <form name="nuevo_topico" method="post" action="<? $_self ?>?act=aniadirT"> <p>Nombre: <input name="Fnombre" type="text" id="Fnombre" size="32"></p> <p>Apellidos: <input name="Fapellidos" type="text" id="Fapellidos" size="64"></p> <p>E-mail: <input name="Femail" type="text" id="Femail" size="64"></p> <p>Título: <input name="Ftitulo" type="text" id="Ftitulo" size="55"></p> <p>Descripción:</p> <p><textarea name="Fdescripcion" cols="55" rows="6" id="Fdescripcion"></textarea></p> <p><input type="submit" name="Submit" value="Publicar"></p> </form> <? } // ################################# MENSAJES ################################# // ---------------------------------------------------------------------------- if ( $act == "aniadirM" ) { // Escribir nuevo MENSAJE en la BD if ( trim($Fnombre) != "" && trim($Fmensaje) != "" ) { // Comprobamos que no estén en blanco nombre y mensaje $result = mysql_query("SELECT * FROM topicos order by id"); // Evitar mensajes en tópicos inexistentes while ( $row = mysql_fetch_array($result) ) { if ( $Tid == $row["id"] ) { $sql = ("INSERT INTO mensajes (nombre,apellidos,email,mensaje,fecha,ref_topic) VALUES ('$Fnombre','$Fapellidos','$Feamil','".nl2br($Fmensaje)."',curdate(),'$Tid')"); mysql_query($sql); echo ('Mensaje añadido');?> <!-- Pequeño Script en Java que se encarga de redirigir al usuario al topico donde se añade el mensaje --> <SCRIPT LANGUAGE="javascript"> location.href = "<? $_self ?>?act=mensajes&Tid=<? echo $Tid ?>"; </SCRIPT> <? } // Cerrando IF } // Cerrando WHILE }else{ echo ('Introduzca su <b>Nombre</b> y un <b>Mensaje</b>'); } } // ---------------------------------------------------------------------------- if ( $act == "mensajes" ) { // Ver MENSAJES de un TOPICO dado y su DESCRIPCION $result = mysql_query ("SELECT * FROM topicos WHERE id='$Tid'"); if ( $row = mysql_fetch_array($result) ) { // Si nos devuelve columna es que es correcto y proseguimos $result = mysql_query("SELECT * FROM mensajes WHERE ref_topic=$Tid order by id"); while ( $row = mysql_fetch_array($result) ) { echo ('<div>'.$row["mensaje"]); if ( $admin ) { // Sólo mostramos la opción de borrado al ADMIN echo (' (<a href="'.$_self.'?act=eliminarM&Mid='.$row["id"].'&Tid='.$Tid.'">Borrar</a>)</div>'); }else{ echo ('</div>'); // Cerramos la etiqueta DIV } } ?> <!-- Formulario para añadir un nuevo MENSAJE en el TOPICO especificado --> <form name="nuevo_topico" method="post" action="<? $_self ?>?act=aniadirM&Tid=<? echo $Tid ?>"> <p>Nombre: <input name="Fnombre" type="text" id="Fnombre" size="32"></p> <p>Apellidos: <input name="Fapellidos" type="text" id="Fapellidos" size="64"></p> <p>E-mail: <input name="Femail" type="text" id="Femail" size="64"></p> <p>Mensaje:</p> <p><textarea name="Fmensaje" cols="120" rows="10" id="Fmensaje"></textarea></p> <p><input type="submit" name="Submit" value="Enviar"></p> </form> <? }else{ echo ('El tópico al que intenta acceder no existe'); } }?> |