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 `sn_categorias` (
`cat_ID` int(11) NOT NULL auto_increment,
`catCategoria` varchar(100) NOT NULL,
PRIMARY KEY (`cat_ID`)
) ENGINE=MyISAM;
CREATE TABLE `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