Foros del Web » Programando para Internet » PHP »

problema 'comentarios'

Estas en el tema de problema 'comentarios' en el foro de PHP en Foros del Web. hola, estoy haciendo un script de comentarios en una noticia pero no consigo hacer que me funcione correctamente. el script funciona bien excepto cuando borras ...
  #1 (permalink)  
Antiguo 20/02/2006, 18:11
RbR
 
Fecha de Ingreso: febrero-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
problema 'comentarios'

hola,

estoy haciendo un script de comentarios en una noticia pero no consigo hacer que me funcione correctamente.
el script funciona bien excepto cuando borras algun comentario, entonces mi "contador de registros" peta y ya no deja añadir ni nada.

os dejo el codigo aver si alguein me puede ayudar:


$result = mysql_query("SELECT * FROM comentarios WHERE id='$id'" ,$link) or Error_mysql();
while ($row = mysql_fetch_array($result)) {
$numero_comentarios++;
}

$numero_comentarios++;


$insertar_comentario = mysql_query ("INSERT INTO comentarios (id,idc,nick,fecha,comentario) values ('$id_noticia','$numero_comentarios','$_SESSION[usuario]','$fecha','$comentario')");


Lo que quiero que funcione esque siempre sepa que numero de comentarios hay en cada noticia para asi asignarle una IDc pero no consigo que lo haga bien
  #2 (permalink)  
Antiguo 20/02/2006, 19:13
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 3 meses
Puntos: 1
comments

Este es tu código (siempre conviene marcarlo con etiquetas para que se vea en colores):

Código PHP:
//

$result mysql_query("SELECT * FROM comentarios WHERE id='$id'" ,$link) or Error_mysql();
while (
$row mysql_fetch_array($result)) {
$numero_comentarios++;

Hasta aquí consultaste a la base de datos, en particular seleccionaste un ID de noticia, ésta noticia puede tener muchos comentarios en específico, por eso haces un ciclo While, para contar cuántos comentarios hay en este momento.

Esto que menciono lo puedes hacer más fácil como:
Código PHP:
//
$result mysql_query("SELECT * FROM comentarios WHERE id='$id'" ,$link) or Error_mysql();
$numero_comentarios=mysql_num_rows($result); 
Cita:
Lo que quiero que funcione esque siempre sepa que numero de comentarios hay en cada noticia para asi asignarle una IDc pero no consigo que lo haga bien
Con eso ya sabes cuántos comentarios hay en cada noticia.

Lo que haces no es exactamente la mejor forma de tener tus comentarios. Pero si no vas a necesitar nada más complejo y así te funciona, pues adelante.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #3 (permalink)  
Antiguo 20/02/2006, 19:17
RbR
 
Fecha de Ingreso: febrero-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
gracias por tu ayuda pero sige sin funcionar correctamente.

de que manera comentas que lo podria hacer mejor??
  #4 (permalink)  
Antiguo 20/02/2006, 19:35
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 3 meses
Puntos: 1
es mejor a´si

Lo que tienes ahorita es una tabla en la que metes tanto el ID de la noticia como el IDC de comentario.

Y está bien. Llamémosle a noticia y a comentario entidades.

Ahora, cada entidad debería tener su propia tabla, tendrías así a la tabla comentarios y a la tabla noticias, (en negritas pongo cuál es la clave primaria)

TABLAS:
noticias (id_noticia, nombre_noticia, etc, etc.
comentarios (idc, nick, fecha, comentario, id_noticia)

Quizá tú nada más quieras tener una tabla de comentarios y no de noticias, está bien, pero nota como la tabla de comentarios tiene como clave primaria a IDc, también se incluye una referencia (ver cursivas) a la noticia a la que corresponde, ¿hasta aquí todo bien?

Pues bueno, que así se facilitan las cosas, ¿cómo hacer para insertar un comentario?

Ya no necesitas saber cuántos comentarios han pasado hasta el momento, pues como declaras a la clave primaria IDc como AUTO_INCREMENT, esta se incrementará solita con cada comentario que vayas insertando.

ejemplo de SQL para tu tabla comentarios:
Código:
CREATE TABLE comentarios (
  idc INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nick VARCHAR(30) NOT NULL,
  fecha DATE NOT NULL,
  comentario VARCHAR(255) NOT NULL,
  id_noticia INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(idc)
);
Ejemplo de cómo insertar nuevos comentarios:
Código:
$sql = 'INSERT INTO `comentarios` (`idc`, `nick`, `fecha`, `comentario`, `id_noticia`) VALUES ('''', ''uamistad'', ''2006-02-20'', ''Me gustó mucho este sitio web.'', ''45'')';
Yo usé texto aquí para hacer este insert, pero en tu aplicación usas las variables que ya usas ahorita.

Nota que no me apura cuántos comentarios haya previamente, ni tengo que hacer un SELECT anterior a mi INSERT.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #5 (permalink)  
Antiguo 20/02/2006, 19:42
RbR
 
Fecha de Ingreso: febrero-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
asi es como lo tengo hecho, 2 tablas diferentes.

lo que no me keda del todo claro es como hacer que la IDc "crezca +1" en las diferentes IDs independientemente
  #6 (permalink)  
Antiguo 20/02/2006, 19:45
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 3 meses
Puntos: 1
Cita:
lo que no me keda del todo claro es como hacer que la IDc "crezca +1" en las diferentes IDs independientemente
Tú no lo haces, lo hace MySQL automáticamente cuando declaras un atributo como AUTO_INCREMENT.

AGREGO

Al momento de insertar el registro, en donde vaya el campo AUTO_INCREMENT, en este caso así declaré a IDC en el SQL de la tabla, puedes ponerle ahí un valor NULL o una cadena vacía, MySQL solito calcula el siguiente "crezca + 1" y se lo asigna.

Ej.

$sql = 'INSERT INTO `comentarios` (`idc`, `nick`, `fecha`, `comentario`, `id_noticia`) VALUES ('''', ''uamistad'', ''2006-02-20'', ''Me gustó mucho este sitio web.'', ''45'')';

o bien:

$sql = 'INSERT INTO `comentarios` (`idc`, `nick`, `fecha`, `comentario`, `id_noticia`) VALUES (NULL, ''uamistad'', ''2006-02-20'', ''Me gustó mucho este sitio web.'', ''45'')';
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #7 (permalink)  
Antiguo 20/02/2006, 19:50
RbR
 
Fecha de Ingreso: febrero-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
muchisimas gracias! voi a probar ahora mismo
  #8 (permalink)  
Antiguo 20/02/2006, 20:07
RbR
 
Fecha de Ingreso: febrero-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
mmmmm añado los registros pero no entiendo que ocurre, borro todo el contenido de comentarios, añado varios de ellos y en vez de auto incrimentarlos +1 empiezan en el 15 , y sige sumandole +1 aunque el comentario sea de otra noticia
  #9 (permalink)  
Antiguo 20/02/2006, 20:12
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 3 meses
Puntos: 1
Exactamente amigo. MySQL numera desde el 1 en adelante.

Si borras, MySQL se seguirá en el número en el que se quedó.

Esto está bien, ya que la función de un ID no es numerar secuencialmente los registros, sino identificarlos de forma única y la función se cumple.

Si lo que deseas es numerarlos al momento de imprimirlos, puedes usar lo que ya antes habías usado:

while ($row = mysql_fetch_array($result)) {
$numero_comentarios++;
}

y en cada iteración se irá colocando el número de comentario.

De hecho, el ID podría ser, en lugar de 15, una cadena como "7849372849jflkdasjj98023" y estaría bien, pues se está identificando de forma única a un elemento de una tabla.

En general, no suelen almacenarse atributos que puedan generarse de forma dinámica al momento de presentar la información.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #10 (permalink)  
Antiguo 20/02/2006, 20:20
RbR
 
Fecha de Ingreso: febrero-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
si uso de nuevo el while estare en las mismas, al borrar un comentario e insertar uno nuevo el script fallara.. :(

nose entonces como pueden hacer en otras webs que por ejemplo usan para borrar un comentario:

/comentando.php?id=17884&idc=23&do=borra

nose como hacer que el idc sea igual al numero de comentarios de la noticia siempre aunque borre alguno
  #11 (permalink)  
Antiguo 21/02/2006, 22:12
RbR
 
Fecha de Ingreso: febrero-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
mmmmmm retokando un poco el while me a salido!! muchas gracias >D
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




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