Un espacio para los entusiastas del web

Crear un foro en PHP y Mysql

Publicado el 17 de Junio, 2003

En este tutorial crearemos un foro desde cero aprendiendo a separar la programación del diseño, y modularizando nuestra aplicación para que sea simple de configurar y de adaptar.

La Estructura

Primero y antes que nada, debemos preparar la tabla en la base de datos que
contendrá todos los temas de nuestro foro. Lo que esta tabla tendrá, es la información
de nuestros mensajes, el autor del mismo, y otros datos que servirán para identificar
a que Tema pertenece un mensaje. Pero mejor, veamos la estructura propuesta:

CREATE TABLE `foro` (
  `id` int(7) NOT NULL auto_increment,
  `autor` varchar(200) NOT NULL default '',
  `titulo` varchar(200) NOT NULL default '',
  `mensaje` text NOT NULL,
  `fecha` datetime NOT NULL default '0000-00-00 00:00:00',
  `respuestas` int(11) NOT NULL default '0',
  `identificador` int(7) NOT NULL default '0',
  `ult_respuesta` datetime default NULL,
  KEY `id` (`id`)
) TYPE=MyISAM;

Veamos en detalle que campos tendrá nuestra tabla de Foros:

  • id: Será el identificador
    principal de la tabla. Sirve para diferenciar cada uno de los mensajes.
  • autor: El autor del
    mensaje.
  • titulo:
    El titulo que tendrá el mensaje. Si este mensaje es el iniciador de un tema,
    será el que mostrará en el home del Foro.
  • mensaje:
    El mensaje en si mismo.
  • fecha:
    Un campo DATETIME que indicará en que fecha se ha publicado este mensaje.
  • respuestas:
    Si este mensaje es el iniciador de un tema, aquí se acumularán la
    cantidad de respuestas que reciba.
  • identificador:
    Este campo guarda el valor del id del mensaje que se está respondiendo.
    Si el mensaje es iniciador de un tema, entonces este campo valdrá cero.
  • ult_respuesta:
    Si el mensaje es iniciador de tema, aqui se actualizará valor de acuerdo
    con la fecha de la última respuesta que haya recibido. Sirve para poder
    mantener un orden en los foros.

La sentencia SQL anterior,
pueden guardarla en un archivo.sql y correrla en su base de datos desde el href="http://phpmyadmin.sourceforge.net/">phpMyAdmin,
o si lo prefieren, pueden ingresarla línea por línea en un cliente
de texto de mySQL ( como el mySQL monitor). Una vez que hayan creado la tabla
en su base de datos, entonces podemos avanzar al siguiente paso.

Antes de ponernos a programar cualquier parte del foro, vamos a encargarnos
de hacer un pequeño script que realice una tarea que vamos a repetir mucho,
y que es conectarnos a la base de datos. Este script lo incluiremos en cada
página en la que tengamos que acceder a la base de datos:

Ejemplo de la pagina de configuracion.php

<?php
$bd_host = "localhost";
$bd_usuario = "user";
$bd_password = "password";
$bd_base = "nuestra_bd";

$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
?>

Cómo vemos, no hay gran ciencia en este script, tan solo
unas variables conteniendo la configuración de nuestra base de datos, y el código
mínimo y necesario para conectarnos y guardar el recurso de conexión en una
variable $con que luego utilizaremos cuando
hagamos nuestras consultas.

Los Templates

Antes de dar un paso más en la explicación, quiero hacerles unos comentarios
respecto al "simple" sistemita de templates que utilizaremos en el foro. Primero,
para aquellos que no sepan que es un Template, les recomiendo que lean los artículos
de href="http://www.zonaphp.com/index.php?modulo=articulo&accion=leer&id=9">Nok y de href="http://www.zonaphp.com/index.php?modulo=articulo&accion=leer&id=16">Luigi en nuestra sección de Templates de href="http://www.zonaphp.com/">Zonaphp.com,
por lo menos para que tomen una idea de que son y para que sirven.

Ahora, mi idea al utilizar templates, fue la de que los usuarios, pudieran modificar
a su gusto el aspecto del foro, sin por ello tener que tocar el código de la
aplicación. Esto es algo que el tutorial anterior no tenía en cuenta e incluía
todo el código HTML de salida dentro del código mismo del foro, lo cual no es
siempre recomendable. Lo que haremos en este caso es utilizar archivos .html
que dentro contendrán solo diseño ( o sea, código HTML ) y en los lugares en
los que deseemos colocar contenido "dinámico", utilizaremos el formato simple
para mostrar el contenido de variables, esto es : <?=$variable?>.

Para "interpretar" un template, primero lo leemos en memoria utilizando
la función file() y luego utilizaremos una
simple función a la que le pasaremos como parámetro el template y las variables
que hay que reemplazar. Para muestra, basta un botón:

Ejemplo de la pagina de ejemplo.html

Nombre: <b><?=$nombre?></b><br>
Edad : <b><?=$edad?></b><br>
Domicilio : <?=$domicilio?>
<hr>

Ejemplo de la pagina de ejemplo.php

<?php
function mostrarTemplate($tema, $variables)
{
    //var_dump($variables);
    extract($variables);
    eval("?>".$tema."<?");
}

$agenda = array(
    "0" => array("nombre"=>"Marcelo", "edad"=>"25", "domicilio"=>"VeraCRuz 342"),
    "1" => array("nombre"=>"Alejandra", "edad"=>"18", "domicilio"=>"Los Olmos 67"),
    "2" => array("nombre"=>"Micaela", "edad"=>"23", "domicilio"=>"Prof. Mariño 8")
);
$tpl = implode("", file("ejemplo.html"));
foreach($agenda as $registro)
{
    mostrarTemplate($tpl, $registro);
}
?>

Aquí vemos como, partiendo de los datos que tenemos en
un array, los mostramos basándonos en un simple template. La función mostrarTemplate toma como parámetros el contenido del template y un array asociativo con los
valores a reemplazar. La función de PHP extract() se encarga de pasar estos valores al ámbito en el que se llama la función, en
este caso, el ámbito de la función. Por lo que si tenemos un arreglo del tipo $a = array("clave" => "valor"), al ejecutar extract($a), entonces pasaremos a tener
una variable disponible, de nombre $variable y con "valor" como contenido. Luego, la función eval() se encarga del resto, o sea, de ejecutar todo el código (el del Template) que
se le pasa como parámetro.

Algunos se preguntarán, porqué no hacemos simplemente un "include"
? La respuesta es muy siemple. Eficiencia. La función include implica un acceso
a disco, lo cual la hace bastante "costosa" en términos de eficiencia. Así que
leyendo el template 1 sola vez en memoria, y luego utilizándolo varias veces,
hacemos un mejor uso de los recursos.

Teniendo estos temas en cuenta, es que podemos seguir ahora con el desarrollo
el Foro.

Un Tema por vez

Ya teniendo las bases de nuestro foro, el diseño de la tabla en la base de datos
y conociendo como funciona nuestro sistema de templates, podemos comenzar a
crear la primera página, en la que mostraremos todos los temas del foro:

Ejemplo de la pagina de index.php

<?php
require('configuracion.php');
require('funciones.php');
include('header.html');
/* Pedimos todos los temas iniciales (identificador==0)
* y los ordenamos por ult_respuesta */
$sql = "SELECT id, autor, titulo, fecha, respuestas, ult_respuesta ";
$sql.= "FROM foro WHERE identificador=0 ORDER BY ult_respuesta DESC";
$rs = mysql_query($sql, $con);
if(mysql_num_rows($rs)>0)
{
    // Leemos el contenido de la plantilla de temas
    $template = implode("", file("temas.html"));
    include('titulos.html');
    while($row = mysql_fetch_assoc($rs))
    {
        $color=($color==""?"#5b69a6":"");
        $row["color"] = $color;
        mostrarTemplate($template, $row);
    }
}
include('footer.html');
?>

¿Eso es todo? Si, eso es todo. Ahora revisemos paso a
paso lo que hace el script. Primero tenemos una serie de requires
e includes.
El primero incluye el primer Script que hicimos, que realiza la conexión a la
base de datos. El segundo, incluye un archivo.php que contiene funciones importantes
del foro, como por ejemplo, mostrarTemplate.
El tercero, incluye un header genérico que utilizaremos para darle a todas nuestras
páginas, un diseño similar. Allí podremos colocar un logo del sitio, links importantes,
banners, etc.

$sql = "SELECT id, autor, titulo, fecha, respuestas, ult_respuesta ";
$sql.= "FROM foro WHERE identificador=0 ORDER BY ult_respuesta DESC";
$rs = mysql_query($sql, $con);
if(mysql_num_rows($rs)>0)
{

Aquí lo que hacemos es ejecutar un query en la
base de datos, que nos traerá todos los mensajes que son iniciadores de un tema,
o sea, cuyo identificador esté en cero. El resto de los mensajes, que sean respuestas
a un tema en particular, tendrán en el campo identificador el valor del mensaje
al que responden. A estos temas, le pedimos a la base que los ordene por la
fecha de última respuesta, de manera descendente, así en nuestro foro, tendremos
los mensajes más recientes primero. También realizamos una decisión, solo mostraremos
los temas de nuestro Foro si la cantidad de filas recuperadas desde la base,
son mayores a 0.

Luego, dentro del While principal del programa, hacemos toda la "magia" :

// Leemos el contenido de la plantilla de temas
    $template = implode("", file("temas.html"));
    include('titulos.html');
    while($row = mysql_fetch_assoc($rs))
    {
        $color=($color==""?"#5b69a6":"");
        $row["color"] = $color;
        mostrarTemplate($template, $row);
    }

Aquí comenzamos a trabajar por primera vez con
los templates. Primero leemos el contenido del template en memoria y lo guardamos
dentro de la variable $template. También
incluimos un archivo, que contiene una fila de la tabla de Temas, con los títulos
de las celdas. EL resto ya lo vimos anteriormente, llamando a la función mostrarTemplate mostramos los datos de cada tema.

Finalmente, solo agregamos otro archivo HTML, con el código para cerrar la página
y mostrar algún que otro mensaje de Copyright (o lo que queramos poner).
Con esto ya tenemos nuestra página inicial del Foro, mostrando los temas que
haya. Ahora, vamos a crear el formulario necesario para ingresar nuevos temas
o para responder algún tema existente.

Participar es la Base

El ahorro es la base de la fortuna, suelen decir, y esto se aplica a casi todo.
Así que, haciendo caso al dicho, podemos utilizar el MISMO formulario para crear
un nuevo tema y para contestar un tema en particular. Esto lo vamos a lograr,
pasando una variable por el URL, indicando que estamos citando un mensaje anterior,
sacando de la base de datos el mensaje que citaremos, y completando el formulario
con esos datos. Si la variable no está presente, entonces no hacemos nada y
mostramos el formulario.

Ejemplo de la pagina de respuesta.php

<?php
require('funciones.php');
$id = $_GET["id"];
$citar = $_GET["citar"];
$row = array("id" => $id);
if($citar==1)
{
    require('configuracion.php');
    $sql = "SELECT titulo, mensaje, identificador AS id ";
    $sql.= "FROM foro WHERE id='$id'";
    $rs = mysql_query($sql, $con);
    if(mysql_num_rows($rs)==1) $row = mysql_fetch_assoc($rs);
    $row["titulo"] = "Re: ".$row["titulo"];
    $row["mensaje"] = "[citar]".$row["mensaje"]."[/citar]";
    if($row["id"]==0) $row["id"]=$id;
}
$template = implode("", file('formulario.html'));
include('header.html');
mostrarTemplate($template, $row);
include('footer.html');
?>

En el script vemos como primero capturamos de la URL,
las variables $id y $citar,
y si ésta última es igual a 1, entonces consultamos en la base de datos toda
la información del tema que estamos citando, para agregarlo en el arreglo $row,
que luego será pasado al template. Noten como al titulo del mensaje, le anteponemos
la cadena "Re:", indicando que es una respuesta, y como al cuerpo del mensaje,
si estamos citando, lo rodeamos por un tag [citar] y [/citar]. Esto lo veremos más adelante.

Ejemplo de la pagina de formulario.html

<table width="90%" border="0" cellspacing="2" cellpadding="2">
<form name="f" action="agregar.php" method="post">
    <input type="hidden" name="identificador" value="<?=$id?>">
    <tr>
      <td width="30%" align="right">Autor </td>
      <td><input type="text" name="autor"></td>
    </tr>
    <tr>
      <td width="30%" align="right">Titulo</td>
      <td><input type="text" name="titulo" value="<?=$titulo?>"></td>
    </tr>
    <tr>
      <td width="30%" align="right">Mensaje</td>
      <td><textarea name="mensaje" cols="50" rows="5"><?=$mensaje?></textarea></td>
    </tr>
    <tr>
      <td colspan="2" align="center"><input type="submit" name="Submit" value="Enviar Mensaje"></td>
    </tr>
  </form>
</table>

Aquí vemos como colocamos las variables dentro
de los atributos "value" de los inputs y el textarea. También podemos ver como
tenemos un campo escondido, llamado "identificador", que solo tendrá un valor
asignado, cuando estemos respondiendo a un mensaje, pero que no existirá cuando
sea un mensaje nuevo. Solo queda ver el script que se encarga de grabar el mensaje
en la base de datos, agregar.php.

Ejemplo de la pagina de agregar.php

<?php
require('configuracion.php');
$autor = $_POST["autor"];
$titulo = $_POST["titulo"];
$mensaje = $_POST["mensaje"];
$ident = $_POST["identificador"];

//Hacemos algunas validaciones
if(empty($autor)) $autor = "Anónimo";
if(empty($titulo)) $titulo = "Sin título";
//Evitamos que el usuario ingrese HTML
$mensaje = htmlentities($mensaje);

// Grabamos el mensaje en la base.
$sql = "INSERT INTO foro (autor, titulo, mensaje, identificador, fecha, ult_respuesta) ";
$sql.= "VALUES ('$autor','$titulo','$mensaje','$ident',NOW(),NOW())";
$rs = mysql_query($sql, $con) or die("Error al grabar un mensaje: ".mysql_error);
$ult_id = mysql_insert_id($con);

/* si es un mensaje en respuesta a otro
   actualizamos los datos */
if(!empty($ident))
{
    $sql = "UPDATE foro SET respuestas=respuestas+1, ult_respuesta=NOW()";
    $sql.= " WHERE id = '$ident'";
    $rs = mysql_query($sql, $con);
    Header("Location: foro.php?id=$ident#$ult_id");
    exit();
}
Header("Location: index.php");
?>

En este script, luego de tomar las variables desde el
formulario (con el método POST), primero verificamos que exista un nombre de
autor y el título del mensaje, caso contrario le asignamos un valor por defecto.
También utilizamos la función de PHP htmlentities() para convertir todos los caracteres especiales ( >, <, ", &, etc )
en sus respectivas entidades HTML ( &gt;, &lt;, &quote;, &amp;).
Con esto evitamos que un usuario ingrese código HTML en nuestro Foro (con la
respectiva vulnerabilidad que este implica).

A continuación, grabamos el mensaje en la base, y obtenemos, mediante la función mysql_insert_id(), el último id autoincremental
que le corresponde a este registro. ¿Para qué? Simple. Si este mensaje que acabamos
de grabar es el primero del tema, no necesitamos hacer nada, pero si es un mensaje
en respuesta a otro ( esto lo averiguamos preguntando por el valor de $identificador),
entonces tenemos que actualizar ese primer mensaje, indicando que tiene una
respuesta más, y cambiando la fecha y hora del último mensaje. De esa manera,
nos aseguramos que tenemos bien ordenado el foro, con los temas con nuevos mensajes
primero. Finalmente, dependiendo del caso, redirigimos al usuario al home del
foro, o a la respuesta que acaba de ingresar.

Miles de posibilidades

Ya solo nos queda un último paso, y es el de crear la página que mostrara un
tema y todas las respuestas que haya en él. Para ello, vemos como en el home
del foro, llamamos a un script foro.php y le pasamos el id del tema que queremos ver. Luego, solo tenemos que obtener
de la base el o los temas, en los que el id sea igual al que pasamos, o que
el identificador (el campo que indica que ese mensaje es en respuesta a cierto
tema) sea igual al identificador, los ordenamos por fecha y listo, foro al dente.

En este caso, el template que utilizaremos para mostrar cada uno de los mensajes,
será una tabla con todos los datos necesarios: el autor del mensaje, el título,
la fecha del mensaje, el mensaje en si mismo. Pero también agregaremos dos detalles.
Primero, un link hacia el formulario que creamos antes, de modo que un usuario
pueda citar un mensaje en particular, y segundo, un Anchor (o Ancla) para que
al responder a un mensaje, se pueda acceder directamente al mismo por su id
en la base de datos.

Ejemplo de la pagina de post.html

<table width="90%" border="0" align="center" cellpadding="2" cellspacing="2">
	<tr bgcolor="<?=$color?>">
		<td width="25%" valign="top">
		<b><a name="<?=$id?>"><?=$autor?></a></b><br>
		<font size="-2">Enviado el : <?=$enviado?></font>
		</td>
		<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><strong><font size="-1">
<?=$titulo?>
</font></strong> </td>
<td width="10%" align="right"> [ <a href="respuesta.php?id=<?=$id?>&citar=1">CITAR</a> ]</td>
</tr>
</table>
<hr align="center" width="100%" size="2" noshade>
<?=$mensaje?></td>
</tr>
<tr>
<td colspan="2" height="5"></td>
</tr>
</table>

Ahora, veamos el código PHP que utilizaremos para "parsear" este template:

Ejemplo de la pagina de foro.php

<?php
require('configuracion.php');
require('funciones.php');
$id = $_GET["id"];
if(empty($id)) Header("Location: index.php");

$sql = "SELECT id, autor, titulo, mensaje, ";
$sql.= "DATE_FORMAT(fecha, '%d/%m/%Y %H:%i:%s') as enviado FROM foro ";
$sql.= "WHERE id='$id' OR identificador='$id' ORDER BY fecha ASC";
$rs = mysql_query($sql, $con);
include('header.html');
if(mysql_num_rows($rs)>0)
{
    include('titulos_post.html');
    $template = implode("", file('post.html'));
    while($row = mysql_fetch_assoc($rs))
    {
        $color=($color==""?"#5b69a6":"");
        $row["color"] = $color;
        //manipulamos el mensaje
        $row["mensaje"] = nl2br($row["mensaje"]);
        $row["mensaje"] = parsearTags($row["mensaje"]);
        mostrarTemplate($template, $row);
    }
}
include('footer.html');
?>

Como siempre, incluimos la conexión a la base de
datos, el archivo de funciones y validamos de que exista la variable $id,
ya que de lo contrario, nada podríamos hacer y nuestro foro fallaría en el Query.
Hablando del Query, podemos ver como utilizamos la función de mySQL DATE_FORMAT() para convertir el formato por defecto del tipo datetime (‘AAAA-MM-DD hh:mm:ss’) en algo que sea más común para nuestro idioma (‘DD/MM/AAAA
hh:mm:ss’). Si quieren más información sobre esta función, pueden visitar y
consultar el manual de
mySQL
.

Lo más destacado en este script que podemos ver, son dos transformaciones que
le hacemos al mensaje, antes de enviarlo al template. Como vemos, primero utilizamos
la función de PHP nl2br(), que convierte
todos los saltos de linea, en tags <br />,
de esa manera, los saltos que un usuario ingrese en el textarea, serán agregados
correctamente al mostrar el mensaje. Luego, vemos como llamamos a la función parsearTags(). ¿Qué hace esta función? Veamos:

Ejemplo de la pagina de funciones.php

<?php
function parsearTags($mensaje)
{
    $mensaje = str_replace("[citar]", "<blockquote><hr width='100%' size='2'>", $mensaje);
    $mensaje = str_replace("[/citar]", "<hr width='100%' size='2'></blockquote>", $mensaje);
    return $mensaje;
}
?>

Dentro de esta función, podemos agregar todas las modificaciones
que queremos realizarle al mensaje, antes de mostrarlo en el Foro. En el ejemplo,
vemos como hemos implementado el uso de un tag propio, [citar].
El mismo, dentro de la función, será reemplazado por el código HTML necesario
para destacar el citado de un mensaje, todo esto gracias a la función str_replace() de PHP (más info en el manual). Este es el tag [citar] que se agrega automáticamente, y que notamos cuando respondíamos un mensaje.

Esta función, pueden personalizarla de la manera que deseen, agregando todos
los tags que quieran, para ofrecerles a sus usuarios la libertad de darle formato
a sus mensajes. Podrían, por ejemplo, agregar un nuevo tag, para poner palabras
en negritas, o quizás alguna expresión regular que convierta automáticamente
cualquier URL presente en el mensaje, en un link. Los límites son los de su
imaginación.

Misión Cumplida

Cómo intenté demostrarles en este pequeño artículo, realizar nuestro primer
foro es algo completamente sencillo, si sabemos utilizar mínimamente mySQL y PHP (más bien, algunas funciones más que
útil del PHP). En estas pocas líneas aprendimos:

  • Crear
    una tabla en MySQL para que contenga los datos de nuestro foro.
  • A conectarnos
    a MySQL desde nuestro script PHP.
  • A utilizar
    un sistema de templates casero y simple.
  • La utilización
    de funciones de PHP como: extract(); eval(); implode();
    file(); nl2br(); mysql_insert_id(); str_replace();
  • La utilización
    de la función DATE_FORMAT() de MySQL.
  • Cómo
    trabajar de manera segura con la directiva Register_Globals
    en OFF, tomando uno a uno los contenidos de las variables, desde sus respectivos
    arrays $_POST y $_GET.

Y varios conceptos
más a la hora de programar nuestros scripts. Ahora, este sistema es muy básico,
como simple. Así que de ahora en más, es campo fértil para que Uds. mismos puedan
agregarle todas las características y funcionalidades que deseen, personalizando
el foro a su gusto. Como ideas, puedo mencionarles algunas:

  • Agregar
    más tags para que sus usuarios puedan dar formato a sus mensajes.
  • Incorporarle un
    sistema de usuarios.
  • Contadores de visualizaciones
    de un tema, para hacer un Ranking de temas más vistos.
  • La posibilidad
    de que los usuarios puedan utilizar firmas.

Y seguro que a uds. mismos
se les deben estar ocurriendo otras muchas buenas ideas para mejorar el Foro.
Para aquellos usuarios que sean vagos y no quieran estar un rato con el Copy&Paste,
les dejo el código completo del foro href="http://www.maestrosdelweb.com/editorial/util/foro.zip">para
que lo descarguen. Por lo pronto, espero que hayan disfrutado este tutorial,
y sigan programando simple, seguro, pero ante todo, bonito :D .

¿Te gustó?

¡Sí, me gusta! Le ha gustado a 131 personas
Loading ... Loading ...

Pablo RigazziPablo Rigazzi para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: @maestros | Fan page

Comentarios

Páginas: « 1 2 3 4 [5] 6 »

  1. Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘usuario’@'localhost’ (using password: YES) in /home/companam/public_html/configuracion.php on line 7

    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/companam/public_html/configuracion.php on line 8

    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/companam/public_html/agregar.php on line 17
    Error al grabar un mensaje: mysql_error

    ?????????????primera ves q me pasa ????? q es???

    Responder
  2. he hecho todas las páginas que se indica en este tutorial pero no funciona, cuál debe ser la página de inicio del foro, aparte de las del tutorial se deben hacer más páginas y como nombrarlas y en que lenguaje, me urge una respuesta
    gracias

    Responder
  3. Joexito

    Respuesta a Eduardo Barrios: en configuracion.php debes cambiar el “user” por “usuario” y en password solo deja las comillas juntas y no escribas nada…. simplemente es eso y te lo aseguro xq acabo de cambiar configuracion.php con un usuario inventado y password (y no uso password) y me salieron las mismas lines…. espero te sirva. oe si te sirve reponde por aqui.

    Responder
  4. Joexito

    Respuesta Raúl Morán: comienza bajandote el zip http://www.maestrosdelweb.com/editorial/util/foro.zip extraelo y pegalo dentro de htdocs o www o donde tueviera q ser, de ahi abre configuracion.php y cambia tu usuario y tu password, si estas en tu casa tu usuario debe ser root y sin password, o igual cuando te sale el erro te dice tu usuario, por ejmplo: –Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘usuario’@’localhost’ (using password: YES) in /home/companam/public_html/configuracion.php on line 7– esto kiere decir q su usuario es usuario y q escribio un password donde no existe password, bueno tambien tienes q crear una base de datos solo para luego crear la tabla foro (ya lo explike arribita, leelo), bueno nada mas, responde si te sirvió de algo todo este rollo q te dije.

    Responder
  5. WILLY

    http://localhost/pucca/foro/agregar.php —->tengo el siguiente error=Error al grabar un mensaje: mysql_error en el archivo agregar.php

    Responder
  6. Joexito

    WILLY: elimina todo lo q tienes dentro del body en agregar.php y copia esto:

    deberia salirte todo bien.

    Responder
  7. Joexito

    < ?// // <–estos simbolos escribelos juntos

    Responder
  8. Joexito

    nooooo, esta pagina no me deja escribir el codigo, bueno el error es xq no se a ejecutado la sentencia, denuevo copia y pega las lineas sql y sql. en donde dice: grabamos el mensaje en la base y correlo denuevo

    Responder
  9. Irais

    include(‘header.html’), include(‘footer.html’), no se en donde puedo encontrar estos archivos, pro que me saca error en el index.

    Responder
  10. lf

    muchas gracias, en este foro he aprendido.

    Responder
  11. luz

    quisiera saber si alguien me puede ayudar con el pase de parametros de una pagina Html a un arhivo pHP, antes funcionaba pero ahora no.
    por favor ayudenme

    Responder
  12. Excelente, algunos problemas pero facilmente solucionables si miras el codigo un poquito… Les sugiero que hagan lo mismo y no venir llorando… yo corregí esto:
    $ident = $_POST["identificador"]?$_POST["identificador"]:0;
    para evitar un valor vacio…
    y la consulta a la BD quedó asi:
    // Grabamos el mensaje en la base.
    $sql = “INSERT INTO foro (autor, titulo, mensaje, identificador, fecha, ult_respuesta) “;
    $sql.= “VALUES (‘$autor’,'$titulo’,'$mensaje’,$ident,NOW(),NOW())”;
    Observese que le quite los apostrofes a $ident
    Luego el foro va de perillas… voy a hacerle modificaciones para que quede funcional en mi sitio

    Responder
  13. gonza

    yo estoy usando el xampp y la verdad que no tengo idea donde poner la base de datos, porque los php y los html los dejo en la carpeta httdocs pero me tira un monton de errores al querer acceder… si alguien puede darme una mano se los agradecería…

    Responder
  14. hola saves me interese ase poco por aser un foro tu articulo me paresio bastante bueno pero por culpa de mi poca practica y de ser tan nuevo en este lenguaje nose como reparar los errores que me dio el ejemplo planteado aca.

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘usuario’@'localhost’ (using password: YES) in C:\AppServ\www\foro\configuracion.php on line 7

    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\AppServ\www\foro\configuracion.php on line 8

    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\AppServ\www\foro\agregar.php on line 17
    Error al grabar un mensaje: mysql_error

    y no agrega nada al foro segun yo mi coneccion esta bien establesida con el server modifique el arghivo correspondiente gracias de ante manos si alguien me puede responder

    Responder
  15. Bufonx

    hola saven no puedo hechar a correr el foro estoy usando appserver y me da el sig problema

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘usuario’@'localhost’ (using password: YES) in C:\AppServ\www\foro\configuracion.php on line 7

    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\AppServ\www\foro\configuracion.php on line 8

    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\AppServ\www\foro\agregar.php on line 17
    Error al grabar un mensaje: mysql_error

    si mi usuario es root , pass 12345, bd myweb …donde esta el error…

    Responder
  16. sebastian C.

    yo soy nuevo en esto de lo0s foross
    ayudenme a crear uno
    foro

    Responder
  17. che … no entiendo un pedo!! jaja me gustaria q me expliken para agregarle a mi web ni7gaming.com.ar un foro!!!

    turcolarenga@fasination.com.ar NO MAILS, CHAT

    Responder
  18. La idea de este foro ha sido implantada en http://www.carnavaldemalaga.com , muchisimas gracias por esta idea de templates, espero aplicarla pronto para toda la página .

    Un abrazo y enhorabuena por el tutorial

    Responder
  19. antb

    Como puedo hacer cuando alguien no ingresa un campo obligatorio o ya este registrado por ejemplo no me lleve a otra pagina sino que al lado o abajo de textbox aparesca un mensaje y no se pierdan los datos ya escritos. gracias.

    Responder
  20. si alguien me puede ayudar envieme un mail a tatopichot@hotmail.com QUiero crear un simple php para mostrar noticas, editarlas y borrarlas. Para insertar en una web mia…. y la verdad no tengo idea estoy trabado.
    Gracias
    tatopichot@hotmail.com

    Responder
  21. muy lindo todo pero humildemente en algunos lugares de tu explicacion me parece que te bandeaste y te fuiste a cualquiera… si se te consulta sobre como CREAR EL PRIMER FORO no entiendo como mandás leer el manual de MySQL y encima mezclas las cosas con templates??… . la parte que no creo que se vea clara es la parte de … EL PRIMER FORO QUE SE ARMA!!! .. igual muy lindo y ameno… si queres ayudar a un interesado en armar su primer foro te lo voy a agradecer sinceramente!!.. (me pone como error al enviar cada mensaje un… “error al grabar un mensaje =mysql_error – saludos a todos!!!

    Responder
  22. albert

    Hola amigos saludos. Yo tambien soy nuevo en esto de la programacion en php, con respecto a la creacion del foro la mayoria de los errores se generan debido a que en

    $sql = “SELECT id, autor, titulo, fecha, respuestas, ult_respuesta “;
    $sql.= “FROM foro WHERE identificador=0 ORDER BY ult_respuesta DESC”;
    $rs = mysql_query($sql, $co);
    if(mysql_num_rows($rs)>0)
    ················
    el probela es el siguiente: la variable $co no esta identificada, uds. haran lo siguiente:
    van a crear —>function crear(){
    global $co;
    esto les permitira que el query les trabaje.
    aaa otra cosa el pana no explico sobre el header.html ni el footer.html…
    esos son llamados a otros codigo en los cuales ustedes pueden incluir imagenes o lo que a ustedes les gusten “es nada más para mejorar el especto de la pagina”.
    Sin mas que decir me despido y espero que esto le ayude porque pari una y parte de la otra jajaja

    Responder
  23. Muy buen tutorial..
    me a servido de mucha ayuda
    …………………………………………………..
    Para los que juegen lineage2
    Se publica un servidro kamael para lo interesados
    Favor de visitar el foro http://www.l2bloodline.foroactivo.com

    Responder
  24. Buen tutorial^^!
    Vista nuestro foro l2bloodline.foroactivo.com
    Para los que juegen lineage2 servidor kamael

    Responder
  25. me urge saber como hacer un modulo ayudenmeeeeeeeeeeeeeeee plisssssssssssssssssssssssss yo hice mi pagina ehh picado a todos lados y eh aprendido algo un saludo

    Responder
  26. Madelin

    Hola Espero esten bien..!!

    Tengo un problemita y la verdad me tiene parada en la creacion del foro… ya le hecho mil cosas… pero resulta es que el foro no me muestra ni los mensajes ni nada… si me deja insertar mensajes pero a la hora de imprimirlo me muestra las paginas vacias… refente al autor, mensaje, respuesta, en la pagina que abre el link titulo tampoco me muestra nada.. es como sino imprimiera esos items…
    Me podrian ayudar les agradeceria muchisimos…
    Mi correo es : moroanma@hotmail.com

    Responder
  27. muy buena ayuda pero tengo unos problemas con esto
    ———————————-
    if(mysql_num_rows($rs)>0)
    {
    // Leemos el contenido de la plantilla de temas
    $template = implode(“”, file(“temas.html”));
    include(‘titulos.html’);
    while($row = mysql_fetch_assoc($rs))
    {
    $color=($color==”"?”#5b69a6″:”");
    $row["color"] = $color;
    mostrarTemplate($template, $row);
    }
    —————————–
    me sale el siguiente error:
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\phpdev\www\foro prueba\index.php on line 18

    Warning: Failed opening ‘footer.html’ for inclusion (include_path=’.;C:/phpdev/php/includes;C:/phpdev/php/class’) in c:\phpdev\www\foro prueba\index.php on line 30

    si me podrias ayudar te lo agradeceria mucho y si me contestas a mi correo mas gracias

    Responder
  28. adriana

    HOla como estan yo tambien tengo el mismo error que madelin me pordrian ayudar porfavor gracias… mi correo es adrihellokitty@gmail.com

    Responder
  29. rudysoft

    hola que tal, el foro esta de lujo pero tengo un problemilla si el foro lo tengo en un host de paga no tengo problem funciona pero si lo tengo local ya no alguien sabe a que se debe gracias

    Responder
  30. Jisoftware

    Amigos… como puedo hacer una rutina de suma interactiva, es decir voy introduciendo las cantidades y me van arojando el resultado al mismos tiempo en otra casilla de texto….????

    Ayudenme please….

    By Jisoftware

    Responder
  31. jesus R

    Hola estoy apenas aprendiendo programacion y php, y cuando hago un documento HTML y otro dependiente de este, cuando el html llama al php este no funciona y se habre como un html donde se visualiza todo el codigo de la pagina php. ¿alguien me puede decir que esta ocurriendo?

    Responder
  32. Silog

    Pablo, te doy un apreton de manos virtual y mis felicitaciones.
    Increíble, espectacular, gracias!.

    Responder
  33. tonterias si ganas se publica en un libro

    Responder
  34. Jose

    como hago para que el mensaje a mostrar no me aparesca en una misma linea

    Responder
  35. Jose Huerta

    tengo conocimientos básicos y necesito que me muestren tambien el condigo de las paginas temaas.html y titulos.html
    mil gracias

    Responder
  36. conozco solo un poco del tema y necesito que me muestren el codigo de las paginas temas.html y titulos.html
    gracias

    Responder
  37. Genial. esta muy bueno el tutorial.. tomare algunas cosas para mejorar mi foro…
    Chido..

    Responder
  38. Guau, acabo de descubrir este tutorial, y está muy bien. Sencillo pero didáctico. Sólo quería comentar que, a día de hoy, sigue resultando útil :p.

    Responder
  39. muchisimas graciaas ,de verdad que si

    Responder
  40. Piter_Moon

    Estimado amigo, me parece muy interesante la manera en la k expones el desarrollo de un foro, felicitaciones por el espacio que tienes y esperome orientes en la generacion de mi propo foro.
    saludos desde La Paz – Bolivia

    Responder
  41. hola la verdad estoy aprendiendo php y mysql
    estoy realizando un registro de usuarios en uuna base y no me funciona me podrias ayudar

    Responder
  42. hola amigo
    realmente un buen codigo

    Responder
  43. hola que tal soy el chico de los vientos

    Responder
  44. ayuda alguien que sepa me puede agregar y ayudar a crear un foro mi msn es david.853@hotmail.com

    Responder
  45. sad

    asdasdsaasddsasadsad

    Responder
  46. sad

    asdasdsaasddasdsasadsad

    Responder
  47. hola me agregan kiero aser un foro yo les enseño cosas o algo a cambio pero agregenme lol david.853@hotmail.com

    Responder
  48. cesar

    hola me podrian decir como descargar mysql 1.0.14a para hacer mi proyecto , bye y gracias

    Responder
  49. saludos amigo me sale el siguiente error en la pagina de index : Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘david’@'localhost’ (using password: YES) in C:\wamp\www\foro\foro\configuracion.php on line 7

    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\foro\foro\configuracion.php on line 8

    Responder
  50. David Torres

    hola me sale el siguiente error en index ….Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘david’@'localhost’ (using password: YES) in C:\wamp\www\foro\foro\configuracion.php on line 7

    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\foro\foro\configuracion.php on line 8

    Responder
  51. Thomy Ayram

    Mmm…

    Yo creo que esto es excelente!!!
    estoy maravillado y pues aun no lo eh probado pero en cuanto tenga la oportunidad lo hare.
    Te felicito y sin adularte pero tienes mi admiracion.

    Saludos y espero estar en contacto…

    Me parece excelente.

    Si hay algunos desperfectos, pues es solo cosa del programador (cuestion de arreglar y personalizar), pero en si esto esta muy bien!!! y una vez mas…
    FELICIDADEZ!!! muy bueno.

    Responder
  52. adriana

    el tutorial esta super pero tengo un error, en index y es este: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/adondeva/public_html/foro/index.php on line 10
    y no se como solucionarlo me podrian ayudar porfa
    angy_adrianita@hotmail.com

    Responder
  53. Yo soy mu tonto porque no me e enterado de nada, me gustari que me lo explicaras como postear. Gracias de adelantado

    Responder
  54. carlos pinto

    super bueno el foro pero queria si me puede ayudar como puedo hacer para eliminar los mensajes
    si me puede mandar los comandos por favor
    este correo shumasher25@hotmail.com atte gracias

    Responder
  55. Gracias por el aporte, es genial!!!

    Responder
  56. Hola! Pablo Rigazzi le quiero felicitar por esta excelente guía. Estaba buscando un material como este. Gracias. Hasta pronto.

    Responder
  57. Muchas gracias por este tutorial lo voy a probar a ver si puedo hacer algo…

    Responder
  58. Gracias, con este articulo estoy preparada para realizar mi propio foro php

    Un saludo

    Responder
  59. Fredy

    Saludos, chevere lo del foro, pero me pueden ayudar con una cosa:
    No entendi bien lo de la base de datos, como me lo creo, es decir en que programa.
    gracias por su ayuda. mi correo es freddy_gigio@hotmail.com

    Responder
  60. vic

    entren en mi foro los ayudare

    Responder
  61. que javascript usas?! te recomiendo el location.href(“”); pues este no te creará conflicto con ningun navegador… sea IE o Mozilla..

    Responder
  62. oscar mendoza cid

    un saludo me fue de mucha ayuda el foro

    Responder
  63. Analuz

    la verdad es un foro muy practico gracias por el aporte

    Responder
  64. buen día.

    Más que un foro, me gustaría saber si alguien sabe donde puedo encontrar scripts de clasificados en php similares a: http://www.clasiefectivos.com
    Además quisiera despúes poder agregarle un foro, pero primero deseo instalar un script potente de clasificados. Gracias.

    Responder
  65. juan

    no encuentro el archivo dle foro, alguien me lo puede pasar?

    Responder
  66. miguel

    hola ùes muchas gracias apenas estoy pensando hacer un foro y pues no tenia idea de como se hacian me has facilitado muchas cosas de verdad muchas gracias por todo

    Responder
  67. kbri xfbcl gjqwd nbwhzkcjm mezwfcrax rdoglae nlkfijgqe

    Responder
  68. Logan

    muchas gracias me an salbado la vida el tutorial es ta genial y es sencillo entender…

    Responder
  69. zairel

    tu articilo esta buenisimo recien me inicie en le mundo de la meb asi que esta publicacion me facilito mucho las cosas… gracias ;)

    Responder
  70. Maxmore

    Si desea crear un foro gratis, puede utilizar un alojamiento gratuito: http://www.forums-free.com/es/

    Responder
  71. Cenutrio

    Notice: Undefined variable: color in c:\archivos de programa\easyphp1-7\www\pagina\foro\index.php on line 17

    Notice: Undefined index: id in C:\EasyPHP\home\www\respuesta.php on line 3

    Notice: Undefined index: citar in C:\EasyPHP\home\www\respuesta.php on line 4

    Me pasa lo mismo que a otros… que desesperacion.

    Responder
  72. asdfasdf
    sadf
    s
    adf
    sadf
    s
    adf
    s
    adf
    sa
    df
    sadf

    Responder
  73. Elibeth

    Existe algun problema que se publique y utilice este foro en algun sitio web… o hay que solicitar algun permiso al autor para hacerle algunos cambios

    Responder
  74. Loretika

    Yo cree mi foro y pude realizar ciertas modificaciones relacionadas sin mucho problema en http://www.foroactivo.com

    Responder
  75. Loretika

    Hola, he creado un foro bajo las mismas especificaciones y fué bastante sencillo…prueba en http://www.foroactivo.com suerte…

    Responder
  76. orlando

    Es bastante bueno, gracias por publicarlo para todos

    Responder
  77. Esteban

    Hola, quisiera que me despejen de una duda, cuantas tablas se hacen en los foros actuales.

    Responder
  78. el programa de php sirve para crear paginas web y este programa esta enlasado con el foxserver. en este programa se puede crear paginas con imagenes ,videos, musica etc. es un programa para crear paginas muy completas.

    Responder
  79. este foro seme hace muy padre por que muestra ejemplos que nos pernmite darnos cuenta y aprender sobre los comandos y codigos de php.

    Responder
  80. este foro se me hace muy interesante por que nos muestra ejemplos.y nos permite darnos cuenta de lo que hacen cada uno de los comandos etc.

    Responder
  81. FCR

    Muy buen tutorial.
    Lo unico es que es un foro abierto…pero los que lo quieran modificar solo deben de agregar algunos cuantos archivos.

    Responder
  82. Eugenio Ramírez

    Hola, busco algún diseñador o ejecutador que se maneje muy bien en PHP.

    Quiero hacer una serie de aplicaciones innovadoras a las que se les puede sacar un amplio partido económico y necesito a algún compañero que busque emprender y conozca tal modo de escritura.

    Interesado a errfilms@gmail.com

    Saludos y Exito.

    Responder
  83. froylan

    Hola a todos, ayuda porfavor, lo que pasa es que acabo de desarrollar una aplicacion en php en dreamweaver en windows xp, realiza altas, bajas y consultas por filtro de equipos, necesito subirla en el servidor donde estoy elaborando mis residencias, lo que quiero es que me puedan explicar como lo subo, o por donde empezar si alguien me podria responder

    Responder
  84. Pablo Perdomo

    hola en la bases de datos no me aparece como tu, lo describes me aparece asi:
    CREATE TABLE `foro` (

    `id` INT( 7 ) NOT NULL AUTO_INCREMENT ,
    `autor` VARCHAR( 200 ) NOT NULL DEFAULT ‘ ‘,
    `titulo` VARCHAR( 200 ) NOT NULL DEFAULT ‘ ‘,
    `mensaje` TEXT NOT NULL ,
    `fecha` DATETIME NOT NULL DEFAULT ‘0000-00-00 00:00:00′,
    `respuestas` INT( 11 ) NOT NULL DEFAULT ‘0′,
    `identificador` INT( 7 ) NOT NULL DEFAULT ‘0′,
    `ult_respuesta` DATETIME NULL
    ) ENGINE = MYISAM

    Responder
  85. Pablo Perdomo

    CREATE TABLE `foro` (

    `id` INT( 7 ) NOT NULL AUTO_INCREMENT ,
    `autor` VARCHAR( 200 ) NOT NULL DEFAULT ‘ ‘,
    `titulo` VARCHAR( 200 ) NOT NULL DEFAULT ‘ ‘,
    `mensaje` TEXT NOT NULL ,
    `fecha` DATETIME NOT NULL DEFAULT ‘0000-00-00 00:00:00′,
    `respuestas` INT( 11 ) NOT NULL DEFAULT ‘0′,
    `identificador` INT( 7 ) NOT NULL DEFAULT ‘0′,
    `ult_respuesta` DATETIME NULL
    ) ENGINE = MYISAM

    Responder
  86. MiniMax

    Tengo un grave PROBLEMA que no me deja hacer funcionar el foro. He leido muchos usuarios que dicen lo mismo. Si alguien sabe la respuesta que la publique por favor!!!
    ahi dejo el mensaje del problema:
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ../../index.php on line 10

    Gracias

    Responder
  87. Amigo mio te felicito te luciste: claro, preciso, concreto, directo, fácil, etc, etc.
    Voy a probarlo y les daré mis apreciaciones, aunk a simple vista se ve k está bien codificado.
    Nuevamente mis felicitaciones a este tutorial y al autor.
    Saludos

    Rickyman3000
    —————————————————————–
    RSP PERU NETWORK
    http://www.rspperu.tk

    Responder
  88. Hola:
    Como dije anteriormente….muy buen tutorial aunk con algunos ligeros errores k me he tomado el “atrevimiento” de corregirlos en el camino, asi k PARA LOS K DESEEN EL ARCHIVO RAR CORREGIDO!!!!! este es el link, espero k les sirva como a mi
    http://www.psicoemergencias.org/descargas/foro_corregido.rar

    Saludos

    Responder
  89. godyarma

    hola tengo el siguiente:

    Notice: Undefined variable: color in C:\wamp\www\FOROIUGT\foro\index.php on line 18

    Notice: Undefined index: id in C:\wamp\www\FOROIUGT\foro\respuesta.php on line 3

    Notice: Undefined index: citar in C:\wamp\www\FOROIUGT\foro\respuesta.php on line 4

    como me pueden ayudar???

    Responder

Deja tu Comentario

Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.



Acerca de

Maestros del Web nace cuando intentamos traducir Webmaster al Español. Nacimos orientados al diseño y desarrollo web. Hoy somos un espacio de apoyo para los entusiastas que participan en proyectos en la red.
Leer más de Maestros del Web