Foros del Web » Programando para Internet » PHP »

Borrar checkbox

Estas en el tema de Borrar checkbox en el foro de PHP en Foros del Web. Hola, tengo un listado de archivos y al lado de cada archivo un checkbox, estoy intentando hacer que cuando el usuario elija los checkboxes que ...
  #1 (permalink)  
Antiguo 28/06/2006, 05:02
 
Fecha de Ingreso: marzo-2006
Mensajes: 31
Antigüedad: 11 años, 9 meses
Puntos: 0
Borrar checkbox

Hola, tengo un listado de archivos y al lado de cada archivo un checkbox, estoy intentando hacer que cuando el usuario elija los checkboxes que quiera y pulse un botón llmado "Borrar", se borren los archivos seleccionados de la carpeta reservada para él y de la entrada de ese archivo en la base de datos, además de que se recargue la página de forma que los archivos que han eliminado ya no salgan en el listado.

Lo de como hay que borrarlos del disco duro y de la base de datos, ya me hago una idea, lo que no se es como puedo recoger los valores de los checkboxes y luego poder hacer las operaciones de borrado, todo en el mismo documento.


El código que hasta ahora tengo es el siguiente:

Código PHP:
<?php
session_start
();
require_once(
'db_fns.php');

require_once(
'bookmark_fns.php');

do_html_header('Borrar archivos');

check_valid_user();

display_user_menu();
do_html_footer();


  
$conn db_connect();
  
$result $conn->query"select name, size
                          from file
                          where usernm = '$_SESSION[valid_user]'"
);
  if (!
$result)
    print 
"Error"
    
   
$_SESSION['resultado']=$result;


  
$nombre_archivo = array();
  
$tamanio_archivo = array();
  
  
  for (
$count 0$row $result->fetch_row(); ++$count
  {
    
$nombre_archivo[$count] = $row[0];
    
//las siguientes dos líneas sirven para redondear con solo dos decimales
    
$aux=$row[1]/1024;
    
$tamanio_archivo[$count] = round($aux 100) / 100;
  }  
  
  print(
$count);
  
$_SESSION['cuenta'] = $count;
  

  print(
"<table width='325'  border=1 cellspacing=5 cellpadding=10>");
  for (
$i=0$i $count$i++)
  {
  
  
    print(
"<tr>");
        print(
"<td align='right'>");
        
      print (
$tamanio_archivo[$i]." kB");
          print(
"</td>");
 
      
      print(
"<td>");
      echo 
"$nombre_archivo[$i]";
      
       echo 
"<td><input type='checkbox' name=\"del_me[]\"
             value=\"$url\"></td>"
;
      
      print(
"</td>");
      print(
"</tr>");

  }
  
  print(
"<tr><td colspan=3  align='center'><input type='submit' value='Borrar       archivos'></td></tr>");

  
  print(
"</table>");

?>

Última edición por Cluster; 28/06/2006 a las 07:59
  #2 (permalink)  
Antiguo 28/06/2006, 08:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Como generas tus checkbox com un "array":

Código PHP:
echo "<td><input type='checkbox' name=\"del_me[]\" 
             value=\"$url\"></td>"

(del_me[])

Obtendras un array con esos valores en .. en ... no veo la definición del <form action .. method ....> ni su </form>. Si no lo tienes .. eso te falta para empezar.

Una vez que lo definas .. en $_POST['del_men'] tendrás un array para recorrer con un bucle .. por ejemplo foreach().

Tienes una FAQ al respecto en:
http://www.forosdelweb.com/showthrea...710#post518710


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 28/06/2006, 09:11
 
Fecha de Ingreso: marzo-2006
Mensajes: 31
Antigüedad: 11 años, 9 meses
Puntos: 0
Gracias, ahora ya con este código si funciona:

Código PHP:

<?php
session_start
();
require_once(
'db_fns.php');

require_once(
'bookmark_fns.php');

do_html_header('Borrar archivos');

check_valid_user();

display_user_menu();
do_html_footer();


  
$conn db_connect();
  
$result $conn->query"select name, size
                          from file
                          where usernm = '$_SESSION[valid_user]'"
);
  if (!
$result)
    print 
"Error"
    
   
$_SESSION['resultado']=$result;

  
$nombre_archivo = array();
  
$tamanio_archivo = array();
  
  
  for (
$count 0$row $result->fetch_row(); ++$count
  {
    
$nombre_archivo[$count] = $row[0];
    
//las siguientes dos líneas sirven para redondear con solo dos decimales
    
$aux=$row[1]/1024;
    
$tamanio_archivo[$count] = round($aux 100) / 100;
  }  
  

  print(
"<form acition='delete_files.php' method='post'>");


  print(
"<table width='325'  border=1 cellspacing=5 cellpadding=10>");
  for (
$i=0$i $count$i++)
  {
  
  
    print(
"<tr>");
        print(
"<td align='right'>");
        
      print (
$tamanio_archivo[$i]." kB");
          print(
"</td>");

      print(
"<td>");
      echo 
"$nombre_archivo[$i]";
  
      echo 
"<td><input type='checkbox' name='del_me[]' value=$nombre_archivo[$i]>";
      
      print(
"</td>");
      print(
"</tr>");

  }
  
print(
"<tr><td colspan=3  align='center'><input type='submit' name='Submit' value='Borrar archivos'></td></tr>");

print(
"</table>");

print(
"</form>");  

foreach (
$_POST['del_me'] as $nombre)
{
echo 
$nombre."<br>";
}

?>
Todavía no he hecho que se borren, pero ya he visto que se muestran por pantalla, lo único que como he puesto el "foreach" dentro del mismo documento, cuando lo cargo me sale un:


Warning: Invalid argument supplied for foreach()

que supongo será porque el no tiene valores que recorrer. Quisiera saber si hay alguna forma de poder mantener el foreach dentro de este documento sin tener que sacarlo a otro script y evitando que me salga ese warning.
  #4 (permalink)  
Antiguo 28/06/2006, 09:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Todavía no he hecho que se borren, pero ya he visto que se muestran por pantalla, lo único que como he puesto el "foreach" dentro del mismo documento, cuando lo cargo me sale un: ....
Es normal que te suceda . .por qué en la primera "carga" .. todavía tu formulario NO ha enviado los datos en $_POST .. por eso foreach() no tiene nada que recorrer (de tipo array) ...

Deberías validar que estás en el proceso de envio de los datos .. Por ejemplo por la existencia de la variable "submit" de tu formulario y no sería malo también verificar que "del_me" variable sea un array ...

Código PHP:
if (isset($_POST['submit'] && is_array($_POST['del_me'])){
  foreach (
$_POST['del_me'] as $nombre
   { 
    echo 
$nombre."<br>"
   } 


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 29/06/2006, 05:13
 
Fecha de Ingreso: marzo-2006
Mensajes: 31
Antigüedad: 11 años, 9 meses
Puntos: 0
Hola, el caso es que poniendo esto:
Código PHP:

if (isset($_POST['submit']) && is_array($_POST['del_me']))
{
    foreach (
$_POST['del_me'] as $nombre)
    {
    echo 
$nombre."<br>";
    }

no me da ningún error, pero aunque seleccione algún checkbox y le de al botón, no me imprime por pantalla el nombre que había seleccionado.

Saludos.
  #6 (permalink)  
Antiguo 29/06/2006, 07:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok .. el nombre de tu "submit" variable es Submit (con mayusculas) ..podría ser ese el problema.

Por otro lado .. para las primeras pruebas puedes quitar la verificación del is_array() .. (aunque me parece que es el otro el problema).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 29/06/2006, 09:25
 
Fecha de Ingreso: marzo-2006
Mensajes: 31
Antigüedad: 11 años, 9 meses
Puntos: 0
Muchas gracias, eso ya me funciona. Ahora he puesto para que me borre los archivos, con el siguiente código:

Código PHP:
if (isset($_POST['Submit']) && is_array($_POST['del_me']))
{
    foreach (
$_POST['del_me'] as $nombre)
    {
    echo 
$nombre."<br>";
     
$borr $conn->query"delete 
                          from file
                          where usernm = '$_SESSION[valid_user]' and name='$nombre'"
);
         
         echo 
$borr;
         
        
$sab=unlink("/opt/lampp/htdocs/copia_libro/$_SESSION[valid_user]"."/".$nombre);                                         
         
         echo 
$sab;                 
    }

El caso es que si me borra los archivo con un nombre normal. Pero los archivos que en el nombre tienen espacios en blanco no me los borra ni del directorio, ni de la base de datos. No se si hay alguna forma de hacer que los reconozca o tendré que sustituirlos.

Gracias.
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 05:39.