Comunidad PHPeros

Lenguajes => PHP => Tutoriales PHP => Mensaje iniciado por: naveda en 19 de Noviembre de 2006, 15:00:02 pm

Título: Sistema de Noticias Simple - 2ª Parte
Publicado por: naveda en 19 de Noviembre de 2006, 15:00:02 pm
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:

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ÓN

Bueno 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 existe
array(); //Crea una matriz
setcookie(); //Crea, Modifica o Elimina Cookies
time(); //Extrae la fecha y hora del servidor
exit(); //Cierra el Proceso del codigo
is_numeric(); //Comprueba si una variables es numerica
mysql_query(); //Procesa el codigo SQL en la base de datos
mysql_fetch_assoc(); //Extrae datos de MySQL en una matriz
mysql_free_result(); //Libera los datos extraidos de la base de datos
mysql_num_rows(); //Extrae el numero de filas segun el codigo SQL
mysql_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.
[/list]

Siguiente Parte »
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Drek en 09 de Diciembre de 2006, 23:21:08 pm
naveda en esto tengo una duda.. cuando subo el admin_noticias
sale lo del login pero que datos hay que poner? :S
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Revancha en 09 de Diciembre de 2006, 23:34:13 pm
naveda en esto tengo una duda.. cuando subo el admin_noticias
sale lo del login pero que datos hay que poner? :S

Debes modificar esa linea:

$admin = array("usuario","pass"); //Ejemplo
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Drek en 10 de Diciembre de 2006, 00:17:56 am
ami me pone datos incorrectos i a raken provo con mis datos i le sale en blanco dice que por culpa de las cokies
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Keon en 10 de Diciembre de 2006, 21:22:49 pm
Muy buenos,

haces tu los scripts??
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Drek en 10 de Diciembre de 2006, 21:38:22 pm
a quien le dices a naveda? supongo que si los hara el
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Keon en 10 de Diciembre de 2006, 22:48:26 pm
Tengo un error:

Cuando voy ha enviar una noticia me pone esto:

  Ha ocurrido un error, no se ha procesado la noticia
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Drek en 10 de Diciembre de 2006, 23:19:35 pm
as echo el conectar? i as puesto include?
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Drek en 29 de Diciembre de 2006, 19:33:56 pm
pues yo tengo un problema, aora, al entrar en admin_noticias me sale esto:


Warning: mysql_query(): Access denied for user 'admin114495'@'localhost' (using password: NO) in /home/virtual/sitio114495/www/admin_noticias.php on line 66

Warning: mysql_query(): A link to the server could not be established in /home/virtual/sitio114495/www/admin_noticias.php on line 66

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/virtual/sitio114495/www/admin_noticias.php on line 67
No hay ninguna noticia publicada
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/virtual/sitio114495/www/admin_noticias.php on line 80
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: naveda en 29 de Diciembre de 2006, 19:39:12 pm
Access denied for user => Acceso denegado al usuario

Esto quiere decir, como su misma traducción indica, que no ha conectado a la base de datos y por tanto las funciones mysql_query, mysql_num_rows y mysql_free_result no han funcionado...

Solucion: Conectar correctamente a la base de datos
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Drek en 29 de Diciembre de 2006, 19:43:21 pm
bueno faltava el include conectar pero de tantos errores emos pasado a :


Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/virtual/sitio114495/www/admin_noticias.php on line 80
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: naveda en 29 de Diciembre de 2006, 19:46:50 pm
Eso debe suceder porque no tienes noticias publicadas y esta intentando liberar una variable inexistente, la solución es poner el simbolo @ frente a la funcion mysql_free_result();
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Drek en 29 de Diciembre de 2006, 19:52:47 pm
eso es colega ya esta listo gracias seguramente en el otro apartado de los bbcodes tambien necesite jaj
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: x.mara.x en 29 de Septiembre de 2007, 18:44:30 pm
Antes en las noticias me salia Enviado Por Autor.. y queria que saliera el nombre que pusieran en el form asi que puse en

form.html

<form action="enviar.php" method="POST">
<input type="text" name="titulo" value="Titulo de la noticia"><br>
<input type="text" name="autor" value="Tu Nombre"><br>
<textarea name="noticia">El texto de la noticia</textarea><br>
<input type="submit" name="enviar" value="Enviar Noticia">
</form>

y en
enviar.php


<?PHP
include ("conectar.php");
if (isset($_POST['enviar'])) { //Se comprueba si el boton enviar ha sido pulsado
if (!empty($_POST['titulo']) && !empty($_POST['noticia'])) { //Se comprueba si los campos no estan vacios
$sql = "INSERT INTO `noticias` (titulo,noticia,autor,fecha) values"; //Definimos el codigo para...
$sql.= "('".$_POST['titulo']."','".$_POST['noticia']."','".$_POST['autor']."','".time()."')"; //...Ingresar los datos del formulario en la DB
if (mysql_query($sql)) { //Aquí se ingresa y se comprueba si se ha ingresado bien
echo "Noticia Enviada Correctamente";
} else { //Si algo ha fallado
echo "Ha ocurrido un error, no se ha procesado la noticia";
}
} else { //Si faltan campos por completar
echo "La noticia no se ha enviado, completa el formulario";
}
} else { ?>
<form action="enviar.php" method="POST">
<input type="text" name="titulo" value="Titulo de la noticia"><br>
<textarea name="noticia">El texto de la noticia</textarea><br>
<input type="submit" name="enviar" value="Enviar Noticia">
</form>
<? } ?>

Tal vez no tenga ningun uso.. y tal vez fue una cosa super novata de mi parte.. pero no me doy credito para nada.. esto fue echo por naveda yo solo descubri algo y lo quise postear como soy muy novata xd pero bueno para los novatos como yo (sin ofender) espero que les sirva
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: x.mara.x en 29 de Septiembre de 2007, 19:10:20 pm
Ahora me sale 1 problema.. dice que en la linea 80 de admin_noticias.php sale algo de mysql_free_result() y dice que es un error..

Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: naveda en 30 de Septiembre de 2007, 11:22:18 am
Sucede por una simple razón.
En la tabla donde se guardan las noticias no hay ninguna entrada, con lo cual al usar la funcion mysql_free_result() estamos pidiendo al codigo que libere la memoria usada pero, claro, al no haber ninguna entrada no hay datos que liberar de la memoria, con lo cual, esto conlleva a un error que es mejor ocultar y olvidarse de él.

¿Como ocultar este error tan simple?
Con un @ frente a la aplicación de esa función solucionamos el problema.

Ejemplo:
@mysql_free_result($array);
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: x.mara.x en 02 de Octubre de 2007, 01:51:39 am
muchisimas gracias naveda :D .. ahora la fecha em da error :(
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: naveda en 02 de Octubre de 2007, 15:00:50 pm
Como comprenderás necesito que me digas que error... aun no tengo poderes de adivinacion jajajaja ;)
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: x.mara.x en 04 de Octubre de 2007, 00:16:55 am
haha disculpa mira.. esque no sale la fecvha sale un numero raro algo oxcmo 117799 o no se unos numeros alli raros, pero la fecha no sale :S
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: autorojo en 04 de Octubre de 2007, 05:05:44 am
isset(); //Comprueba si una variable existe
array(); //Crea una matriz
setcookie(); //Crea, Modifica o Elimina Cookies
time(); //Extrae la fecha y hora del servidor
exit(); //Cierra el Proceso del codigo
is_numeric(); //Comprueba si una variables es numerica
mysql_query(); //Procesa el codigo SQL en la base de datos
mysql_fetch_assoc(); //Extrae datos de MySQL en una matriz
mysql_free_result(); //Libera los datos extraidos de la base de datos
mysql_num_rows(); //Extrae el numero de filas segun el codigo SQL
mysql_fetch_array(); //Extrae datos de MySQL en una matriz
[/list]

¿De donde sacaste eso, lo inventaste vos, lo descubriste, como?
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Revancha en 04 de Octubre de 2007, 22:11:45 pm
php.net/nombre_funcion
...
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: naveda en 05 de Octubre de 2007, 14:32:05 pm
autorojo como revancha a "indicado" se puede conocer las acciones de cada funcion mirandolo en www.php.net
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: x.mara.x en 06 de Octubre de 2007, 02:06:57 am
sincermente no entiendo :S:S :( eso salia en el codigo :S
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Dacan en 31 de Marzo de 2008, 01:50:11 am
Noticias Mejorado   :o

Haci se Mostrara la Fecha Bien:

  <style type="text/css">

.estilotabla{
    background-color:ffffff;
    border-style:solid;
    border-color:666666;
    border-width:1px;
     align: center;
}
.estilocelda{
    background-color:ddeeff;
    color:333333;
    font-weight:bold;
    font-size:10pt;
    align: center;
}

</style>

<?PHP

include("conectar.php");
include("funciones.php");
$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
$fecha = $noticia[fecha] ;
$mesesano = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto",
"Septiembre","Octubre","Noviembre","Diciembre") ;
$diames = date(j,$fecha) ; $mesano = date(n,$fecha) - 1 ; $ano = date(Y,$fecha) ;
$fecha = "$diames de  $mesesano[$mesano] del  $ano" ;
echo '<table width=280 height=18 cellpadding=2 cellspacing=2 class="estilotabla" align="center">
<tr><td align="center" border="1">'.filtro_palabras(bbcode($noticia['titulo'])).'</td></tr></table>

<table width=280 height=18 cellpadding=2 cellspacing=2 class="estilotabla" align="center"><tr><td>'.filtro_palabras(bbcode($noticia['noticia'])).'</td></tr>
<tr><td>Enviada por '.$noticia['autor'].' || Fecha: '.$fecha.'</td></tr>
</table><hr>';
}
} else {
echo "No hay ninguna noticia publicada";
}
@mysql_free_result($noticia); //Se borran los datos usados
?>


Saludos, Dacan  ;)
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Tope en 31 de Marzo de 2008, 15:19:03 pm
Estimado dacan, ya que tu decias que mi mini-tuto de "defined" era de electros, y es mentira, ahora yo te dire

Lo de las noticias en español, es de las noticias de electros!!!
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: naveda en 31 de Marzo de 2008, 16:36:13 pm
Cierto, no ha cambiado ni los nombres de las variables, ni el orden de las variables... ejejje
Título: Re: Sistema de Noticias Simple - 2ª Parte
Publicado por: Dacan en 31 de Marzo de 2008, 20:26:39 pm
Si es Cierto pongan la fuente se me olvido :S..
Título: Re:Sistema de Noticias Simple - 2ª Parte
Publicado por: Wold en 19 de Septiembre de 2012, 15:53:35 pm
Error
Warning: Cannot modify header information - headers already sent by (output started at /srv/disk10/1149158/www/alexz.medianewsonline.com/panel.php:9) in /srv/disk10/1149158/www/alexz.medianewsonline.com/panel.php on line 36

if ($admin[0] == $_POST['user'] && $admin[1] == $_POST['pass']) {
setcookie("admin",$_POST['pass'],time()+3600); // En esta linea si pongo un  @setcookie Directamente ni va el formulario xD
   } else {
      exit("Datos erroneos, acceso denegado");


Creo que es el servidor!!