En la 1ª Parte de este tutorial, dedicado a aprender a crear un Sistema de Noticias Simple basado en MySQL, aprendimos a crear el
envio y la
muestra de noticias.
En esta 2ª Parte aprenderemos a crear un Simple Panel de Administracion para las noticias. El objetivo fundamental de nuestro Panel será la Edicion y Eliminación de Noticias, pero como buen panel de Administración necesita un minimo de seguridad para que solo el administrador pueda acceder al panel.
Objetivos del tutorial:- Identificacion del Administrador
- Edicion de Noticias
- Eliminacion de Noticias
Vamos a comenzar creando un archivo al que llamaremos...
admin_noticias.php aunque podemos llamarlo como queramos ya que no influirá en su funcionamiento.
El panel de administracion necesita un formulario de acceso para comprobar que el administrador es el unico que accede al panel, por lo tanto vamos a crearlo.
El codigo del
admin_noticias.php es el siguiente:
<?PHP
/* ANTES DE TODO EL CODIGO HAY QUE CONECTAR A LA BASE DE DATOS */
if(isset($_POST['login']) && isset($_POST['user']) && isset($_POST['pass'])) {
$admin = array("usuario","pass"); //Ejemplo
if ($admin[0] == $_POST['user'] && $admin[1] == $_POST['pass']) {
//Acceso Concedido
setcookie("admin",$_POST['pass'],time()+3600); //El acceso durará "1 hora (3600 segundos)"
} else {
exit("Datos erroneos, acceso denegado");
}
}
if (!isset($_COOKIE['admin'])) {
?>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
<input type="text" name="user" value="usuario"> <input type="password" name="pass" value="pass"><br>
<input type="submit" name="login" value="Acceder">
</form>
<?PHP
exit();
}
echo '<p align="center"><a href="'.$_SERVER['PHP_SELF'].'">Principal</a></p><hr>'; //Enlace en cada pagina hacia la principal
if (isset($_GET['borrar'])) { //Borrado de Noticias
if (is_numeric($_GET['borrar'])) {
//Borrado de las noticia con id = a $_GET['borrar']
$borrando = "DELETE FROM `noticias` WHERE id = '".$_GET['borrar']."'";
if (mysql_query($borrando)) {
echo "La noticia #".$_GET['borrar']." ha sido borrada";
} else {
exit("Ha ocurrido algún error, la noticia no se ha borrado");
}
} else {
exit("Error: Noticia Inexistente");
}
} elseif (isset($_GET['editar'])) { //Edicion de Noticias
if (!is_numeric($_GET['editar'])) {
exit("Error: Noticia Inexistente");
}
if (isset($_POST['edit_form'])) {
$sql = "UPDATE `noticias` SET titulo = '".$_POST['titulo']."', ";
$sql.= "autor = '".$_POST['autor']."', ";
$sql.= "fecha = '".$_POST['fecha']."', ";
$sql.= "noticia = '".$_POST['noticia']."' WHERE id = '".$_GET['editar']."'";
if (mysql_query($sql)) {
echo "La noticia #".$_GET['editar']." ha sido editada";
} else {
exit("Error: La noticia no se ha editado");
}
} else {
$sql = mysql_query("SELECT * FROM `noticias` WHERE id = '".$_GET['editar']."'");
if (!mysql_num_rows($sql)) {
exit("Error: Noticia Inexistente");
}
$noticia = mysql_fetch_assoc($sql);
?>
<form action="<?=$_SERVER['PHP_SELF'];?>?editar=<?=$_GET['editar'];?>" method="POST">
Titulo: <input type="text" name="titulo" value="<?=$noticia['titulo'];?>"><br>
Autor: <input type="text" name="autor" value="<?=$noticia['autor'];?>"><br>
Fecha: <input readonly type="text" name="fecha" value="<?=$noticia['fecha'];?>"><br>
<textarea name="noticia"><?=$noticia['noticia'];?></textarea><br>
<input type="submit" name="edit_form" value="Editar Noticia">
</form>
<?PHP
mysql_free_result($noticia);
}
} else { //Listado de Noticias
$query = mysql_query("SELECT * FROM `noticias` ORDER BY `id` DESC"); //Se extraen las noticias en orden reciente
if (mysql_num_rows($query)) { // Se comprueba si hay alguna noticia publicada
while ($noticia = mysql_fetch_array($query)) { //Se hace un bucle para mostrar cada noticia una a una
echo '<table border="0" width="100%">
<tr><td align="center">'.$noticia['titulo'].'</td></tr>
<tr><td>'.$noticia['noticia'].'</td></tr>
<tr><td>Enviada por '.$noticia['autor'].' || Fecha: '.$noticia['fecha'].'</td></tr>
<tr><td><b>Opciones Admin:</b> ';
echo '<a href="'.$_SERVER['PHP_SELF'].'?borrar='.$noticia['id'].'">Borrar</a> ||
<a href="'.$_SERVER['PHP_SELF'].'?editar='.$noticia['id'].'">Editar</a></td></tr>
</table><hr>';
}
} else {
echo "No hay ninguna noticia publicada";
}
mysql_free_result($noticia); //Se borran los datos usados
}
?>
EXPLICACIÓNBueno antes de empezar la explicación detallada voy a resumir las funciones que han sido utilizadas en esta 2ª parte.
Funciones Utilizadas:isset(); //Comprueba si una variable existearray(); //Crea una matrizsetcookie(); //Crea, Modifica o Elimina Cookiestime(); //Extrae la fecha y hora del servidorexit(); //Cierra el Proceso del codigois_numeric(); //Comprueba si una variables es numericamysql_query(); //Procesa el codigo SQL en la base de datosmysql_fetch_assoc(); //Extrae datos de MySQL en una matrizmysql_free_result(); //Libera los datos extraidos de la base de datosmysql_num_rows(); //Extrae el numero de filas segun el codigo SQLmysql_fetch_array(); //Extrae datos de MySQL en una matriz[/list]
Ahora voy a explicar paso a paso el proceso que sigue el codigo de una forma sencilla.
- Conexión a la base de datos MySQL
- Se comprueba mediante usuario y contraseña
- Si es admin, Se crea una cookie llamada admin
- Si no es admin, se finaliza el proceso avisando "Acceso Denegado"
- Se comprueba si la cookie admin existe (si existe es admin)
- Si EXISTE:
- Se muestra el enlace superior para ir a la principal
- Se comprueba si se ha elegido borrar alguna noticia
- Si ha sido elegido borrar:
- Se comprueba si el numero de la noticia es valido, si no se finaliza el proceso.
- Se borra la noticia elegida
- Si NO se ha elegido borrar:
- Se comprueba si ha elegido editar alguna noticia
- Si ha elegido EDITAR
- Se comprueba si el numero de la noticia es valido, si no se finaliza el proceso.
- Se comprueba si se ha pulsado el boton "editar" del formulario de edición
- Si se HA PULSADO, se edita la noticia
- Si NO se ha pulsado, se muestra el formulario de edición
- Si no se ha elegido ni BORRAR, ni EDITAR, se muestra el listado de noticias
- Si la cookie "admin" no existe, se muestra el formulario de identificación y se finaliza el proceso siguiente
[/list]