Foros del Web » Programando para Internet » PHP »

rizando el rizo con las renumeraciones

Estas en el tema de rizando el rizo con las renumeraciones en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 21/06/2010, 03:23
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
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
  #2 (permalink)  
Antiguo 21/06/2010, 12:02
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: rizando el rizo con las renumeraciones

he probado seguir un planteamiento similar al inicial, pero al utilizar como medio para eliminar la ip en lugar del codcom del comentario, me elimina todos los de esa ip pero no me renumera porque no coge todos los comentarios de esas ips....uff...vaya lio...alguna ayuda? no doy con la solución
__________________
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
  #3 (permalink)  
Antiguo 21/06/2010, 12:22
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: rizando el rizo con las renumeraciones

wow... si lo resumieras en un par de palabras quiza te ayudaria x'D... desde mi trabajo no me da el tiempo para leer tanto por solo 1 tema :B

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #4 (permalink)  
Antiguo 21/06/2010, 23:55
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: rizando el rizo con las renumeraciones

ya sé que es un poco largo pero está lo más resumido posible...si lo resumo más me diréis que no tenéis datos suficientes para saber que es lo que pasa....

en definitiva, elimino un usuario que ha puesto comentarios mediante su ip, con lo cual me eliminará todos los comentarios que haya puesto este usuario en cualquier noticia. ¿Qué debería suceder entonces? pues que los comentarios que hay posteriores a él se renumeren en el valor count (si en la noticia 1 hay 5 comentarios y el que ha puesto este usuario es el que tiene el valor count=3, al eliminarlo que el comentario con count= 4 y con count=5 se renumeren esos valores para quedar con count=3 y count=4 y así con todas las noticias en las que haya comentarios de ese usuario). más arriba está el código que uso.
__________________
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

Etiquetas: Ninguno
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 14:52.