Autor Tema: Sistema de Noticias Simple - 1ª Parte  (Leído 13165 veces)

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Sistema de Noticias Simple - 1ª Parte
« en: 02 de Noviembre de 2006, 19:59:19 pm »
Hola PHPeros, este tutorial será el primero de los 3 que pretendo hacer sobre este tema ;)
Voy a intentar ayudaros lo maximo posible en cuanto al tema de los sistemas de noticias.

Para evitar confusiones, el sistema se hará utilizando una base de datos MySQL.

En esta primera parte del tutorial vamos a dedicarnos a crear la base del sistema de noticias. En la segunda parte del tutorial avanzaremos en el sistema añadiendo un archivo de administración sencillo y, por ultimo, en la tercera parte del tutorial se avanzará aun mas añadiendo opciones BBCode y Emoticonos.

Antes de nada vamos a comentar las partes basicas del Sistema de Noticias:
  • Formulario de Envio
  • Archivo de Muestra

[Formulario de Envio]:
El formulario será sencillo, 1 campo de texto, un cuadro de texto y un Boton de Envio.
Código: [Seleccionar]
<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>

Los datos enviados desde el formulario deben ser procesados y almacenados en la base de datos, eso lo conseguimos con el PHP. Para guardar datos en una base de datos MySQL debemos crear primeramente una tabla en la base de datos.

Para crear una tabla en la base de datos debemos usar codigo SQL:
Código: [Seleccionar]
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
);
Con el codigo SQL anterior crearemos una tabla llamada noticias en la que habrán 5 campos, ID (Numero Identificador de cada noticia), TITULO, NOTICIA, AUTOR (Lo usaremos en la 2ª parte del tutorial), FECHA (2ª Parte del tutorial).

Explicación Detallada del Codigo SQL anterior:
  • create table `noticias` // Crea una tabla llamada "noticias"
  • id int primary key auto_increment // Crea un campo llamado "id" que cada vez se incrementa en 1 unidad.
  • titulo varchar(255) not null // Crea un campo llamado "titulo" de tipo texto (Máx. 255 Caracteres) que puede ser nulo (vacio).
  • noticia text not null // Crea un campo llamado "noticia" de gran capacidad de texto
  • autor varchar(255) not null // Crea un campo llamado "autor" de tipo texto (Máx. 255 Caracteres) que puede ser nulo (vacio).
  • fecha varchar(255) not null // Crea un campo llamado "fecha" de tipo texto (Máx. 255 Caracteres) que puede ser nulo (vacio).


El formulario se procesa mediante PHP:
  • enviar.php
<?PHP
if (isset($_POST[&#39;enviar&#39;])) { //Se comprueba si el boton enviar ha sido pulsado
	
if (!empty(
$_POST[&#39;titulo&#39;]) && !empty($_POST[&#39;noticia&#39;])) { //Se comprueba si los campos no estan vacios
	
	
$sql "INSERT INTO `noticias` (titulo,noticia,autor,fecha) values"//Definimos el codigo para...
	
	
$sql.= "(&#39;".$_POST[&#39;titulo&#39;]."&#39;,&#39;".$_POST[&#39;noticia&#39;]."&#39;,&#39;Autor&#39;,&#39;".time()."&#39;)"; //...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>
<? ?>


Para mostrar la noticia, primero tenemos que extraerla de la base de datos y despues procesar los datos extraidos para mostrarlos adecuadamente.
  • noticias.php
<?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
	
	
echo &
#39;<table border="0" width="100%">
	
	
	
<
tr><td align="center">&#39;.$noticia[&#39;titulo&#39;].&#39;</td></tr>
	
	
	
<
tr><td>&#39;.$noticia[&#39;noticia&#39;].&#39;</td></tr>
	
	
	
<
tr><td>Enviada por &#39;.$noticia[&#39;autor&#39;].&#39; || Fecha: &#39;.$noticia[&#39;fecha&#39;].&#39;</td></tr>
	
	
</
table><hr>&#39;;
	
}
} else {
	
echo 
"No hay ninguna noticia publicada";
}
@
mysql_free_result($noticia); //Se borran los datos usados
?>


Funciones Utilizadas:
  • isset();   // Comprueba si una variable tiene valores
  • empty();   // Comprueba si una variable esta vacia
  • time();   // Devuelve la hora, fecha... del servidor
  • mysql_query();   // Ejecuta codigos SQL en la base de datos
  • mysql_num_rows();   // Devuelve numero de filas en una tabla MySQL
  • mysql_fetch_array();   // Extrae datos de una base de datos MySQL a una matriz
  • mysql_free_result();   // "Limpia" los datos extraidos de la base de datos.

Para entender completamente el codigo debes "saber":
  • Instrucciones PHP (condicionales, bucles, ...) --> Lee más...
  • Variables SuperGlobales ($_POST, $_GET, $_SERVER, ...)
  • Fundamentos BASICOS de MySQL

« Última modificación: 05 de Febrero de 2008, 00:12:15 am por naveda »
Por favor, leete las Normas


Comunidad PHPeros

Sistema de Noticias Simple - 1ª Parte
« en: 02 de Noviembre de 2006, 19:59:19 pm »

Desconectado RamFu

  • Moderadores Flash
  • PHPero Experto
  • ****
  • Mensajes: 778
  • Karma: 72
  • Sexo: Masculino
  • Programador y desarollador Actionscript y PHP
    • Ver Perfil
    • Google
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #1 en: 02 de Noviembre de 2006, 21:28:07 pm »
Muy Bueno ;)

Desconectado Enanotf

  • PHPer@
  • **
  • Mensajes: 52
  • Karma: 0
  • <? $Enanotf = "PHP Interested"; ?>
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #2 en: 02 de Noviembre de 2006, 21:48:03 pm »
Buenas tengo un pequeño problema con la tabla del SQL me da el siguiente error; si alguien me aclara como se arregla le doy las gracias de antemano ;)



Código: [Seleccionar]
Error

consulta SQL:

Errorconsulta SQL : 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
);

MySQL ha dicho: Documentación
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Error

consulta SQL:

CREATE TABLE `noticias` (
id int PRIM
« Última modificación: 02 de Noviembre de 2006, 21:53:04 pm por Enanotf »

Desconectado callosino

  • PHPer@
  • **
  • Mensajes: 62
  • Karma: 1
  • Sexo: Masculino
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #3 en: 03 de Noviembre de 2006, 15:40:03 pm »
Enanotf, a mi me pasaba eso, cuando posteo esto naveda por 1 vez, y cuando lo modifico y termino la 1 parte, lo intente otra vez y funciono, yo pienso que hay que esperar
Vivo en el Exilio de mi propia esperanza, esperando una respuesta de mi alma. ???? doshita no?

Desconectado -RiPeRcOp-

  • PHPer@ Fijo
  • ***
  • Mensajes: 206
  • Karma: 7
  • Sexo: Masculino
  • RiPeR, The House`s assistant
    • Ver Perfil
    • RevolutionW
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #4 en: 05 de Noviembre de 2006, 18:12:30 pm »
olle pues omo q cuando lo hago no me deja enviar las noticias es decir no tiene como abrirlas no tiene un archivo Conectar.php o algo hasi esta bien o esta sin terminar xD ???

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #5 en: 05 de Noviembre de 2006, 18:54:51 pm »
Yo doy por sentado que vosotros sabeis que hay que conectar a la base de datos, y eso os lo dejo a vosotros.... Recuerdo que no damos codigos enseñamos a crearlos... Y por lo tanto yo doy por entendido que al llegar a un nivel suficiente como para saber crear un sistema de noticia se sabe que para extraer datos de una base de datos es necesario conectarse a ella de antemano...

Bueno por si tu mente no ha entendido... CONCLUSION:
Debes conectar a la base de datos
Por favor, leete las Normas


Desconectado Drek

  • PHPer@ Fijo
  • ***
  • Mensajes: 193
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
    • radiogoods
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #6 en: 05 de Noviembre de 2006, 19:32:28 pm »
pero naveda aun tienes que acabarlo no? o ya esta listo

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #7 en: 05 de Noviembre de 2006, 19:39:41 pm »
Esta es la primera parte pero ya podeis empezar a verla y aprender a crear un sistema similar...
Por favor, leete las Normas


Desconectado Ishamato

  • PHPero Avanzado
  • ****
  • Mensajes: 346
  • Karma: 3
  • Sexo: Masculino
  • PHPero adicto
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #8 en: 06 de Noviembre de 2006, 20:59:20 pm »
>.< Aquí les dejo el código que edité.. me da error..
Citar
Parse error: syntax error, unexpected T_IF in /home/virtual/sitio103039/www/Sn/enviar.php on line 3
Aquí les dejo el archivo enviar.php
Citar
<?PHP
include ("conectar.php");
if (isset(
$_POST[&#39;enviar&#39;])) { //Se comprueba si el boton enviar ha sido pulsado
	
if (!empty(
$_POST[&#39;titulo&#39;]) && !empty($_POST[&#39;noticia&#39;])) { //Se comprueba si los campos no estan vacios
	
	
$sql "INSERT INTO `noticias` (titulo,noticia,autor,fecha) values"//Definimos el codigo para...
	
	
$sql.= "(&#39;".$_POST[&#39;titulo&#39;]."&#39;,&#39;".$_POST[&#39;noticia&#39;]."&#39;,&#39;Autor&#39;,&#39;".time()."&#39;)"; //...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>
<? ?>
El error sería en
Citar
if (isset($_POST['enviar'])) {
Pero en teoría está bien..  :-\
« Última modificación: 07 de Noviembre de 2006, 00:03:02 am por Ishamato »

<? echo "Aprendiendo y descubriendo poco a poco"; ?>

Desconectado Ishamato

  • PHPero Avanzado
  • ****
  • Mensajes: 346
  • Karma: 3
  • Sexo: Masculino
  • PHPero adicto
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #9 en: 06 de Noviembre de 2006, 21:48:22 pm »
Wee yo solito encontré el error!
Estaba en la 2 linia
Citar
include ("conectar.php");
Me dejé ; jeje.. error mio  ::)

<? echo "Aprendiendo y descubriendo poco a poco"; ?>

Desconectado Ishamato

  • PHPero Avanzado
  • ****
  • Mensajes: 346
  • Karma: 3
  • Sexo: Masculino
  • PHPero adicto
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #10 en: 06 de Noviembre de 2006, 23:27:37 pm »
Vale bien, ahora me dice que la noticia ha sido mandada correctamente pero, cuando voy a: noticias.php no visualizo nada.. probé de hacer:
include ("Sn/noticias.php") //"Sn" es la carpeta donde tengo el sistema de noticias
Y no me muestra nada  :-\
¿Lo mejor sería que no lo tubiera en una carpeta "Sn" y lo tubiera en la carpeta raíz?
« Última modificación: 06 de Noviembre de 2006, 23:33:23 pm por Ishamato »

<? echo "Aprendiendo y descubriendo poco a poco"; ?>

Desconectado JuAnCHO

  • PHPero Avanzado
  • ****
  • Mensajes: 327
  • Karma: 1
  • Sexo: Masculino
  • 33 Y Truco xD
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #11 en: 06 de Noviembre de 2006, 23:40:30 pm »
Vale bien, ahora me dice que la noticia ha sido mandada correctamente pero, cuando voy a: noticias.php no visualizo nada.. probé de hacer:
include ("Sn/noticias.php") //"Sn" es la carpeta donde tengo el sistema de noticias
Y no me muestra nada  :-\
¿Lo mejor sería que no lo tubiera en una carpeta "Sn" y lo tubiera en la carpeta raíz?
Yo siempre he usado include con archivos en al misma raiz. No se si así funcionará. Prueba a meterlo todo en una misma carpeta ;)

-----------------------------------------------------------------
" A un gran corazón ninguna ingratitud lo cierra,
   ninguna indeferencia lo cansa ".

Desconectado Raken

  • PHPero Avanzado
  • ****
  • Mensajes: 297
  • Karma: 30
  • Sexo: Masculino
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #12 en: 06 de Noviembre de 2006, 23:45:40 pm »
Sí, pueden usarse subdirectorios para la inclusión de páginas de include()
Raken - Moderador para PHP y HTML

Desconectado JuAnCHO

  • PHPero Avanzado
  • ****
  • Mensajes: 327
  • Karma: 1
  • Sexo: Masculino
  • 33 Y Truco xD
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #13 en: 06 de Noviembre de 2006, 23:47:30 pm »
Sí, pueden usarse subdirectorios para la inclusión de páginas de include()
oKis, Ya me has aclarado algo a mi tmb :D

-----------------------------------------------------------------
" A un gran corazón ninguna ingratitud lo cierra,
   ninguna indeferencia lo cansa ".

Desconectado Ishamato

  • PHPero Avanzado
  • ****
  • Mensajes: 346
  • Karma: 3
  • Sexo: Masculino
  • PHPero adicto
    • Ver Perfil
Re: Sistema de Noticias Simple - 1ª Parte
« Respuesta #14 en: 06 de Noviembre de 2006, 23:51:11 pm »
¿Entonces, donde está el error?

<? echo "Aprendiendo y descubriendo poco a poco"; ?>