Muchas de las interrogantes que veo en los foros es acerca de como crear un Sistema de Noticias o dudas con respecto al tema. Aquí intentare explicar como se puede hacer de manera sencilla y fácil.
En esta primera parte crearemos una pequeña Base de Datos MySQL, con un par de tablas, Noticias y Categorías, además de los archivos que necesitamos para añadir dichas categorías y noticias a la BD y validaremos los formularios, para evitar que se ingresen registros vacíos. Así pues, manos a la obra.
La Base de Datos
En este ejemplo, la BD tendrá una estructura sencilla, la tabla Categorías (sn_categorias) estará formada por dos campos, cat_ID y catCategoria, a su vez, la tabla Noticias (sn_noticias) contendrá los campos not_ID, notTitulo, notTexto y notCategoriaID. A continuación el codigo SQL de la misma:
CREATE TABLE IF NOT EXISTS `sn_categorias` ( `cat_ID` int(11) NOT NULL AUTO_INCREMENT, `catCategoria` varchar(100) NOT NULL, PRIMARY KEY (`cat_ID`) ) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `sn_noticias` ( `not_ID` int(11) NOT NULL AUTO_INCREMENT, `notTitulo` varchar(255) NOT NULL, `notTexto` text NOT NULL, `notCategoriaID` int(11) NOT NULL, PRIMARY KEY (`not_ID`) ) ENGINE=MyISAM;
Como podemos observar, ambas tablas están relacionadas entre si mediante los campos cat_ID de la tabla Categorías y notCategoriaID de la tabla Noticias, cada noticia pertenecerá a una categoría especifica. Mas adelante, complicaremos un poquito el código y explicare como asignarle mas de una categoría a cada noticia.
Una vez logrado esto, ya estamos listos para el siguiente paso, conectarnos a nuestro servidor, seleccionar la BD e insertar los registros en la misma.
La conexión
Esta parte es bien sabida por todos, si tienes dudas, puedes revisar el Manual de PHP en la sección correspondiente a este tema
Archivo de conexión (db-cnx.php)
<?php $db_link = mysql_connect('localhost', 'root', ''); if(!$db_link){ die('No se pudo conectar: ' . mysql_error()); } $db_selected = mysql_select_db('sistemanoticias', $db_link); if(!$db_selected){ die('No se selecciono la BD: ' . mysql_error()); } ?>
Ahora, solo nos queda llenar nuestra BD, para lo cual necesitamos de un par de formularios que nos permitan agregar los registros (categorías y noticias) que queramos.
Agregando nuevas categorías
A partir de aquí ya estaremos entrando en acción. Nos creamos un nuevo archivo y lo nombramos add-categoria.php, en el tendremos un formulario y un script php que nos permitirá validar e insertar los datos a la BD, en este caso a la tabla Categorías.
<?php // incluimos el archivo de conexion include ('db-cnx.php'); // recibimos el formulario if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar'){ // comprobamos que el formulario no envie campos vacios if(!empty($_POST['catCategoria'])){ // creamos la variable y le asignamos el valor a insertar $catCategoria = $_POST['catCategoria']; // hacemos el INSERT en la BD $sqlInsertCat = mysql_query("INSERT INTO sn_categorias (catCategoria) VALUES ('$catCategoria')", $db_link) or die(mysql_error()); // enviamos un mensaje de exito echo "Los datos fueron gurdados correctamente"; }else{ // si el formulario viene vacio // enviamos un mensaje de error echo "Debe llenar el formulario"; } } ?> <!-- el formulario --> <form name="categoria" action="<?php $_SERVER['PHP_SELF'] ?>" method="post"> <p> Nueva Categoría<br /> <input type="text" name="catCategoria" /> <input type="submit" name="enviar" value="Enviar" /> </p> </form>
Agregando las noticias
Ya estamos a punto de terminar esta primera parte, solo nos queda agregar las noticias y asignarle a cada una de ellas una categoría. Ahora, creamos un nuevo archivo y lo llamamos add-noticia.php, igual validaremos el formulario para que no se envíen campos vacíos, ademas que nos auxiliaremos de un bucle while, para recuperar las categorías previamente guardadas.
<?php // incluimos el archivo de conexion include ('db-cnx.php'); // recibimos el formulario if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar'){ // comprobamos que el formulario no envie campos vacios if(!empty($_POST['notTitulo']) && $_POST['notTexto'] && $_POST['notCategoriaID']){ // creamos las variables y les asignamos los valores a insertar $notTitulo = $_POST['notTitulo']; $notTexto = $_POST['notTexto']; $notCategoriaID = $_POST['notCategoriaID']; // hacemos el INSERT en la BD $sqlInsertNot = mysql_query("INSERT INTO sn_noticias (notTitulo, notTexto, notCategoriaID) VALUES ('$notTitulo', '$notTexto', '$notCategoriaID')", $db_link) or die(mysql_error()); // enviamos un mensaje de exito echo "Los datos fueron gurdados correctamente"; }else{ // si el formulario envia algun campo vacio // enviamos un mensaje de error echo "Debe llenar todos los campos del formulario"; } } ?> <!-- el formulario --> <form name="noticia" action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> <p> Título de la Noticia<br /> <input type="text" name="notTitulo" size="50" /> </p> <p> Texto de la Noticia<br /> <textarea name="notTexto" rows="10" cols="50"></textarea> </p> <p> Categoría<br /> <select name="notCategoriaID"> <option value="">Escoger de la Lista</option> <?php // asignamos una categoria a la noticia // mediante un select $sqlQueryCat = mysql_query("SELECT * FROM sn_categorias", $db_link) or die(mysql_error()); // creamos un bucle while // que nos muestre todas las categorias // que tenemos guardadas en la BD while($rowCat = mysql_fetch_array($sqlQueryCat)){ echo "<option value='$rowCat[cat_ID]'>$rowCat[catCategoria]</option>"; } ?> </select> </p> <p> <input type="submit" name="enviar" value="Enviar" /> </p> </form>
Aquí quiero hacer un pequeño paréntesis, como podemos ver, hemos creado un campo select que muestra los registros de la tabla Categorías y cuyo value es el campo id de cada registro, lo que se logra con esto es que en el campo notCategoriaID se guarde el id de la categoría asignada a dicha noticia, es aquí donde se cumple la relación entre las tablas que ya mencionamos antes.
Concluyendo esta primera parte
Hasta aquí, ya tenemos la mitad del camino recorrido, no ha sido para nada difícil crearnos esta primera parte de nuestro Sistema de Noticias. Ahora nos queda para la segunda parte explicar como recuperar los datos y mostrarlos.
Espero les sea útil este pequeño ejemplo y si tienes alguna inquietud o algo que agregar, pues estoy dispuesto a responder cualquier duda o recibir todas las criticas y sugerencias que tengas.
Saludos y Suerte
buen tutorial gracias…
Hola que tal, por cierto muy bueno el tutorial, excelente para personas como yo que recien empeizan… peor mira, tengo un problemita en la siguiente linea esta bien escrito o va contactenado:
while($rowCat = mysql_fetch_array($sqlQueryCat)){
echo “$rowCat[catCategoria]”;
si podes revisar esa parte por no logro hacerlo funcionar
GRACIAS
Hola @CECILIA, puedes decir cual es el error que te da??? Tal vez debas cambiar las comillas, me explico, wrodpress sustituye algunos caracteres a la hora de hacer INSERT en su BD, intenta cambiar las comillas que tienes aquí (“) por la doble comillas normal (en tu codigo).
Saludos y suerte
Rogertm:
Muchas gracias por tu aporte muy bueno y claro, no sabes lo agradecida que estoy pues soy algo novata aun y me justo me han pedido un sistema no sabía bien por donde empezar. Gracias!!!!
Ya estas entre mis favoritos.
Saludos
Muy bueno el tutorial pero tengo un problema que es que no puedo conectarme a la base de datos.
El archivo db-cnx me marca un error que es:
Parse error: syntax error, unexpected T_STRING in C:\inetpub\vhosts\turfrock.com.ar\httpdocs\xhtml\noticias\db-cnx.php on line 2
Error in my_thread_global_end(): 1 threads didn’t exit.
A que se debe? Me parece que esta mal configurado el ruteo.
Que debo colocar exactamente en la linea 2? Podrias dar un ejemplo?
Agradeceria tu respuesta
Hola @Pablo, por lo que puedo ver y entiendo, tienes instalado IIS (lo digo por la ruta C:\inetpub\…), tal vez tengas que configurar algo en tu servidor, pero realmente no se por que el error.
Lo que tenemos en la linea 2 if(!$db_link){… es sencillamente, que si la variable se evalúa como FALSE, que mate el proceso y envíe un mensaje de error. Por otro lado, te sugiero que no copies y pegues el código, es que wordpress modifica las comillas.
Saludos y suerte
PD: Llevo unos días ausente por que me estoy recuperando de una cirugía. x_O
PRIMERO Q NADA TE FELICITA ESTA ,UY BUENO EL CODIGO PERO TENGO CIERTO PROBLEMAS CUANDO LO CORRO ME APARECE ESTO Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\AppServ\www\otro\list-noticia.php on line 19
mysql_error, ES PARA LISTAR NOTICAS Q ES LO Q ME INTERESA AL IGUAL CUANOD QUIERO LISTAR LAS CATEGORIAS, SERA ME PUEDES AYUDAR, TE LO AGRADECERIA
disculpa ya resolvi, era una tonteria…jejeje, pero ahora si quisiera saber como hago para borrar las noticias y las categorias
Hola @M@NDYS, me alegra que resolvieras el errorcillo ;).
Por lo de borrar los registros, te invito a que eches un vistazo a este link. De todas formas deja ver si me animo y escribo algo sobre el tema.
Saludos y Suerte
Hola, yo tengo un sistema parecido instalado en mi web, pero queria saber si alguien aqui puede pasarme alguna direccion de algun tutorial para instalar algun sistema d noticias de los que ya vienen hechos, algo como el cutenews pero que este en un estado mas avanzado.Gracias
chido
no me funciona algo me sale un error me podrias ayudar por favor
este es el error que sale:
Parse error: syntax error, unexpected T_STRING in /home/a3202346/public_html/noticias/add-categoria.php on line 15
y este el codigo:
<form name=”categoria” action=”” method=”post”>
Nueva Categoría
en la parte del INSERT ES DONDE ESTA EL ERROR
GRACIAS DE ANTEMANO
@juan eso debe ser porqie tienes alguna comilla mal cerrada, revisa bien ese cogigo.
Saludos y suerte
bueno gracias ya lo solucione ahora el problema que poseo es que no me esta alojando los datos enviados de la nueva categoria en la base de datos pero me dice que que el dato ha sido ingresado
barbaro!. el unico problema (que no es un problema) son las comillas dobles y simples. Recomiendo remplazarlas todas. Anda barbaro
Hola amigo en primer lugar darle las gracias por todos sus tutoliares los cuales me han servido mucho de ayuda.
Pero….. siempre hay un pero jejejeje
ahora me encuentro con que tengo un pequeño problema y es que a la hora de listar los registros me muestra los ID de las categorias,regiones y identificativos.
he de aclarar que yo me he basado en este tutorial para hacerlo todo y he ido creando tablas nuevas es hay el caso de regiones,categorias y identificativos dejandolo todo de la siguiente manera :
CREATE TABLE `categorias` (
`cat_ID` int(11) NOT NULL auto_increment,
`catCategoria` varchar(100) NOT NULL,
PRIMARY KEY (`cat_ID`)
) ENGINE=MyISAM;
CREATE TABLE `regiones` (
`reg_ID` int(11) NOT NULL auto_increment,
`regRegiones` varchar(100) NOT NULL,
PRIMARY KEY (`reg_ID`)
) ENGINE=MyISAM;
CREATE TABLE `identificativo` (
`ident_ID` int(11) NOT NULL auto_increment,
`identIdentificativo` varchar(100) NOT NULL,
PRIMARY KEY (`ident_ID`)
) ENGINE=MyISAM;
CREATE TABLE `empresas` (
`emp_ID` int(11) NOT NULL auto_increment,
`empNombre` varchar(255) NOT NULL,
`empTitulo` text NOT NULL,
`empDireccion` text NOT NULL,
`empTexto` text NOT NULL,
`empTelefono` text NOT NULL,
`empCP` text NOT NULL,
`empWeb` text NOT NULL,
`empTipo` text NOT NULL,
`empEmail` text NOT NULL,
`empDNI` text NOT NULL,
`empCategoriaID` int(11) NOT NULL,
`empRegionesID` int(11) NOT NULL,
`empIdentificativoID` int(11) NOT NULL,
PRIMARY KEY (`emp_ID`)
) ENGINE=MyISAM;
y a la hora de registrar y mostrar los datos lo tengo asi en un archivo php llamado list-empresas.php para listar lo registrado y el de registro llamado empresas.php :
este seria el de empresas.php
<?php
include (‘db-cnx.php’);
if(isset($_POST['enviar']) && $_POST['enviar'] == ‘Enviar’){
if(!empty($_POST['empNombre']) &&
$_POST['empTitulo'] &&
$_POST['empDireccion'] &&
$_POST['empTexto'] &&
$_POST['empTelefono'] &&
$_POST['empCP'] &&
$_POST['empWeb'] &&
$_POST['empIdentificativoID'] &&
$_POST['empEmail'] &&
$_POST['empDNI'] &&
$_POST['empCategoriaID'] &&
$_POST['empCategoriaID']){
$empNombre = $_POST['empNombre'];
$empTitulo = $_POST['empTitulo'];
$empDireccion = $_POST['empDireccion'];
$empTexto = $_POST['empTexto'];
$empTelefono = $_POST['empTelefono'];
$empCP = $_POST['empCP'];
$empWeb = $_POST['empWeb'];
$empIdentificativoID = $_POST['empIdentificativoID'];
$empEmail = $_POST['empEmail'];
$empDNI = $_POST['empDNI'];
$empCategoriaID = $_POST['empCategoriaID'];
$empRegionesID = $_POST['empRegionesID'];
$sqlInsertemp = mysql_query(“INSERT INTO empresas
(empNombre, empTitulo, empDireccion,
empTexto, empTelefono, empCP, empWeb,
empIdentificativoID, empEmail, empDNI,
empCategoriaID, empRegionesID)
VALUES (‘$empNombre’, ‘$empTitulo’, ‘$empDireccion’,
‘$empTexto’, ‘$empTelefono’, ‘$empCP’,
‘$empWeb’, ‘$empIdentificativoID’, ‘$empEmail’,
‘$empDNI’, ‘$empCategoriaID’, ‘$empRegionesID’)”,
$db_link) or die(mysql_error());
echo “<h2>Los datos fueron gurdados correctamente</h2>”;
}else{
echo “<h2>Debe llenar todos los campos del formulario</h2>”;
}
}
?>
<form name=”empresas” action=”<?php $_SERVER['PHP_SELF']; ?>” method=”post”>
<p>
Nombre o Razón Social:<br />
<input type=”text” name=”empTitulo” size=”50″ />
</p>
<p>
<p>
Persona de Contacto:<br />
<input type=”text” name=”empNombre” size=”30″ />
</p>
<p>
NIF/CIF:<br />
<input type=”text” name=”empDNI” size=”10″ />
</p>
<p>
Dirección:<br />
<input type=”text” name=”empDireccion” size=”50″ />
</p>
<p>
Categoría:<br />
<select name=”empCategoriaID”>
<option value=”">Escoger de la Lista</option>
<?php
$sqlQueryCat = mysql_query(“SELECT * FROM categorias”, $db_link)
or die(mysql_error());
while($rowCat = mysql_fetch_array($sqlQueryCat)){
echo “<option value=’$rowCat[cat_ID]‘>$rowCat[catCategoria]</option>”;
}
?>
</select>
</p>
<p>
Región:<br />
<select name=”empRegionesID”>
<option value=”">Escoger de la Lista</option>
<?php
$sqlQueryCat = mysql_query(“SELECT * FROM regiones”, $db_link)
or die(mysql_error());
while($rowCat = mysql_fetch_array($sqlQueryCat)){
echo “<option value=’$rowCat[reg_ID]‘>$rowCat[regRegiones]</option>”;
}
?>
</select>
</p>
<p>
CP:<br />
<input type=”text” name=”empCP” size=”9″ />
</p>
<p>
Teléfono:<br />
<input type=”text” name=”empTelefono” size=”10″ />
</p>
<p>
E-Mail:<br />
<input type=”text” name=”empEmail” size=”35″ />
</p>
<p>
Web:<br />
<input type=”text” name=”empWeb” size=”35″ />
</p>
<p>
Empresa o Profersional:<br>
<input name=”empIdentificativoID” id=”empIdentificativoID” value=”1″ type=”checkbox”>Empresaes <input name=”empIdentificativoID” id=”empIdentificativoID” value=”2″ type=”checkbox”>Profesional
<br>
[al menos un tipo debe ser seleccionado]
</p>
<p>
Descripcion de la Empresa:<br />
<textarea name=”empTexto” rows=”10″ cols=”50″></textarea>
</p>
<p>
<input type=”submit” name=”enviar” value=”Enviar” />
</p>
</form>
y este seria el de list-empresas.php
<?php
include (‘db-cnx.php’);
if(isset($_GET['id']) && $_GET['categoria']){
$cat_ID = $_GET['id'];
$categoria = $_GET['categoria'];
$clausula = “WHERE empCategoriaID = ‘$cat_ID’”;
$titulo = “Empresas en la categoria $categorias”;
}else{
$titulo = “Todas las empresas”;
}
$sqlQueryemp = mysql_query(“SELECT empNombre, empTitulo, empDireccion, empTexto, empTelefono, empCP, empWeb, empIdentificativoID, empEmail, empDNI, empCategoriaID, empRegionesID FROM empresas
$clausula”, $db_link)
or die(mysql_error());
echo “<h1>$titulo</h1><hr>”;
while($rowemp = mysql_fetch_array($sqlQueryemp)){
echo “<h2>$rowemp[empTitulo]</h2>”;?>
<b>Persona de Contacto:</b> <?
echo nl2br($rowemp['empNombre']);?><br><br>
<b>NIF/CIF:</b> <?
echo nl2br($rowemp['empDNI']);?><br><br>
<b>Dirección:</b> <?
echo nl2br($rowemp['empDireccion']);?><br><br>
<b>Categoría:</b> <?
echo nl2br($rowemp['empCategoriaID']);?> <br><br>
<b>Región:</b> <?
echo nl2br($rowemp['empRegionesID']);?><br><br>
<b>CP:</b> <?
echo nl2br($rowemp['empCP']);?><br><br>
<b>Teléfono:</b> <?
echo nl2br($rowemp['empTelefono']);?><br><br>
<b>E-Mail:</b> <?
echo nl2br($rowemp['empEmail']);?><br><br>
<b>Web:</b> <?
echo nl2br($rowemp['empWeb']);?><br><br>
<b>Empresa o Profesional:</b> <?
echo nl2br($rowemp['empIdentificativoID']);?><br><br>
<b>Descripcion de la Empresa:</b> <?
echo nl2br($rowemp['empTexto']);?><br><br>
<br><hr>
<?
}
?>
solo nesesitaria saber como o de que forma puedo hacer que envez de mostrarme el id de las categorias,regiones o identificativos me muetre el nombre de ellas,
Muchas gracias por el gran trabajo que realiza amigo y le estare eternamente agradecido de su respuesta ya que ando algo liado con este tema,saludos
ya lo solucione en foros del web amigo,de todos modos gracias y un saludo
Pues que bueno @javi… Suerte en todo
Hola de nuevo se me olvido decir que la solucion por si alguien la nesesita esta aqui : http://www.forosdelweb.com/f18/mostrar-nombre-vez-id-690823/#post2873693
ahora tengo otro pequeño problema y es que necesito crear subcategorias dentro de las categorias y de el mismo modo dentro de las regiones nesesitaria crearle subcategorias para poder meter los pueblos de cada ciudad.
las tablas ya em quedaron calro mas o menos como crearlas y asemejarlas pero ala hora de insertarlas en la bd mediante el archivo php no se como hacerlo ya que solo tengo puesto para insertar categorias.
la tabla actual seria esta :
CREATE TABLE `categorias` (
`cat_ID` int(11) NOT NULL auto_increment,
`catCategoria` varchar(100) NOT NULL,
PRIMARY KEY (`cat_ID`)
) ENGINE=MyISAM;
y el archivo categorias.php para insertarlas seria este:
<?php
include (‘db-cnx.php’);
// recibimos el formulario
if(isset($_POST['enviar']) && $_POST['enviar'] == ‘Enviar’){
// comprobamos que el formulario no envie campos vacios
if(!empty($_POST['catCategoria'])){
// creamos la variable y le asignamos el valor a insertar
$catCategoria = $_POST['catCategoria'];
// hacemos el INSERT en la BD
$sqlInsertCat = mysql_query(“INSERT INTO categorias (catCategoria)
VALUES (‘$catCategoria’)”, $db_link)
or die(mysql_error());
// enviamos un mensaje de exito
echo “<h2>Los datos fueron guardados correctamente</h2>”;
}else{
// si el formulario viene vacio
// enviamos un mensaje de error
echo “<h2>Debe llenar el formulario</h2>”;
}
}
?>
<form name=”categoria” action=”<?php $_SERVER['PHP_SELF'] ?>” method=”post”>
<p>
Nueva Categoría<br />
<input type=”text” name=”catCategoria” />
<input type=”submit” name=”enviar” value=”Enviar” />
</p>
</form>
la idea es crear una tabla que fuese algo asi :
CREATE TABLE `categorias` (
`cat_ID` int(11) NOT NULL auto_increment,
`catCategoria` varchar(100) NOT NULL,
`catSubcategoria` varchar(100) NOT NULL,
PRIMARY KEY (`cat_ID`)
) ENGINE=MyISAM;
pero el problema llega a la hora de insertarlas a la bd y que pudiera meter mas de una sola subcategoria por cada categoria una vez conseguida esta ya la aplicaria del mismo modo para las regiones y los pueblos como si se tratasen de categorias y subcategorias.
se les ocurre algo de como poder hacerlo?
gracias de nuevo amigo.
pues no entiendo mucho , seria mejor algun videotutorial . jejejeje
Excelente!, funciono a la perfeccion!, me gustaria saber como hago para que en la lista de noticias me las cargue de la ultima a la primera, osea al reves de lo que muestra por defecto, no se como hacer he provado con metiendo ORDER BY id DESC, pero no se si es correcto, y que que parte del scrip lo debo poner ya que probe y me da error de sintaxis, bueno muchas Gracias!
Pudiste resolver lo del orden en que se nuestran las noticias?
Saludos!
Hola Roger, he completado todo el tutorial, la 1º y la 2º parte, publico mi problema aquí debido a que creo que mi problema viene de esta parte.
Veamos, en mi web me da el siguiente mensaje:
Parse error: syntax error, unexpected ‘;’ in /home/distriker/domains/betaconsolas.com/public_html/probando/administracion/db-cnx.php on line 8
Pienso que el problema es la linea que te comenta ahí:
die(‘No se selecciono la BD: ‘ . mysql_error());
Pero he comparado la linea escrita por mi y la escrita por ti y no veo diferencia.
Por si el error está en otro lugar del documento, aquí te dejo mi codigo:
<?php
$db_link = mysql_connect(‘localhost’, ‘usuario de la base de datos’, ‘contraseña’);
if(!$db_link){
die(‘No se ha podido conectar: ‘ . mysql_error());
}
$db_selected = mysql_select_db(‘nombre de la base de datos’, $db_link);
if(!$db_selected{
die(‘No se selecciono la BD: ‘ . mysql_error());
}
?>
Muchas gracias por este tutorial :D
Saludos
Bueno, ese problema ya lo tengo solucionado.
Gracias por el tutorial.
Saludos
Aunque no se porque, pero ahora tengo este problema :(.
Saludos
a lo mejor es absurda mi pregunta pero todos hablais de crear la base de datos, pero ese codigo donde se mete?¿
gracias
Hola Roger ayudame no se como agregar comentarios
sucede que estoy haciendo un blog pero como si fuera una web no se nada sobre como ponerle comentarios, en otras palabras para que la gente ingrese sus comentarios y no se nada por favor ayudame te agradeceria mucho gracias
Gracias!!!! La verdad que estoy rompiendome la cabeza hace dias y leer lo que explicaste me ha sacado dudas. Muy bueno todo el detalle, grax por tomarte esa molestia
Realmente tu curso esta excelente, soy nuevo en esto de la elaboración de pag. y andaba buscando como crear un sistema de noticias para mi sitio, espero muy pronto pueda crearlo gracias a ustedes.