Plexinium
Septiembre 08, 2010, 04:43:37 *


Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 

Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Crear un Sistema de Noticias con PHP  (Leído 264 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Dj Link
Yo solo se que no se nada
Administrador
Hampón Calificado
*****

Agradecimientos: 43
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1804


Listo para cooperar con el foro


WWW
« : Mayo 22, 2009, 05:52:06 »

Este tutorial consta de 3 partes: La primera genera un sistema de noticias a través de un panel de administración y las muestra en orden según su fecha, la segunda parte muestra un sistema de edición y borrado de estas noticias. La tercera y última parte veremos como generar un sistema de comentarios para nuestras noticias.

Primero creamos la base de datos para las noticias:
create table noticias (
id_noticia int(4) auto_increment not null,
autor varchar(255),
titulo varchar(255),
categoria varchar(255),
fecha datetime not null,
noticia blob, key(id_noticia)
)

Un poco de explicación: id_noticia se incrementará cada vez que insertemos un registro desde el panel de administración (que crearemos luego) lo que nos facilitará la lectura de la noticia y asignarle sus respectivos comentarios. Lo demás está a la vista.

Ahora veremos el código a incluir en la página que llamaremos index.php (Que original ¿no?)
Código:
<html>
<head>
<title>Sistema de noticias</title>
<?
//conectamos a la base
$connect=mysql_connect("servidor","nombre_de_la_base","pass")';

//Seleccionamos la base
mysql_select_db("nombre_de_la_base",$connect);

//hacemos las consultas
$result=mysql_query("select * from noticias order by fecha Desc", $connect);
$totalregistros=mysql_num_rows($result);
?>
</head>
<body>
//Recogemos las consultas en un array y las mostramos
<?
while($row=mysql_fetch_array($result))
{
echo '<h2>'.$row[titulo].'</h2><br><p>'.$row[articulo].'</p><br><tudiv>'.$row[autor].'|'.$row[fecha].'| '.$row[categoria].' |
'<a href="ver.php?id='.$row[id_noticia].'">comentarios()</a> |
<a href="editar.php?id='.$row[id_noticia].'">editar</a>';</tu div>

//Hemos puesto los enlaces para "Comentarios" y "Editar" cosa que ocuparemos
más adelante como se puede ver el id nos servirá para casi todo.
}
mysql_free_result($result)
?>
</body>
</html>

Nota: Se puede usar cualquier función de conversión de fechas para mostrar fecha en español y separarla de la hora. Acá no se hará por no ser el fin de este tutorial

Es hora de crear el panel de administración. En realidad es en donde generamos la noticia que luego mostrará el index. Lo llamaremos administrar.php (otro destello de creatividad). Obviaremos el código de la estructura html y nos enfocaremos en el formulario que enviará los datos
Código:
<form action="procesanoticia.php" method="post">
Título noticia:<br>
<input type="text" name="titulo"><br>
Autor:<br>
<input type="text" name="autor"><br>
Categoría:<br>
<input type="text" name="categoria"><br>
Escriba el articulo<br>
<textarea name="articulo" cols="50" rows="10"></textarea><br>
< input type="submit" value="Publicar"><br>
</form>

Como vemos, este formulario envía por método POST todas las variables necesarias para el llenado de nuestra base. Dichas variables las recibe un script llamado procesanoticia.php el cual veremos a continuación:
Código:
<?
//recibimos las variables enviadas por el formulario
$titulo=$_POST[titulo];
$autor=$_POST[autor];
$categoria=$_POST[categoria];
$articulo=$_POST[articulo];
//conectamos a la base
$connect=mysql_connect("servidor","nombre de la base","pass")';
//Seleccionamos la base
mysql_select_db("nombre de la base",$connect);
//insertamos los registros almacenados en las variables
mysq_query("insert into noticias(titulo,autor,categoria,articulo,fecha)
values('$titulo','$autor','$categoria','$articulo',NOW()",$connect)
header("location: index.php");
?>

Se llena la base con todos los parámetros recibidos del formulario. Cabe destacar que para la fecha se ocupo la funcion NOW() esta función rellena la base con la fecha y hora del servidor. La primera parte y el trabajo pesado ya está hecho. Falta que estas noticias puedan ser editatas o borradas, tema que se verá en la Segunda parte

Segunda Parte

 borrado y edición

En la primera parte vimos como construir un sistema de noticias, manejado por un panel de amdinistración. En esta parte veremos como editar y borrar dichas noticias

Recordemos que en la primera parte creamos un link llamado editar y su enlace tenía esta estructura <a href="editar.php?id=1"> llamando a la página editar.php y en donde el id cambia su número dependiendo de la noticia. Con esto en claro, es hora de ver el código de editar.php
Nota: Una vez más obviaremos la estructura html y pondremos el código PHP
Código:
<?
//recibimos la variable id enviada en el enlace por GET
$id=$_GET[id];
//conectamos a la base
$connect=mysql_connect("servidor","nombre de la base","pass")';
//Seleccionamos la base
mysql_select_db("nombre de la base",$connect);
//hacemos las consultas
$result=mysql_query("select * from noticias where id_noticia='$id'"
,$connect);
//Una vez seleccionados los registros los mostramos para su edición
while($row=mysql_fetch_array($result))
{
echo '<form action="edit.php" method="post">
<input type="hidden" name="id" value="'.$row[id_noticia].'"><br>
Título noticia:<br>
<input type="text" name="titulo" value="'.$row[titulo].'"><br>
Autor:<br>
<input type="text" name="autor" value=".$row[autor].'"><br>
Categoría:<br>
<input type="text" name="categoria" value='.$row[categoria].'"><br>
Escriba el articulo<br>
<textarea name="articulo" cols="50" rows="10">'.$row[articulo].'</textarea>
<br>
< input type="submit" value="Editar"><br>
</form>
}
mysql_free_result($result)
mysq_close($connect)
?>

En este script recibimos por URl la variable $id desde el enlace de nuestro sistema de noticias visto en la primera parte . Este valor recibio lo almacenamos y utilizamos para la selección solo del artículo que nos interesa editar. Una vez más utilizamos un formulario, con la salvedad de que se agregó el atributo value para mostrar los datos recibidos de la base, este formulario nos enviará a otro script, llamado edit.php el que se encargará de hacer la modificación en la base, y lo vemos a continuación
Nota: Para el borrado haremos un enlace en el script anterior donde más nos guste, depende del diseño de nuestra página. El enlace debe tener la siguiente estructura <a href="borrar.php?id='$id'"> . Luego veremos como se borra.

Código:
<?
//recibimos las variables enviadas por el formulario
$id=$_POST[id];
$titulo=$_POST[titulo];
$autor=$_POST[autor];
$categoria=$_POST[categoria];
$articulo=$_POST[articulo];

//conectamos a la base
$connect=mysql_connect("servidor","nombre de la base","pass")';
//Seleccionamos la base
mysql_select_db("nombre de la base",$connect);

//modificamos los datos de la base según variables recibidas

mysql_query("update noticias Set articulo='$articulo',categoria='$categoria'
,titulo='$titulo' where id_noticia='$id'", $link);

header("location: index.php");
?>

Modificamos la base con los datos recibidos. Una vez más la famosa id fue de gran utilidad, pues con ella solo modificamos los registros pertenecientes a ella y no otros o todos.

Ahora veremos como se borra. Este archivo se llama borrar.php y ya fue mencionado como generar un enlace a él anteriormente.

Código:
<?
//recibimos la variable $id
$id=$_POST[id];
//conectamos a la base
$connect=mysql_connect("servidor","nombre de la base","pass")';
//Seleccionamos la base
mysql_select_db("nombre de la base",$connect);

//borramos los registros pertenecientes a la id
mysql_query("delete from blog where id_noticia='$id'",$connect);
header("location: index.php");
?>

Se borran los registros, creo que este script no requiere mayor explicación. Ahora solo queda ver como añadir y leer comentarios en nuestro sistema y lo veremos a continuación en la Tercera parte

Tercera Parte

 borrado y edición

Recordemos que en la primera parte creamos un link llamado comentarios y su enlace tenía esta estructura <a href="ver.php?id=1"> llamando a la página ver.php y en donde el id cambia su número dependiendo de la noticia que queremos visualizar. Con esto en claro, es hora de ver el código de ver.php
Nota: Una vez más obviaremos la estructura html y pondremos el código PHP

//creamos la tabla de los comentarios
create table comentarios(
id int(4) not null,
nick varchar(255),
email varchar(255),
comentario blob, key(id))

Código:
<?
//recibimos la variable id enviada en el enlace por GET
$id=$_GET[id];
//conectamos a la base
$connect=mysql_connect("servidor","nombre de la base","pass")';
//Seleccionamos la base
mysql_select_db("nombre de la base",$connect);
//hacemos las consultas
$result=mysql_query("select * from noticias where id_noticia='$id'"
,$connect);
//Una vez seleccionado el registro, mostramos la noticia completamente
<?
while($row=mysql_fetch_array($result))
{
echo '<h2>'.$row[titulo].'</h2><br>
<p>'.$row[articulo].'</p><br>
<tu div>'.$row[autor].' | '.$row[fecha].' | '.$row[categoria].' |
'<a href="ver.php?id='.$row[id].'">comentarios()</a> |
<a href="editar.php?id='.$row[id].'">editar</a>';</tu div>
}
mysql_free_result($result)
?>

La manera de mostrar la noticia completa es idéntica que en el script del index.php visto en la primera parte . Ahora haremos las modificaciones para mostrar los comentarios.
Código:
<?
//recibimos la variable id enviada en el enlace por GET
$id=$_GET[id];
//conectamos a la base
$connect=mysql_connect("servidor","nombre de la base","pass")';
//Seleccionamos la base
mysql_select_db("nombre de la base",$connect);
//hacemos las consultas
$result=mysql_query("select * from noticias where id_noticia='$id'"
,$connect);
//Una vez seleccionado el registro, mostramos la noticia completamente
<?
while($row=mysql_fetch_array($result))
{
result2=mysql_query("select * from comentarios where id_noticia='$id'"
,$connect);
$totalcomentarios=mysql_num_rows($result2);
echo '<h2>'.$row[titulo].'</h2><br>
<p>'.$row[articulo].'</p><br>
<tu div>'.$row[autor].' | '.$row[fecha].' | '.$row[categoria].' |
'<a href="ver.php?id='.$row[id].'">comentarios('.$totalcomentarios.')</a> |
<a href="editar.php?id='.$row[id].'">editar</a>';</tu div>
}
mysql_free_result($result)
?>

Acá agregamos unas líneas al bucle while solamente para saber la cantidad de cometarios que pertenecen a este (1, 2, 0 la cantidad x de comentarios por artículo) y lo almacenamos en la variable $totalcomentarios

Ahora veremos el código para seleccionar los comentarios y visualizarlos

Código:
<?
echo '<h2>Comentarios:</h2><br>
//hago el llamado a la base
$result3=mysql_query("select * from comentarios where id_noticia='$id'"
,$connect);
//Bucle while para visualizarlos
while(rows=mysql_fetch_array($result3)
{
echo '<p>'.$rows[comentario].'</p>
<tu div>'.$rows[nick] .'| '.$rows[email].'</tu div>
';
?>

Mostramos los comentarios y ahora pondremos un formulario en donde puedan escribirlos

Código:
<form action="editacomentarios.php" method="post">
<input type="hidden" name="id" value="'$id'"><br>
Nick:<br>
<input type="text" name="nick"><br>
E-Mail:<br>
<input type="text" name="email"><br>
Escriba el comentario<br>
<textarea name="comentario" cols="50" rows="10"></textarea>
<br>
< input type="submit" value="Enviar comentario"><br>
</form>

Acá el formulario enviará las variables al script editacomentarios.php el cual las procesará y llenará la tabla comentarios
Nota: Nótese que se envia la variable $id en un campo oculto, esto servirá para saber a qué noticia pertenece dicho comentario

Código:
<?
//editacomentarios.php
//recibimos las variables enviadas por el formulario
$id=$_POST[id];
$nick=$_POST[nick];
$email=$_POST[email];
$comentario=$_POST[comentario];
//conectamos a la base
$connect=mysql_connect("servidor","nombre de la base","pass")';
//Seleccionamos la base
mysql_select_db("nombre de la base",$connect);
//Ingresamos los comentarios a su tabla
mysql_query("insert into comentarios(id,nick,email,comentario)
values('$id','$nick','$email','$comentario'",$connect)
header("location: ver.php?id='.$id.'");
?>
Con los comentarios insertados en su tabla queda listo y finalizado el sistema de noticias. Disfrútenlo
Conclusiones

Si bien este modesto sistema de noticias debería funcionar a la perfección y prestar una funcionalidad digna, es importante señalar que puede mejorar mucho, incluyéndole por ejemplo: Fechas en español, CSS sin dudas, algún paginador y sentencia limit para visualizar cantidades X de artículos por páginas, directivas de seguridad como sistema de auntentificación, restringir etiquetas html en los comentarios, etc. Eso ya queda en sus manos y estoy seguro que lo pueden mejorar mucho.

En cuanto al autor puedo decirles que soy un aprendíz de PHP y leyéndo tutoriales y mucho google logré terminar mi blog y crear este pequeño artículo, que debido a mi calidad de aprendíz puede contener muchos errores, aunque no mayores


Alejandro Suazo.
Código:
http://triple.chileasesores.com
En línea

Entra a esta página y mira las mejores recetas de Nicaragua Click aquí




Cesar110888
Militante
**

Agradecimientos: 2
Desconectado Desconectado

Mensajes: 337



« Respuesta #1 : Mayo 22, 2009, 06:59:00 »

se agradece, bastante explicativo

Saludos:::...
En línea
Dj Link
Yo solo se que no se nada
Administrador
Hampón Calificado
*****

Agradecimientos: 43
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1804


Listo para cooperar con el foro


WWW
« Respuesta #2 : Mayo 22, 2009, 07:47:01 »

de nada men todo para ayudar Cool
En línea

Entra a esta página y mira las mejores recetas de Nicaragua Click aquí




marlon
Fresco
*

Agradecimientos: 0
Desconectado Desconectado

Mensajes: 226



« Respuesta #3 : Junio 06, 2009, 04:26:13 »

excelente el aporte
En línea

Entra a esta página y mira las mejores recetas de Nicaragua Click aquí




Enfermin
Fresco
*

Agradecimientos: 0
Desconectado Desconectado

Mensajes: 9



« Respuesta #4 : Julio 20, 2009, 05:29:53 »

Aun aprendo PHP pero no pude evitar darme cuenta de lo sgte:
Citar
select * from noticias order by fecha Desc

nunca se recomienda usar "*" porque sobrecargaria innecesariamente la consulta con campos no utilizados, y si en el futuro se extendiera la tabla seria peor  Lips Sealed

se recomienda mencionar directamente la tabla ejemplo:

Citar
select fecha from noticias order by fecha Desc


Citar
mysql_query("insert into comentarios(id,nick,email,comentario)
values('$id','$nick','$email','$comentario'",$connect)
aqui no estas filtrando las variables entrantes, por lo que el script seria vulnerable a ataques XSS e inyecciones SQL

se recomienda usar mysql_real_escape_string para escapar datos por el usuario mal intencionado  Rock On!

saludos  Grin
En línea

Entra a esta página y mira las mejores recetas de Nicaragua Click aquí




Dj Link
Yo solo se que no se nada
Administrador
Hampón Calificado
*****

Agradecimientos: 43
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1804


Listo para cooperar con el foro


WWW
« Respuesta #5 : Julio 21, 2009, 10:27:59 »

tu punto es balido enfermin, y pues esto lo podriamos utilizar como machote, cada quien es libre de hacerle sus modificaciones, ademas en el primer punto que mencionas, pues la consulta puede depender de lo que quieras mostrar por eso la llamada*, ahora que si uno solo quiere mostrar unos dos o tres datos pues simplemente mandarlos a llamar individualmente, detodos modos tus puntos son balidos Rock On! Rock On!

Salu2
En línea

Entra a esta página y mira las mejores recetas de Nicaragua Click aquí




Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  



Plexinium Team - Fondos de Pantalla - juegos de vestir

Powered by SMF 1.1.11 | SMF © 2006-2007, Simple Machines LLC
Debu Theme - Sefa
Página creada en 0.318 segundos con 21 consultas.