Foros del Web » Programando para Internet » PHP »

Borrar registro seleccionado con checbox

Estas en el tema de Borrar registro seleccionado con checbox en el foro de PHP en Foros del Web. Hola. Este script no da error pero no funciona porque no borra los mensajes seleccionados. Se compone de un archivo formulario.php que envía los datos ...
  #1 (permalink)  
Antiguo 21/10/2004, 12:17
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 20 años, 6 meses
Puntos: 0
Borrar registro seleccionado con checbox

Hola.

Este script no da error pero no funciona porque no borra los mensajes seleccionados.

Se compone de un archivo formulario.php que envía los datos a procesar.php para que borre. La BD se llama registrados y la tabla mensajes.

formulario.php

<?
include("configuracion.php"); //conecta a la bd registrados
// Ejecuta la consulta para obtener los datos de la BD.
$resultado=mysql_query("SELECT * FROM mensajes");
// Se inicia el formulario
echo "<form action=\"procesar.php\" method=\"post\"> \n";
// Extrae y compone los checboxs dinámicos de los datos de latabla mensajes.
while ($row = mysql_fetch_array($resultado)){
echo "<input type=\"checkbox\" name=\"seleccion[]\" value=\"".$row['msgid']."\">".$row['para']."<br>";
}

// Cierra y envía el formulario.
echo "<input type=\"submit\" name=\"Submit\" value=\"Enviar\">";
echo "</form>";
?>


procesar.php

<?
include("configuracion.php");//conecta a la BD
// Genera una lista de los ID's (campo value= ..)
$lista=implode(',',$_POST['seleccion']);
//Borra lo seleccionado de la BD
$sSQL= ("DELETE FROM mensajes WHERE id IN(".$lista.")");
mysql_db_query("registrados",$sSQL);
print "Mensaje borrado";
?>

__________________________________________________ __

Como digo, formulario.php genera los checbox bien y procesar.php los recoge
(he hecho print "$lista"; para saber si se generaba la $lista y no hay problema).

Creo que el problema está en la instrucción de borrar
$sSQL= ("DELETE FROM mensajes WHERE id IN(".$lista.")");
mysql_db_query("registrados",$sSQL);

Pero no sé dónde o cual debería poner para que borrara.

¿Podéis ayudarme?

Gracias a todos por anticipado.

Última edición por javifo; 21/10/2004 a las 12:18
  #2 (permalink)  
Antiguo 21/10/2004, 12:55
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 20 años, 6 meses
Puntos: 0
Ya está arreglado.
Gracias
  #3 (permalink)  
Antiguo 21/10/2004, 22:46
 
Fecha de Ingreso: noviembre-2003
Ubicación: Puente de ixtla
Mensajes: 773
Antigüedad: 21 años
Puntos: 0
oye me lo podrias pasar me esque quiero utilizar tu ejemplo para una cosa que yo quiero hacer
__________________
°º¤ø,¸¸,ø¤º°`°º¤ø,¸S@M°º¤ø,¸¸,ø¤º°`°º¤ø,¸.
Dios solo nos dio el 0 y el 1 y con solo eso hemos construido un universo
  #4 (permalink)  
Antiguo 22/10/2004, 05:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por Ixtleco
oye me lo podrias pasar me esque quiero utilizar tu ejemplo para una cosa que yo quiero hacer
Tienes un ejemplo completo en esta FAQ:

http://www.forosdelweb.com/f18/faqs-php-530600-post664999/

Un saludo,
  #5 (permalink)  
Antiguo 22/10/2004, 06:05
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 20 años, 6 meses
Puntos: 0
Para Cluster y para Ixtleco

Hola:

Para Ixtleco

El script corregido es este (sólo iba mal porque WHERE id debía ser WHERE msgid

procesar.php

<?
include("configuracion.php");//conecta a la BD
// Genera una lista de los ID's (campo value= ..)
$lista=implode(',',$_POST['seleccion']);
//Borra lo seleccionado de la BD
$sSQL= ("DELETE FROM mensajes WHERE msgid IN(".$lista.")");
mysql_db_query("registrados",$sSQL);
print "Mensaje borrado";
?>

PARA CLUSTER:

El sistema va bien, pero da el error:

Warning: implode(): Bad arguments. in c:\archivos de programa\apache group\apache\htdocs\esla\mensajesuser\procesar.php on line 5

Este error SOLO lo da cuando se intenta borrar él último mensaje que queda en la BD. Es decir, si en la BD hay más de un mensaje, va bien. Pero si sólo hay uno, da este error.

Quizá sea que $lista no se genera si no hay más de un elemento en el array.

¿Qué opinas? ¿Crees que hay alguna solución?

Gracias
Mensaje borrado

Última edición por javifo; 22/10/2004 a las 06:06
  #6 (permalink)  
Antiguo 22/10/2004, 06:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Si, .. hay solución ..

Se trata de comprobar si la variable que contiene las opciones seleccionadas (los checkbox marcados) es un array para aplicar el implode() o no ..

Código PHP:
if (is_array($_POST['seleccion'])){
$lista=implode(',',$_POST['seleccion']);
} else{
$lista=$_POST['seleccion'];

Y luego aplicar $lista a la sentencia SQL IN(...)

..... IN (".$lista.")....

Un saludo,

Última edición por Cluster; 22/10/2004 a las 06:15
  #7 (permalink)  
Antiguo 22/10/2004, 07:31
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 20 años, 6 meses
Puntos: 0
Gracias.

He ido probando, per no acabo de entenderlo.

Con el script original:

Cuando sólo hay un mensaje, no pasa un array.(esto lo entiendo)

Cuando se selecciona el primer mensaje de la lista (último recibido), aunque se seleccione con otros, no lo incluye en el array y no lo borra (los otros si).(no entiendo por qué no incluye el primer mensaje en el array)

O sea, nunca borra el último mensaje recibido ni se puede vaciar la carpeta.

Intentaré buscar alguna solución, pero si puedes ayudarme.... GRACIAS
  #8 (permalink)  
Antiguo 22/10/2004, 07:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
mm Pues no sé por qué sucede .. He usado ese mismo código en proyectos y no he tenido más problema que el hecho de que al seleccionar un sólo elemento (checkbox) no pasa como array sino como $variable.

Un saludo,
  #9 (permalink)  
Antiguo 22/10/2004, 12:13
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 195
Antigüedad: 20 años, 1 mes
Puntos: 7
¿No puede haber alguna incomptabilidad poniendo un solo elemento en IN(...)? Quizás podrías poner en el caso de un solo elemento la sintaxis campo = valor para probar que no sea eso.
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 21:36.