Sistema de comentarios con php. Ayuda!!!

Hola a todos, He creado un sistema de comentarios con php y Mysql en una web que estoy preparando, pero me he encontrado con dos inconvenientes. El primero es como hacer que el comentario salga en la pagina en el cual se hizo, ya que todas las paginas de la web muestran los mismos comentarios, sin tener en cuenta donde se publico, en otras palabras lo que quiero es que cada pagina muestre solo el comentario que se haya escrito en la misma. El segundo problema es que quiero que cada pagina muestre Solo 10 comentarios por pagina y que despues del 10 se cree una pagina automaticamente, con los comentarios del 11 al 20 y luego otra con comentarios del 21 al 30 y asi sucesivamente. Lamentablemente no he subido la web aun pero aki les pongo lo que tengo hasta ahora. Gracias de antemano

Formulario que registra el comentario:

<form name="dejarcomentario" method="POST" action="procesarcomentarios.php">
<p>Nombre:*</p>
<input name="nombre" type="text" maxlength="20">
<p>Comentario:* </p>
<textarea name="comentario" cols="70" rows="5" wrap="soft">Dejar comentario</textarea>
<input name="submit" type="submit" value="Comentar">
</form>

Archivo que procesa los datos del formulario "procesarcomentarios.php":

<?php
//si la forma ha sido enviada editamos el registro.
if(isset($_POST['submit'])){


//nos conectamos a mysql
require("conexion.php");

$campos = "nombre,comentario";
$valores = "'".$_POST['nombre']."',";
$valores .= "'".$_POST['comentario']."'";
$sql = "INSERT INTO comments ($campos) VALUES($valores)";
$res = mysql_query($sql) or die(mysql_error());
echo "Su mensaje sera visible en unos segundos";
mysql_close($conectar);
}
header("Location:index.php");
?>

Codigo que muestra el comentario:

<table width="500px" border="1px" cellpadding="0px" cellspacing="0px" class="borde" >


<?php
//nos conectamos a mysql
require ("conexion.php");
//consulta.
$sql = "SELECT nombre,comentario FROM comments ORDER BY id ASC";
$res= mysql_query($sql) or die (mysql_error());

while (list($nombre,$comentario) = mysql_fetch_array($res))
{?>
<tr><td STYLE="border-bottom:1px solid white;border-left:1px solid white;border-top:1px solid white; filter:alpha(opacity=95)" bgcolor="#666666" ><?php echo"$nombre"; ?></td>
<td STYLE="border-top:1px solid white; border-bottom:1px solid white" align="center" bgcolor="#666666" width="200px">&nbsp;</td>
<td STYLE="border-bottom:1px solid white;border-right:1px solid white;border-top:1px solid white" bgcolor="#666666" >dd/mm/yyyy</td></tr>
<tr><td bgcolor="#999999" colspan="3" ><?php echo "<p>$comentario</p>"; ?></td></tr>
<tr><td colspan="3" height="20px"></td></tr> <?php
}

mysql_close($conectar);
?>

</table>
uffff .... bueno tienes un buen de errorsillos por ahi , pero bien empezemos por añadir en tu bd a tu tabla añade un campo que se llame pagina_id not null INT 10,

de ahi el formulario tendra que ser extension .php y atencion cada pagina que tendra comentario debera tener id es como un foro en chikito algo asi :

mipaginaweb.com/index.php?modo=verpagina&pagina=2

recuerda que utilizaremos el metodo GET de esta forma segun mi ejemplo lo pondre todo en el index.php por lo que podemos hacer que haga cosas dependiendo del contenido del get alog asi:

index.php:

<?php

$modo = $_GET['modo'];
$pagina = $_GET['pagina'];

if($modo == 'verpagina')
{
if($pagina = 1)
{
aqui el contenido de la pagina uno
}
}

hasta ahi alguna duda???
Es facil programar "Solo interesate en aprender"
Gracias por contestar amigo. Ya le añadi el campo a la base de datos. Lo que no me quedo muy claro es como poner el id a la pagina, entiendo que hay que poner el id asi cada comentarios sabra donde mostrarse, pero cuando dices mipaginaweb.com/index.php?modo=verpagina&pagina=2 quieres decir que debo guardar las paginas siguiendo ese formato? o se creara a partir de algun codigo que ponga en la web? y que deberia ir en modo,verpagina y pagina? Perdon pero nunca he entendido muy bien esto de ponerle id a las paginas
sirve para tener organizados varios apartados en un mismo archivo usando el metodo $_GET ......... te pondre un ejemplo:

tienes un archivo index.php y cuando entras muestra:

Hola Mundo.

pero si entras asi index.php?modo=usuario&usuario=cesar_ed

esto mostraria algo asi:

Hola cesar_ed.
en vez de hola mundo y su codigo seria algo asi:

index.php:

<?php

$modo= $_GET['modo']; // Esto vendria siendo lo que tenga la variable mode en url en este caso index.php?modo=usuario <-- ahi vemos que la variable modo es igual a usuario por lo que entonces $_GET['modo'] le pedimos que obtenga esa variable en la url y asi poder usar su contenido.

$u = $_GET['usuario']; //Obtenemos la variable usuario de la url.

//Ahora hagamos la funcion

if($modo == 'usuario') // le decimos que si la variable $modo que es la contiene la variable modo en la url si es igual a usuario que haga algo
{
if(empty($u)) //le decimos que si la variable usuario esta vacia haga algo
{
echo "Hola Mundo";
}
else { //Si no esta vacia que muestre su contenido

echo "Hola ".$u;
}
}
else{ // si la variable modo no es igual a usuario o algo parecido que devuelva algo por defecto :

echo "Hola Mundo";

}

Y con esto tendriamos nuestro script espero que lo hayas entendido si no no dudes en decirlo

Un saludo ;)
Es facil programar "Solo interesate en aprender"
Primero Seria bueno saber, como es que generas tus paginas, desde php y mysql o son archivos .html estaticos, si son archivos .html sera mas dificil asociar la pagina con los comentarios. en todo caso en lugar del id de la pagina que guardarias en pagina_id como se te indico antes por cesar_ed tendras que guardar el nombre del archivo html.
Mis paginas las genero en php,ya que uso codigo php para mostrar los comentarios, pero mysql solo lo uso para guardar los comentarios... gracias por contestar
cesar_ed:
Creo que ya entendi lo que me explicas. Cual seria el siguiente paso???

creo que seria bueno decirte que mis paginas php no las tengo almacenadas en MySQL. Deberia??
ok, entonces tus paginas no estan en la base de datos, sino en archivos cada una, por ejemplo, noticia1.html o noticia1.php, eso significa que no estan en una base de datos, sino que las escribes tu mismo de una en una, si es asi tendras que guardar como te dije el nombre de la pagina a la cual corresponden los comentarios, tu consulta al insertar el comentario seria algo como: "INSERT INTO tabla VALUES('$archivo','$nombre','$comentario')" donde $archivo sera el nombre de tu pagina, por ejemplo pagina1.php, y para mostrar los comentarios seria la consulta algo asi: "SELECT nombre,comentario FROM tabla WHERE pagina_id='$archivo'" Y asi se mostraran solo los comentarios de la pagina. en todo caso el campo que agregaste pagina_id ya no seria del tipo entero numerico si no del tipo varchar para almacenar la cadena con el nombre del archivo de la pagina.
Si asi como te lo indica serverdns , es muy correcto y facil de usar de una buena manera ..... .. y si el campo pagina_id cambialo a un tipo varchar 100 y ahi es donde guardaras la direccion de tu archivo algo asi /mispaginas/pagina1.php ........ y asi habra comentarios para cada pagina y al obtenerlas pues claro esta al seleccionar la tabla de comentarios selecciona asi es un ejemplo:

mysql_query("SELECT * FROM comentarios WHERE pagina_id='/mispaginas/pagina1.php');

Y asi seleccionaria todos los comentarios donde esten almacenados en esa pagina ;)

Suerte
Es facil programar "Solo interesate en aprender"
serverdns escribió:ok, entonces tus paginas no estan en la base de datos, sino en archivos cada una, por ejemplo, noticia1.html o noticia1.php, eso significa que no estan en una base de datos, sino que las escribes tu mismo de una en una, si es asi tendras que guardar como te dije el nombre de la pagina a la cual corresponden los comentarios, tu consulta al insertar el comentario seria algo como: "INSERT INTO tabla VALUES('$archivo','$nombre','$comentario')" donde $archivo sera el nombre de tu pagina, por ejemplo pagina1.php, y para mostrar los comentarios seria la consulta algo asi: "SELECT nombre,comentario FROM tabla WHERE pagina_id='$archivo'" Y asi se mostraran solo los comentarios de la pagina. en todo caso el campo que agregaste pagina_id ya no seria del tipo entero numerico si no del tipo varchar para almacenar la cadena con el nombre del archivo de la pagina.

cesar_ed escribió:Si asi como te lo indica serverdns , es muy correcto y facil de usar de una buena manera ..... .. y si el campo pagina_id cambialo a un tipo varchar 100 y ahi es donde guardaras la direccion de tu archivo algo asi /mispaginas/pagina1.php ........ y asi habra comentarios para cada pagina y al obtenerlas pues claro esta al seleccionar la tabla de comentarios selecciona asi es un ejemplo:

mysql_query("SELECT * FROM comentarios WHERE pagina_id='/mispaginas/pagina1.php');

Y asi seleccionaria todos los comentarios donde esten almacenados en esa pagina ;)

Suerte

Gracias a ambos, funciona de maravilla. Lo que no he podido lograr es crear paginas automaticas, para mostrar solo 10 comentario por pagina. Saben como hacerlo???
Claro que si, es haciendo una paginacion de resultados y aqui definitivamente debemos usar el metodo get con un valor que sera el numero de la pagina algo asi :

index.php?pagina=2

pagina es el numero de pagina al que entrara ..... hasta ahi todo bien?.
Es facil programar "Solo interesate en aprender"
Si todo bien hasta ahi, me ire guiando por el ejemplo que me mostrastes anteriormente y si no entiendo algo te dejo saber
Bien ahora , pon tu codigo que usas para obtener los comentarios y asi poder crear una buena forma de paginacion que se adapte
Es facil programar "Solo interesate en aprender"
Ok este es el formulario que registra los comentarios:

Fomulario:
<div id="form" style="margin-bottom:20px">
<form name="dejarcomentario" method="POST" action="procesarcomentarios.php">

<p>Nombre:*</p>

<input name="nombre" type="text" maxlength="20">

<p>Comentario:* </p>


<textarea name="comentario" cols="70" rows="5" wrap="soft">Dejar comentario</textarea>

<input name="archivo" type="hidden" value="index.php">
<input name="submit" type="submit" value="Comentar">
</form>
</div>

Este es el archivo que procesa el formulario

procesarcomentarios.php

<?php
//si la forma ha sido enviada editamos el registro.
if(isset($_POST['submit'])){


//nos conectamos a mysql
require("conexion.php");


$campos = "nombre,comentario,pagina_id";
$valores = "'".$_POST['nombre']."',";
$valores .= "'".$_POST['comentario']."',";
$valores .= "'".$_POST['archivo']."'";
$sql = "INSERT INTO comments ($campos) VALUES($valores)";
$res = mysql_query($sql) or die(mysql_error());
echo "Su mensaje sera visible en unos segundos";
mysql_close($conectar);
}
header("Location:".$_POST['archivo']."");
?>

Y este es el codigo que muestra los comentarios:

Codigo

<table width="500px" border="1px" cellpadding="0px" cellspacing="0px" class="borde" >


<?php
//nos conectamos a mysql
require ("conexion.php");
//consulta.
$archivo="index.php";
$sql = "SELECT nombre,comentario FROM comments WHERE pagina_id='$archivo' ORDER BY id ASC ";
$res= mysql_query($sql) or die (mysql_error());

while (list($nombre,$comentario) = mysql_fetch_array($res))
{?>
<tr><td><?php echo"$nombre"; ?></td>
<td ><div></div></td>
<td >dd/mm/yyyy</td></tr>

<tr><td><?php echo "<p>$comentario</p>"; ?></td></tr>
<tr><td colspan="3" height="20px"></td></tr> <?php
}

mysql_close($conectar);
?>

</table>
Bien entonces debemos adaptar el code yo lo he adaptado asi y espero que te funcione :

La edicion sera en el codigo que muestra los comentarios .


$seleccionar = mysql_query("SELECT nombre,comentario FROM comments WHERE pagina_id='".$archivo."' ORDER BY id ASC ") or die(mysql_error());
//Contemos cuantos comentarios existen
$numeroRegistros=mysql_num_rows($seleccionar);
if(!isset($orden))
{
el orden
$orden="id";
}


//Numero de comentarios que mostraremos por pagina
$tamPag=5;
$tamPagMas1=$tamPag + 1;


if(!$pp)
{
$pp=1;
$inicio=1;
$final=$tamPag;
}else{

}

$limitInf=($pp-1)*$tamPag;
$numPags=ceil($numeroRegistros/$tamPag);
if(!isset($pp))
{
$pp=1;
$inicio=1;
$final=$tamPag;
}else{
$seccionActual=intval(($pp-1)/$tamPag);
$inicio=($seccionActual*$tamPag)+1;

if($pp<$numPags)
{
$final=$inicio+$tamPag-1;
}else{
$final=$numPags;
}

if ($final>$numPags){
$final=$numPags;
}
}

$sql=mysql_query(SELECT nombre,comentario FROM comments WHERE pagina_id='$archivo' ORDER BY id ASC DESC LIMIT ".$limitInf.",". $tamPag ." ") or die(mysql_error());

if(mysql_num_rows($sql))
{
while($comentario = mysql_fetch_assoc($sql))
{
echo '
<tr><td>'.$comentario["nombre"].'</td>
<td ><div></div></td>
<td >dd/mm/yyyy</td></tr>

<tr><td>'.$comentario["comentario"].</td></tr>
<tr><td colspan="3" height="20px"></td></tr>
<p>(C) 2011 By cesar_ed CCTW</p> ';
}
}
echo '<div>';
if($pp>1)
{
echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pp-1)."'>";
echo "<font face='verdana' size='-2'>anterior</font>";
echo "</a> ";
}

for($i=$inicio;$i<=$final;$i++)
{
if($i==$pp)
{
echo "<font face='verdana' size='-2'><b>".$i."</b> </font>";
}else{
echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".$i."'>";
echo "<font face='verdana' size='-2'>".$i."</font></a> ";
}
}
if($pp<$numPags)
{
echo " <a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pp+1)."'>";
echo "<font face='verdana' size='-2'>siguiente</font></a>";
}
echo'</div>';

?>
Y listo tendriamos nuestra paginacion de resultados en el code que te di hay una variable que dice $tampag ahi puedes editar el numero de comentarios a mostrar por pagina. Me dices si funciona

Un saludo.
Es facil programar "Solo interesate en aprender"
Disculpa la demora, mi querido proveedor de internet me dejo sin internet un dia entero.

Bueno al asunto modifique esta linea:

$sql=mysql_query(SELECT nombre,comentario FROM comments WHERE pagina_id='$archivo' ORDER BY id ASC DESC LIMIT ".$limitInf.",". $tamPag ." ") or die(mysql_error());

Dejandola asi (sin DESC):

$sql=mysql_query(SELECT nombre,comentario FROM comments WHERE pagina_id='$archivo' ORDER BY id ASC LIMIT ".$limitInf.",". $tamPag ." ") or die(mysql_error());

la modifique porque php me daba error.

Ahora se muetran los mensajes pero solo los del 1 al 5, al introducir el comentario numero 6 aparece el boton siguiente,pero al hacer click en el no pasa nada, el navegador me deja en la misma pagina, probe en firefox,IE y Chrome,pero en la barra de direccion pone index.php?pagina=2. Yo uso como servidor local Wamp Server 2.1, y siempre he tenido problemas para usar la funcion PHP_SELF, cada vez que la he intentado usar me sale este mensaje: You don't have permission to access /< on this server., no se si es que la funcion esta desactivada. En este caso no sale el mensaje,solo que la pagina no muestra los siguientes mensajes,solo los del 1 al 5.

Deberia probar otro servidor local?
Deja todo tal cual esta solo quitale el php self y listo funcionara un saluod
Es facil programar "Solo interesate en aprender"
Te refieres a dejar la linea asi?

echo "<a class='p' href='?pagina=".$i."'>"
Claro que si a eso me refiero .
Es facil programar "Solo interesate en aprender"
ya probe eso y nada, no entiendo porque no funciona si el codigo no esta mal y php no tira ningun error
Jujuju

No da error porque no hay ningun error y alparecer todo funcionara bien que bueno ;)

Pero cuando hice el codigo estuve trabajando con la variable $pp que es el que obtiene el $_GET de la paginacion y olvide declararla jejeje, asi que entonces antes del codigo que te di pon esto:

$pp = $_GET['pagina'];

xD

Un saludo
Es facil programar "Solo interesate en aprender"
Ya funciona, usted es un genio jejeje. Yo pensaba que sabia php, la verdad es que no sabia la mitad del codigo que me distes

modifique esta parte del codigo
if(!$pp)
{
$pp=1;
$inicio=1;
$final=$tamPag;
}else{
}

Dejandola asi:

if(!isset($_GET['pagina']))
{
$pp=1;
$inicio=1;
$final=$tamPag;
}else{
$pp = $_GET['pagina'];

}
Ahora todo funciona a la perfeccion. Muchas gracias,no se como agradecerte pase semanas buscando ayuda y nadie me habia podido ayudar como tu lo has hecho
Que bien que ya te haya funcionado, y no hay problema recuerda que en esta comunidad estamos para aprender y ayudar y espero que en un futuro lo hagas igual xD

Un saludo ;)


PD: WoW mi mensaje numero 500 que bien que fue ayudando a alguien xD