Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/06/2010, 03:23
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 6 meses
Puntos: 1
rizando el rizo con las renumeraciones

Hola a todos. Vamos a rizar un poquito más el rizo si se puede. Cuidado que el tostón que voy a soltar ahora para poneros en antecedentes es algo largo. bien. comencemos.

tengo una tabla llamada comentarios donde se recogen los comentarios que se hacen a noticias que están en una tabla llamada noticias. están relacionadas ambas tablas por el codart que es un código aleatorio que se genera automáticamente en la tabla noticias al dar de alta a una noticia y que luego, cuando se está en la noticia en cuestión, al añadir un comentario se incorpora a la tabla comentarios en el campo codcomart.

En esa tabla comentarios existe un campo llamado 'count' que recoge el número de comentario que sobre una noticia hace el que se está añadiendo en cuestión.

Es decir, si de la noticia con codnot =5263ef añado un primer comentario, en ese campo count de la tabla comentario aparecerá el valor 1. cuando añada otro comentario en la noticia con codnot =5263ef, en ese nuevo comentario, el valor del campo count deberá ser 2 y así sucesivamente.

Si ahora añado un nuevo comentario pero a una noticia con codnot =88888ef, con independencia de que de la anterior noticia ya haya dos comentarios, al comentario que estamos añadiendo de esta, en el campo count le correspondería el valor 1, pues no tiene nada que ver con los anteriores.

RESUMEN:
tabla 'comentarios'
idcom - id del comentario. es un autonumérico
comentario - comentario en cuestión
codcom - codigo del comentario, generado de forma aleatoria
codcomnot - codigo de las noticias, que lo relaciona con la tabla noticias
ipcom - ip del usuario que mete el comentario
count – contador de los comentarios de cada noticia

tabla 'noticias'
idnoticia - id de la noticia
noticia - noticia en cuestión
codnot - codigo de la noticia, generado de forma aleatoria, que es el que relaciona con la tabla comentarios, donde en la tabla comentarios es codcomart

El problema me venía a la hora de eliminar comentarios. Supongamos que la noticia con código 5263ef, que tiene 5 comentarios, elimino el comentario con el count número 3, los comentarios que hay posteriores a él de esa noticia (es decir, los que tienen el count 4 y 5) deberían actualizarse para poner el 3 y el 4.

es decir, elimino el comentario número 3 en esa noticia en cuestión y los siguientes de esa misma noticia se deberían renumerar actualizando el campo count en esos comentarios para ponerlos el 3 y el 4.

cómo conseguí? Pues saco el idcom, que es un autonumérico, del comentario que quiero eliminar. una vez lo tengo, elimino el comentario y actualizo con el siguiente código:

mysql_query("UPDATE comentarios SET count = count-1 WHERE idcom > '$idcom' and codcomnot ='$ codnot ");

Es decir, el resumen final de todo el código es el siguiente:

Primero mostramos todos los comentarios y seleccionamos los que queramos eliminar (pueden ser uno, dos, los que sean)
Código PHP:
echo "<td><input type=checkbox name='codcom[]' value='$datos[codcom]'></td>"
Una vez que hemos seleccionado los comentarios a eliminar, procesamos:
Código PHP:
foreach($_POST["codcom"] as $valor){ 
$sqlcom="SELECT * FROM comentarios INNER JOIN noticias ON codcomnot =codnot WHERE codcom='$valor'";
$resultcom mysql_query($sqlcom);
while(
$datoscom mysql_fetch_array($resultcom)) 
{
$codnot =$datoscom["codnot"];
$idcom$datoscom["idcom"];

//eliminamos el o los comentarios
mysql_query("DELETE FROM comentarios WHERE codcom='$valor'");
//actualizamos el registro count
mysql_query("UPDATE comentarios SET count = count-1 WHERE idcom > '$idcom' and codcomnot ='$codnot ");

echo 
"correcto";    
}}} 
qué conseguimos con todo esto? pues que cuando yo elimine comentarios, me renumere el valor de count a partir del comentario eliminado dentro de los comentarios de una misma noticia. si elimino dos comentarios pertenecientes a dos noticias diferentes, me renumera los comentarios posteriores que haya a los comentarios eliminados.

bien. hasta aquí todo correcto cuando eliminamos comentarios pasando el codcom (código de comentario) para identificar los comentarios a eliminar.

pero dónde estaría ahora el quid máximo? pues cuando elimino no el comentario en cuestión si no todos los comentarios realizados por una misma ip (es un sistema de banneo de ips).

cuál es el problema? pues que siguiendo la misma lógica anterior pero sólamente cambiando que lo que quiero eliminar son los de la misma ip, es decir, teniendo esto

Código PHP:
foreach($_POST["codcom"] as $valor){ 
$sqlcom="SELECT * FROM comentarios INNER JOIN noticias ON codcomnot =codnot WHERE codcom='$valor'";
$resultcom mysql_query($sqlcom);
while(
$datoscom mysql_fetch_array($resultcom)) 
{
$codnot =$datoscom["codnot"];
$idcom$datoscom["idcom"];
$ipcom=$datoscom["ipcom"];

//eliminamos el o los comentarios
mysql_query("DELETE FROM comentarios WHERE ipcom='$ipcom'");
//actualizamos el registro count
mysql_query("UPDATE comentarios SET count = count-1 WHERE idcom > '$idcom' and codcomnot ='$codnot ");

echo 
"correcto";    
}}} 
sólamente me elimina el primero de los comentarios de esa ip (si son dos noticias diferentes, pues el primero que se encuentra de cada noticia). Consecuentemente no me actualiza los counts correctamente. es decir, me elimina todos los comentarios hechos con esa ip, sean de la noticia que sea, pero no me renumera bien los counts.

alguien me ayuda?:corazon :
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen