Foros del Web » Programando para Internet » PHP »

Inserto un comentario y se pone en todas las noticias [ayuda]

Estas en el tema de Inserto un comentario y se pone en todas las noticias [ayuda] en el foro de PHP en Foros del Web. Hola, Soy novato en esto y estaba probando un sistema de noticias que hice. Necesito poner un sistema de comentarios en cada noticia, pero cuando ...
  #1 (permalink)  
Antiguo 07/08/2009, 22:53
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Edito: no me funciona el sistema de comentarios! [ayuda]

Hola,

Soy novato en esto y estaba probando un sistema de noticias que hice. Necesito poner un sistema de comentarios en cada noticia, pero cuando agrego una me salta en absolutamente todas las entradas que tengo.

Debe ser un problema del select * from que no se como ubicarlo, si alguien me puede dar una mano buenísimo.

Les adjunto el formulario y su archivo guardar.php

Código PHP:
<?php 
            
require("conexion.php");
            
$query=mysql_query("select * from comen order by fecha desc limit 10  ",$connection);
            
$array=mysql_fetch_array($query);
            echo 
$array['mensaje'];
            
?>
            
            <form id="form1" name="form1" method="post" action="guardar.php">
              <label>
              <input type="text" name="nombre" id="nombre" />
              </label>
                                    <p>
                                      <label>
                                      <textarea name="mensaje" id="mensaje" cols="45" rows="5"></textarea>
                                      </label>
                    </p>
                                    <p>
                                      <label>
                                      <input type="submit" name="button" id="button" value="Enviar" />
                                      </label>
                                    </p>
            </form>

GUARDAR.PHP (inserta los datos en la base, esto funciona bien)

Código PHP:
<?php 

$nombre
=$_POST['nombre'];
$fecha=date("d/m/y H:i a");
$mensaje=$_POST['mensaje'];
require(
"conexion.php");
$sql="INSERT INTO comen (nombre, fecha, mensaje)
    VALUE ('$nombre', '$fecha', '$mensaje')"
;
mysql_query($sql,$connection);        

?>
Pueden verlo aquí: http://www.quebebota.com/php/

Gracias desde ya.

Última edición por Federic0; 10/08/2009 a las 20:32
  #2 (permalink)  
Antiguo 07/08/2009, 23:31
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Esta sentencia recoge 10 comentarios asi..... sin decirle a que mensaje pertenecen:

$query=mysql_query("select * from comen order by fecha desc limit 10 ",$connection);

Deberias cambiarlo a algo asi:

$query=mysql_query("select * from comen where mensaje=$idmensaje order by fecha desc limit 10 ",$connection);

Donde $idmensaje es el identificador del mensaje en cuestion que esta viendo el usuario
  #3 (permalink)  
Antiguo 08/08/2009, 00:13
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 9 meses
Puntos: 4
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Profundizando lo que ha dicho Vun.

La idea es que el comentario identifique a que post pertenece. En tu tabla de comentarios deberías tener un campo llamado id_post. Pasas la variable 'codigo' en un campo hidden e insertas ya ese valor en tu sentencia sql de guardar.php

Despues ya tu SELECT sería como dice Vun select * from comentarios where id_post = '$codigo'

un abrazo

Samuel
__________________
Equívocos sin importancia
  #4 (permalink)  
Antiguo 08/08/2009, 02:37
Avatar de fcdragons  
Fecha de Ingreso: agosto-2008
Ubicación: echo $_REQUEST['ubicacion'];
Mensajes: 474
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Dios Oo lo que vi al quitarle el /php/ xD
Bueno, en si eso, y tambien te recomiendo que cuando se este leyendo una noticia, en el panel derecho no salga esta y salga continuar leyendo, supongo que estas editando ls comentarios, porque no los veo, y guardar.php es una pagina en blanco Oo

Bueno deew.
__________________
SumarioWeb
@sumarioweb
BasicNews
  #5 (permalink)  
Antiguo 08/08/2009, 12:21
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Hola gente,

Muchas gracias por las respuestas. Claro, yo pensaba lo msimo, que necesito identificar el código de a que mensaje corresponde.

Lo puse así:

Código PHP:
<?php 
require("conexion.php");        
$query=mysql_query("select * from comen where cod_mensaje='$codigo' ",$connection);
$array=mysql_fetch_array($query);
echo 
$array['mensaje'];
?>
Pero me tira error.. http://www.quebebota.com/php/nota.php?codigo=27

Igualmente, no habría que identificar la variable '$codigo'?

Acá les dejo como está armada la tabla en la base, capaz también ayuda:

Código PHP:
CREATE TABLE IF NOT EXISTS `comen` (
  `
codigoint(11NOT NULL auto_increment,
  `
nombrevarchar(100NOT NULL default '',
  `
fechadatetime NOT NULL default '0000-00-00 00:00:00',
  `
mensajetext NOT NULL,
  
PRIMARY KEY  (`codigo`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 
Mil gracias!

PD: Ya sé que tendria que haber hecho un do - while en vez de echo $mensaje pero solo estaba probando.
  #6 (permalink)  
Antiguo 08/08/2009, 15:05
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

segun veo cod_mensaje no es ningun campo de tu base de datos, asi deberia funcionar:

$query=mysql_query("select * from comen where codigo='$codigo' ",$connection);
  #7 (permalink)  
Antiguo 09/08/2009, 22:23
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

No hay caso...

Se puede tener dos select en la misma página? Quizás ahí está el error... igualmente, están separados.

Les muestro.

Aquí llamo a la noticia (que está en una tabla llamada mensaje):

Código PHP:
<?php
require("conexion.php");
$noticia_id intval($_GET['codigo']);
$sql "SELECT * FROM mensaje WHERE cod_mensaje = $noticia_id";
$res mysql_query($sql) or die(mysql_error());
$row mysql_fetch_assoc($res);


echo 
"<table width=600 border=0 align=center cellpadding=3 cellspacing=4 bgcolor=#000000>";

  
do {

  echo 
"<tr>";
    echo 
"<td><table width=100% border₧0 cellspacing=3 cellpadding=2>";
      echo 
"<tr>";
        echo 
"<td><table width=100% border=0 cellspacing=2 cellpadding=1>";
          echo 
"<tr>";
            echo 
"<td><div class=Estilo8>".$row['titulo']."<div></td>";
          echo 
"</tr>";
          echo 
"<tr>";
            echo 
"<td><div class=Estilo10>Por ".$row['persona']." - ".$row['fecha']."<div></td>";
          echo 
"</tr>";
                    echo 
"<tr>";
            echo 
"<td height=5><div class=Estilo7><div></td>";
          echo 
"</tr>";
                    echo 
"<tr>";
            echo 
"<td><div class=Estilo7>".$row['fotonota']."<div></td>";
          echo 
"</tr>";
                    echo 
"<tr>";
            echo 
"<td height=5><div class=Estilo7><div></td>";
          echo 
"</tr>";
                    echo 
"<tr>";
            echo 
"<td><div class=Estilo7>".$row['mensa']."<div></td>";
          echo 
"</tr>";
        echo 
"</table></td>";
     echo  
"</tr>";
      echo 
"<tr>";
       echo  
"<td height=20 background=separador.png>&nbsp;</td>";
     echo  
"</tr>";
    echo 
"</table></td>";
  echo 
"</tr>";

  

    

} while(
$row mysql_fetch_assoc($res));

echo 
"</table>";
?>
Y abajo intento poner los comentarios (en la tabla llamado comen), pero no hay manera que me los muestre. Puse así ahora:

Código PHP:
<?php 
            
require("conexion.php");
            
$query=mysql_query("select * from comen where codigo='$codigo' ",$connection);
            
$array=mysql_fetch_array($query);
            echo 
$array['mensaje'];
            
?>
Pero no anda... perdonen por romper tanto la paciencia, pero no encuentro la forma.

Abrazos.
  #8 (permalink)  
Antiguo 10/08/2009, 07:21
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

¿estas seguro que hay comentarios guardados en tu base de datos con los nombres de los campos correctos? Es lo unico que se me ocurre, porque tal como lo muestras supuestamente deberia mostrar el mensaje de un comentario (recuerda que tendras que hacer un bucle tambien para los comentarios tal y como haces con las noticias)
  #9 (permalink)  
Antiguo 10/08/2009, 12:44
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Sí, lo repasé varias veces y creo que sí, a menos que se me haya pasado algo por encima.

Les dejo un screen:

TABLA



COMENTARIOS GUARDADOS

  #10 (permalink)  
Antiguo 10/08/2009, 13:37
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Bueno ahi ya vemos bastante claro cual es tu error. Cuando diseñas las bases de datos hay que tener muuuuuuuuuy claro cierto concepto de relacion de tablas. Y lo mejor es explicartelo con un ejemplo:

-Centremonos en el primer comentario
Codigo: 1 Nombre: fgfgfgf Fecha: 000-0-0-0-0 Mensaje: fgfgfgf

-¿Que dato de ese registro lo relaciona con el registro de la tabla mensajes?
-Ninguno

-Solucion: Crea un campo mas para la tabla comen que se llame codigomensaje, y cuando hagas el INSERT pertinente asegurate que se grabe bien el codigo del mensaje al que pertenece dicho comentario.

-Moraleja: Cuando empiezas a crear tablas y tablas debes hacerte la siguiente pregunta, en este caso voy a hacer la que harías en tu base de datos ¿Un comentario tiene varias noticias? NO, por lo tanto no tenemos nada que añadir. ¿Una noticia tiene varios comentarios? SI, por lo tanto en la tabla comentario debemos añadir un campo nuevo que se identifique con el campo clave de la noticia.
  #11 (permalink)  
Antiguo 10/08/2009, 14:09
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Ahhh, ahora voy entendiendo un poco más gracias a tus respuestas. Disculpá que pregunte tanto, pasa que recién estoy empezando.

Ya creé el campo codigomensaje, pero como hago para relacionarlo con la noticia?

El guardar.php me quedaría así ?:

Código PHP:
<?php 
$codigo
=$_GET['codigo'];
$nombre=$_POST['nombre'];
$fecha=date("d/m/y H:i a");
$mensaje=$_POST['mensaje'];
require(
"conexion.php");
$sql="INSERT INTO comen (nombre, fecha, mensaje, codigomensaje)
            VALUE ('$nombre', '$fecha', '$mensaje', '$codigomensaje')"
;
mysql_query($sql,$connection);        
?>
Y el select *from para llamar los comentarios como sería?

Disculpas de nuevo, pero de a poco voy entendiendo. Espero funcione.

Gracias y abrazos!
  #12 (permalink)  
Antiguo 10/08/2009, 17:10
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

la variable $codigomensaje en el INSERT tiene que tener el valor del ID de la noticia... yo lo que haria es en el formulario del comentario añades un campo oculto, que se llame igual: codigomensaje y ya de valor le pones el de la noticia.

Entonces luego quedaria asi:

Código:
<?php 
$codigo=$_GET['codigo'];
$nombre=$_POST['nombre'];
$fecha=date("d/m/y H:i a");
$mensaje=$_POST['mensaje'];
$codigomensaje=$_POST['codigomensaje'];
require("conexion.php");
$sql="INSERT INTO comen (nombre, fecha, mensaje, codigomensaje)
            VALUE ('$nombre', '$fecha', '$mensaje', '$codigomensaje')";
mysql_query($sql,$connection);        
?>

animo que ya casi lo tenemos!! jeje
  #13 (permalink)  
Antiguo 10/08/2009, 17:28
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Pero como hago para identificar a que noticia pertenece? Es decir, el formulario es el mismo para todas las noticias...

Y otra cosa, yo no debería identificar de alguna manera la variable "$codigo" que es la que identifica a la noticia?

El formulario me quedaría así, pero como le paso la variable que corresponde? Bah... mejor pasemos en limpio, te copio todo lo que tengo y vemos que habría que modificarle:

Formulario y llamada de los comentarios:

Código PHP:
<?php 
            
require("conexion.php");
            
$query=mysql_query("select * from comen where codigo='$codigomensaje' ",$connection);
            
$array=mysql_fetch_array($query);
            echo 
$array['mensaje'];
            
?>
            
            <form id="form1" name="form1" method="post" action="guardar.php">
              <label>
              <input type="text" name="nombre" id="nombre" />
              </label>
                                    <p>
                                      <label>
                                      <input name="codigomensaje" type="hidden" id="codigomensaje" value="<?php "$codigomensaje" ?>" />
                                      </label>
                                    </p>
<p>
                                      <label>
                                      <textarea name="mensaje" id="mensaje" cols="45" rows="5"></textarea>
                                      </label>
                    </p>
                                    <p>
                                      <label>
                                      <input type="submit" name="button" id="button" value="Enviar" />
                                      </label>
                                    </p>
            </form>
guardar.php

Código PHP:
<?php 
$codigo
=$_GET['codigo'];
$nombre=$_POST['nombre'];
$fecha=date("d/m/y H:i a");
$mensaje=$_POST['mensaje'];
$codigomensaje=$_POST['codigomensaje'];
require(
"conexion.php");
$sql="INSERT INTO comen (nombre, fecha, mensaje, codigomensaje)
            VALUE ('$nombre', '$fecha', '$mensaje', '$codigomensaje')"
;
mysql_query($sql,$connection);        
?>
Admiro tu paciencia
  #14 (permalink)  
Antiguo 10/08/2009, 18:40
 
Fecha de Ingreso: agosto-2009
Ubicación: Lanzarote - Canarias
Mensajes: 57
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

para un sistema de comentarios tienes que tener dos cosas esenciales, 1 seria el ID que corresponda a cada cmentario y un ID_PADRE que seria la ID de la noticia o lo que sea pues sino los comentarios no sabria donde tienen que aparecer
  #15 (permalink)  
Antiguo 10/08/2009, 19:08
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Tengo ambos, pero no se como relacionarlos.

El "ID PADRE" sería el ID de la noticia que se llama $cod_mensaje y el ID del comentario se llama $codigo. También le agregue $codigomensaje como me dijo Vun, pero no se como relacionarlos para que aparezcan.

Abrazo!

Última edición por Federic0; 10/08/2009 a las 19:35
  #16 (permalink)  
Antiguo 10/08/2009, 19:15
 
Fecha de Ingreso: agosto-2009
Ubicación: Lanzarote - Canarias
Mensajes: 57
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

en el formulario de comentar tienes que poner un imput escondido
Código PHP:
<input type="hidden" name="codigomensaje" value="$array[codigo]"
que por lo visto ya lo tienes pero mal pues tienes que poner segun tu consulta $array[codigo]
edit bueno en parte esta bien pero tienes que ponerle un $_GET[codigomensaje] sino no te va a ir bien
  #17 (permalink)  
Antiguo 10/08/2009, 19:31
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Probe poniendo value="$array[codigo]" , value="<?php $array[codigo] ?>" y value="<?php "$array[codigo]" ?>" pero sigue sin mostrar los comentarios.

esta parte esta bien?

Código PHP:
<?php 
            
require("conexion.php");
            
$query=mysql_query("select * from comen where codigo='$codigomensaje' ",$connection);
            
$array=mysql_fetch_array($query);
            echo 
$array['mensaje'];
            
?>
Me esta volviendo loco este sistemita de comentarios jajaja.

Abrazo.

PD: me habia confundido, el ID de la noticia se llama cod_mensaje, probe poniendo eso en value pero tmp funciona.

Última edición por Federic0; 10/08/2009 a las 19:36
  #18 (permalink)  
Antiguo 11/08/2009, 05:21
 
Fecha de Ingreso: agosto-2009
Ubicación: Lanzarote - Canarias
Mensajes: 57
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Inserto un comentario y se pone en todas las noticias [ayuda]

Código PHP:
<?php 
            
require("conexion.php");
$noticia_id intval($_GET['codigo']);
$sql "SELECT * FROM mensaje WHERE codigo = $noticia_id";
$res mysql_query($sql) or die(mysql_error());
echo 
"<table width=600 border=0 align=center cellpadding=3 cellspacing=4 bgcolor=#000000>";
while(
$row mysql_fetch_array($res)){
  echo 
"<tr>";
    echo 
"<td><table width=100% border=0 cellspacing=3 cellpadding=2>";
      echo 
"<tr>";
        echo 
"<td><table width=100% border=0 cellspacing=2 cellpadding=1>";
          echo 
"<tr>";
            echo 
"<td><div class=Estilo8>".$row['titulo']."<div></td>";
          echo 
"</tr>";
          echo 
"<tr>";
            echo 
"<td><div class=Estilo10>Por ".$row['persona']." - ".$row['fecha']."<div></td>";
          echo 
"</tr>";
                    echo 
"<tr>";
            echo 
"<td height=5><div class=Estilo7><div></td>";
          echo 
"</tr>";
                    echo 
"<tr>";
            echo 
"<td><div class=Estilo7>".$row['fotonota']."<div></td>";
          echo 
"</tr>";
                    echo 
"<tr>";
            echo 
"<td height=5><div class=Estilo7><div></td>";
          echo 
"</tr>";
                    echo 
"<tr>";
            echo 
"<td><div class=Estilo7>".$row['mensa']."<div></td>";
          echo 
"</tr>";
        echo 
"</table></td>";
     echo  
"</tr>";
      echo 
"<tr>";
       echo  
"<td height=20 background=separador.png>&nbsp;</td>";
     echo  
"</tr>";
    echo 
"</table></td>";
  echo 
"</tr>";


}
echo 
"</table>";
            
$query=mysql_query("select * from comen where codigomensaje='$noticia_id' ",$connection);
            
$array=mysql_fetch_array($query);
            echo 
$array['mensaje'];
            
?>
            
            <form id="form1" name="form1" method="post" action="guardar.php">
              <label>
              <input type="text" name="nombre" id="nombre" />
              </label>
                                    <p>
                                      <label>
                                      <input name="codigomensaje" type="hidden" id="codigomensaje" value="<?php "$noticia_id" ?>" />
                                      </label>
                                    </p>
<p>
                                      <label>
                                      <textarea name="mensaje" id="mensaje" cols="45" rows="5"></textarea>
                                      </label>
                    </p>
                                    <p>
                                      <label>
                                      <input type="submit" name="button" id="button" value="Enviar" />
                                      </label>
                                    </p>
            </form>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:06.