[TUTORIAL]-Hacer un simple Sistema de Noticias

Iniciado por -sagitari-, 29 Diciembre 2006, 21:30 PM

0 Miembros y 1 Visitante están viendo este tema.

-sagitari-

- Pues como que me ha dado por aprender PHP... y pues estoy esperando pasandole una canción a una amiga por msn  ;D pues os voy a hacer aquí un tutorial de cómo hacer un simple sistema de noticias desde cero  :-*





[INTRODUCCIÓN]


  • El sistema de noticias que vamos a hacer va a ser MUY simple, es para aprender PHP simplemente y reforzar ideas.
  • El sistema de noticias que vamos a hacer hará uso de una base de datos, o sea que las noticias se guardarán en una base de datos MySQL


- El sistema de Noticias estará compuesto por únicamente dos archivos:


  • El formulario de envío de la noticia donde sale: "Título de la noticia" / "El texto de la noticia" / "Autor" y el botoncito de enviar para procesar la noticia.
    En este mismo archivo pondremos el código que hará que la noticia se guarde en la base de datos para que se muestre.
  • El archivo que mostrará las noticias que están guardadas en la base de datos.







[CREAR LA TABLA EN LA BASE DE DATOS DONDE SE GUARDARÁN LAS NOTICIAS]

- Para eso el host donde colgaremos/subiremos/pondremos nuestro sistema de noticias nos ha de proporcionar una base de datos, cabe recordar, que el sistema de noticias que vamos a hacer usa una base de datos.

- Por ejemplo gratishost (phoneacces.com) nos proporciona una base de datos.

- Yo os pondré el ejemplo de cómo crear una tabla en la base de datos partiendo desde un host que yo tengo suscrito en gratishost.






- Una vez ahí dentro de la base de datos, a la izquierda, buscamos este iconito:




- Y entonces, picamos ahí en ese iconito, que es para realizar una consulta SQL a través de la cual crearemos la tabla llamada noticias donde ahí se guardarán las noticias;




- El código que ponemos ahí para crear la tabla noticias es el siguiente:

create table `noticias` (
id int primary key auto_increment,
titulo varchar(255) not null,
noticia text not null,
autor varchar(255) not null,
fecha varchar(255) not null
);



- Lo explico:

create table `noticias` (
Crea una tabla con el nombre de noticias
/* esta tabla tendrá
5 campos */ --->

id int primary key auto_increment,
Crea un campo llamado id. El id es el número identificador, en este caso, el número que identificará cada noticia, y según si se crea una más, este número, va en incremento, aumenta.

titulo varchar(255) not null,
Crea un campo llamado titulo de tipo texto, el número de caracteres máximo permitido es de 255 y este campo, perfectamente puede estar vacío, ser "nulo".

noticia text not null,
Crea un campo llamado noticia que puede tener mucho texto, no hay límite de caracteres (si quieres ponerle, puedes).

autor varchar(255) not null,
Crea un campo llamado autor, el número de caracteres máximo permitido es de 255 y este campo, perfectamente puede estar vacío, ser "nulo".

fecha varchar(255) not null
Crea un campo llamado fecha, el número de caracteres máximo permitido es de 255 y este campo, perfectamente puede estar vacío, ser "nulo".

);
Fin de la consulta.

- Ok, ya tenemos la tabla noticias !!  ::)











[CREAR EL FORMULARIO PARA ENVIAR LAS NOTICIAS]

- Este formulario será un archivo llamado enviarnoticias.php.

- A este archivo se le tendría que poner protección un login o algo, para que si alguien , de casualidad descubriera este archivo para enviar las noticias, no pudiera enviar noticias así como si de su web se tratara.


- El formulario constará de:


  • Título de la noticia
  • Texto de la noticia
  • Autor

La fecha no la ponemos en el formulario porque la cogeremos directamente usando la función time() a la hora de ingresar la noticia en la base de datos.

- El código del formulario sería así:

<form action="enviarnoticias.php" method="POST">

Título de la noticia:<br>
<input type="text" name="titulo"><br>
<br>

Texto de la noticia:<br>
<textarea name="noticia"></textarea><br>
<br>

Autor:<br>
<input type="text" name="autor"><br>
<br>

<input type="submit" name="enviar" value="Enviar la noticia!">
</form>



- Y quedaría así en la web:



Precioso, ¿verdad?  ::) :P

Bueno, pues a ver, en este mismo archivo del formulario (enviarnoticias.php) hemos de poner el código "mágico"  :D que hará que la noticia se envíe a la base de datos.


- Sería este el código:

Citar<?
if (isset($_POST['enviar'])) {
/* Tenemos que comprobar que el botoncito ha sido clickado */

   
if (!empty($_POST['titulo']) && !empty($_POST['noticia']) && !empty($_POST['autor'])) {
/* Hemos de comprobar que todos los campos estén rellenos para poder procesar la noticia, si estuviera alguno vacío no se enviaría y saldría "Rellena todos los campos!" */

   

$sql = "INSERT INTO `noticias` (titulo,noticia,autor,fecha) values";
/* definimos esas variables de la tabla para que correspondan con las del formulario que son las mismas... */

   

$sql.= "('".$_POST['titulo']."','".$_POST['noticia']."','autor','".time()."')"; /* este código recogerá los datos de los campos del formulario y los insertará en la base de datos */
   

if (mysql_query($sql)) {
/*si la conexión se ha efectuado sale que se ha enviado la noticia satisfactoriamente */

echo "La noticia se ha enviado satisfactoriamente.";

/* de lo contrario, si no se efectuara la conexión con la base de datos saldría "Error al enviar la noticia"   
} else {
echo "Error al enviar la noticia.";
}

   
/*en el caso de que faltaran campos por completar en el formulario... */
} else {
   
echo "Rellena todos los campos!!";
}
} else {}
?>



- El código por ahora quedaría así:

Citar<?
if (isset($_POST['enviar'])) {
/* Tenemos que comprobar que el botoncito ha sido clickado */

   
if (!empty($_POST['titulo']) && !empty($_POST['noticia']) && !empty($_POST['autor'])) {
/* Hemos de comprobar que todos los campos estén rellenos para poder procesar la noticia, si estuviera alguno vacío no se enviaría y saldría "Rellena todos los campos!" */

   

$sql = "INSERT INTO `noticias` (titulo,noticia,autor,fecha) values";
/* definimos esas variables de la tabla para que correspondan con las del formulario que son las mismas... */

   

$sql.= "('".$_POST['titulo']."','".$_POST['noticia']."','autor','".time()."')"; /* este código recogerá los datos de los campos del formulario y los insertará en la base de datos */
   

if (mysql_query($sql)) {
/* si la conexión se ha efectuado sale que se ha enviado la noticia satisfactoriamente */

echo "La noticia se ha enviado satisfactoriamente.";

/* de lo contrario, si no se efectuara la conexión con la base de datos saldría "Error al enviar la noticia"   
} else {
echo "Error al enviar la noticia.";
}

   
/*en el caso de que faltaran campos por completar en el formulario... */
} else {
   
echo "Rellena todos los campos!!";
}
mysql_close($sql);
?>
<form action="enviarnoticias.php" method="POST">

Título de la noticia:<br>
<input type="text" name="titulo"><br>
<br>

Texto de la noticia:<br>
<textarea name="noticia"></textarea><br>
<br>

Autor:<br>
<input type="text" name="autor"><br>
<br>

<input type="submit" name="enviar" value="Enviar la noticia!">
</form>
<? } ?>


Pero está claro que en ningún momento hemos puesto los datos de la base de datos, entonces, cómo pretendemos conectarnos?!!!
>:( >:( :huh: :huh: :-* :-X



Es por eso que tenemos que poner los datos de la base de datos, user, pass, nombre db, host.
es por eso que entonces,
el código final de noticiasenviar.php es este (con el código de la conexión a la base de datos añadido al principio):

Citar<?
$dbhost = "localhost"; /* Has de poner el host de la db, en nuestro caso, en gratishost es localhost, ahí en los datos de nuestra cuenta salía , siempre en los datosde la cuenta del hosting, te proporcoinan estos datos */

$dbuser = "userdeladb"; /* el usuario para acceder a la base de datos */

$dbpass = "passdeladb"; /* la contraseña correspondiente al usuario para poder acceder a la base de datos */

$db = "nombredeladb" ; /* el nombre de la base de datos en nuestro caso , era: db_nombrehost_webspacemania_com , pero siempre lo podrás ver en los datos de la cuenta al igual que el usuario, password y host */

$conectar = mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($db,$conectar);
/* se realiza la conexión con los datos obtenidos, para eso usamos la función sql mysql_connect() */

?>

<?

if (isset($_POST['enviar'])) {
/* Tenemos que comprobar que el botoncito ha sido clickado */

   
if (!empty($_POST['titulo']) && !empty($_POST['noticia']) && !empty($_POST['autor'])) {
/* Hemos de comprobar que todos los campos estén rellenos para poder procesar la noticia, si estuviera alguno vacío no se enviaría y saldría "Rellena todos los campos!" */



$sql = "INSERT INTO `noticias` (titulo,noticia,autor,fecha) values";
/* definimos esas variables de la tabla para que correspondan con las del formulario que son las mismas... */

   

$sql.= "('".$_POST['titulo']."','".$_POST['noticia']."','autor','".time()."')"; /* este código recogerá los datos de los campos del formulario y los insertará en la base de datos */
   

if (mysql_query($sql)) {
/* si la conexión se ha efectuado sale que se ha enviado la noticia satisfactoriamente */

echo "La noticia se ha enviado satisfactoriamente.";

/* de lo contrario, si no se efectuara la conexión con la base de datos saldría "Error al enviar la noticia"   
} else {
echo "Error al enviar la noticia.";
}

   
/*en el caso de que faltaran campos por completar en el formulario... */
} else {
   
echo "Rellena todos los campos!!";
}
mysql_close($sql);
?>
<form action="enviarnoticias.php" method="POST">

Título de la noticia:<br>
<input type="text" name="titulo"><br>
<br>

Texto de la noticia:<br>
<textarea name="noticia"></textarea><br>
<br>

Autor:<br>
<input type="text" name="autor"><br>
<br>

<input type="submit" name="enviar" value="Enviar la noticia!">
</form>












[CREAR LA PÁGINA DONDE SE MOSTRARÁN LAS NOTICIAS]

- A este archivo que muestre las noticias lo llamaremos noticias.php

- Simplemente hemos de crear un archivo con un código que nos muestre lo que hay en la tabla noticias de nuestra base de datos de manera limpia y ordenada...


  • Se extraen los datos de la base de datos
  • Se procesan dichos datos
  • Se muestran los datos

- Lo que haremos será que las noticias se muestren por orden de la más reciente, arriba, entonces, ¿cómo lo haremos?
Pues como bien recordaréis, a cada noticia se le da un número identificador, entonces, el número más grande va el primero y el ID 1 esta noticia, la primera, irá abajo del todo, o sea, lo haríamos de la siguiente manera con este código:

Citar$query = @mysql_query("SELECT * FROM `noticias` ORDER BY `id` DESC");
véis, si os dais cuenta, ORDER BY 'id'
ahí es donde decimos que las muestre según el id.

Entonces, también se ha de comprobar si hay alguna noticia publicada para que en el caso de que no la haya, saliera "No hay noticias" para que no se quedara en blanco...

Y también, para que se mostraran las noticias, tenemos que hacer un bucle usando la función while() (mientras...)



- Entonces el código de noticias.php
sería algo así:

<?
$query = @mysql_query("SELECT * FROM `noticias` ORDER BY `id` DESC");
/* se ordenan según el id, explicado arriba */

if (@mysql_num_rows($query)) {
/* miramos a ver si hay algo publicado o no.... */



while ($noticia = @mysql_fetch_array($query)) {
/* para que se muestren las noticias una por una */





echo '<br> /* salto de línea */

/* sale el título de la noticia que
pusimos en el formulario */

<center><font face=verdana size=1 color=red><b>'.$noticia['titulo'].'</b></font><center><br><br>


/* sale todo el texto de la noticia
que pusimos en el
formulario */

<center><font face=verdana size=1><b>'.$noticia['noticia'].'</b></font><br><br>


/* Aquí se muestra que la noticia ha sido enviada por tal persona, y la fecha, pues sale la fecha en la que se ha enviado... */

<center><font face=verdana size=1 color=blue><b>Noticia enviada por '.$noticia['autor'].' || Fecha: '.$noticia</b></font>['fecha'].'</center><br>

<hr>';
}
} else {
echo "No hay noticias!!";
/* antes comprobamos para que mirara si hay noticias, pues esto es lo que saldría si no hubiera */
}
@mysql_free_result($noticia);
mysql_close($noticia);
?>



Y bueno, esto es todo !!   ::)
Espero que hayáis aprendido algo... yo sí... jeje  ;D
::)

Decidme si he puesto algo mal sobretodo porque no he prestado mucha atención a la hora de escribir los códigos >.<

дٳŦ٭

Dos cosas.

Te falta el archivo para borrar noticias y cerrar la conexión del MySQL. Ta weno el tuto  ;)


Con sangre andaluza :)


-sagitari-

#2
Dije que era un sistema de noticias muy sencillo =$
lo cual, o no se borran las noticias o las borras accediendo a la db! x'D

Porque puestos a borrar, también ponemos para que se editen, y de paso, las paginamos las noticias y ponemos comentarios y... y... entonces, ya no sería tan simple x'D  ;D ::)

//

.

Hans el Topo

uhm... y de inyecciones sql no hablamos no? xD

ta bastate bien, aunque muy básico  xD
 

Ertai

Si la felicidad se comprara, entonces el dinero sería noble.


void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}

дٳŦ٭

xD

Sigues sin cerrar la conexión  :P

Citar
mysql_close($sql);

Saludos


Con sangre andaluza :)


Red Mx

 ;D estaba pensando en hacer uno asi pero con PHP puro sin mysql me enamore de los archivos de texto algo parecido al easy chat pero pa noticias creo y asi ya predefinido no mas pa instalar en estos dias lo ago.


saludos !!!!
Desarrollar Malware Es Causa De Cancer...

Hans el Topo

Cita de: Ing_Amc en 30 Diciembre 2006, 05:23 AM
xD

Sigues sin cerrar la conexión  :P

Citar
mysql_close($sql);

Saludos

al salir de las funciones se cierran las conexiones solas xD
 

^^DarK MouL^^

Bueno esta muy buena la idea, pero tuve algunos inconvenientes y no me anda  :P:

Aca esta el codigo que tengo en noticias.php:
<html>
<body>
<?
$query = @mysql_query("SELECT * FROM `noticias` ORDER BY `id` DESC");
if (@mysql_num_rows($query))
{
while ($noticias = @mysql_fetch_array($query)) {
echo"<br>";
echo"<center><font face='verdana' size='1' color='red'><b>'.$noticias['titulo']'</b></font></center><br>";
echo"<br>";
echo"<center><font face='verdana' size='1' color='orange'><b>'.$noticias['noticia']'</b></font></center>"; 
echo"<br>";
echo"<br>";
echo"<center><font face=verdana size=1 color=blue><b>Noticia enviada por '.$noticias['autor'].' ||
Fecha: '.$noticias</b></font>['fecha'].'</center><br>";
echo"<hr>";
}
}
else
{
echo "No hay noticias!!";
}
@mysql_free_result($noticias);
mysql_close($noticias);
?>
</body></html>

Y me da el siguiente error en el firefox:
"Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\AppServ\www\Scripts\ej propios\Nueva carpeta\noticias.php on line 9"

Linea 9 está en rojo. Fíjense a ver si encuetran el problema. Gracias.

P.D. : Feliz año nuevo ;D.

дٳŦ٭

Te falta el punto de concatenación:


<?php
echo"<center><font face='verdana' size='1' color='red'><b>".$noticias['titulo']."</b></font></center><br>";
?>



Saludos


Con sangre andaluza :)