Foros del Web » Programando para Internet » PHP »

eliminar uno o varios archivos desde 1 carpeta

Estas en el tema de eliminar uno o varios archivos desde 1 carpeta en el foro de PHP en Foros del Web. Amigos: Estoy intentando realizar lo siguiente. En mi aplicación he colocado una serie de checkbox para permitir al usuario eliminar el archivo que desee, pero ...
  #1 (permalink)  
Antiguo 24/11/2005, 19:45
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
eliminar uno o varios archivos desde 1 carpeta

Amigos:

Estoy intentando realizar lo siguiente.

En mi aplicación he colocado una serie de checkbox para permitir al usuario eliminar el archivo que desee, pero a la vez también debo eliminar el archivo que existe en la carpeta del cliente.

Como ven son 2 delete,uno a la base de datos y el otro con unlink hacia la carpeta donde se encuentra el archivo especificado.

ya logre eliminar el o los archivo de la base de datos, pero ahora, ¿como se podría hacer para eliminar el archivo en especifico si el usuario quiere eliminar uno por uno o todos de una vez ?¿quizas un array?

Quizas se podría usar la misma función con la que se trabaja la check box porque tengo la ruta guardado en la base de datos por ejem

../../Carpeta_cliente/pedro722/
espero haber si claro...Salu2
  #2 (permalink)  
Antiguo 25/11/2005, 05:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Acuerdate .. Siempre que hables de algo que ya has hecho y de algo que te falte .. mejor indica el código que usas, por qué será mas sencillo darte respuetas certeras tipo "añade ese código en tal parte" ..

Pero .. en principio se trata de que tu Obtengas ese dato que tiene en tu BD .. eso implica una consulta SQL "SELECT ... WHERE id='$id'" (el mismo que usas para hacer tu DELTE ... WHERE id='$id' ..) obtengas el dato de la ruta y apliques unlink() a lo que obtienes ...

Un saludo,
  #3 (permalink)  
Antiguo 25/11/2005, 08:32
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
Lo tendré en cuenta Cluster, pero bueno luego de un par de intentos ahora si que estoy todavía no logro sacarlo, de verdad pense que sería más facil, como les decia.

la sección que trae los check que esta más abajo y que la encontre en el mismo foro funciona perfectamente ...

Ahora la lógica que ocupo es. traigo mi ruta y el nombre del archivo desde un index.php que me despliega los datos y es en donde he colocado los checkbox para hacer la eliminación de cada dato.

Con esos datos (ruta + nombre archivo) debería vastar para el unlink, pero veo que no es así haber si me dan un aventón para encaminar el cuento

Les muestro el codigo
delete.php
Código PHP:
<? 
require("../check/config.inc.php");

$db_conexionmysql_connect("$sql_host""$sql_user""$sql_pass") or die(mysql_error());
mysql_select_db("$sql_db");

//traer la ruta
$ruta=$_GET['urldir'];

//traer los nombres de los archivos
foreach ($_POST['nick'] as $name){ 
   echo 
$id.$ruta.$name."<br>"



//Sección trae los checkbox -- Inicio.....
if(!empty($_POST['check'])) { 
$lista=implode(',',$_POST['check']); 

$ver=mysql_query("DELETE FROM tbarchivo WHERE idfile IN(".$lista.")"); 

}
// Fin trae Id de archivos.......

?>
y de esta manera llevo los datos hacia el delete.php
Index.php
Código HTML:
<form name="form2" method="post" action="../BORRA/delete.php?urldir=<?PHP echo $ruta; ?>">
<input type="hidden" name="nick[]" value="<?=$resultados[nombre_file]?>">
<input type="checkbox" name="check[]" value="<?=$resultados[idfile]?>" > 
como ven paso la ruta, nombre archivo e Id para eliminar en la bd ...
  #4 (permalink)  
Antiguo 25/11/2005, 08:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El problema que tienes es que sólo "check[]" contendrá los "Indices" (o generará) de los checkbox que selecciones ..por eso no "cuadan" con los campos hidden (nick[]), sobre todo cuando "salteas" los items que seleccionas (no seleccionando todos) (o eso creo que sucede).

Código PHP:
for ($x=0$x <= count($_POST['check']); $x++){
 echo 
$id.$ruta.$_POST['nick'][$x]."<br>"

Revisa si obtienes las rutas que corresponden.

Teóricamente .. recorro el array "check" y accedo a los indices "paralelos" del otro (u otros) arrayas asociados ...

Un saludo,

Última edición por Cluster; 25/11/2005 a las 12:23
  #5 (permalink)  
Antiguo 25/11/2005, 08:52
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
Eso mismo array estan salteados probando la solución....

justo en la linea del for me aparece este error: Parse error: syntax error, unexpected '<' corregi un parentesis que se habia escapado pero sigue fallando

Última edición por under_ground; 25/11/2005 a las 09:04
  #6 (permalink)  
Antiguo 25/11/2005, 09:35
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
He probado colocando variables al $_POST pero todavia sigue
Cita:
justo en la linea del for me aparece este error: Parse error: syntax error, unexpected '<' corregi un parentesis que se habia escapado pero sigue fallando
  #7 (permalink)  
Antiguo 25/11/2005, 10:47
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
Okey era esto =>habia que colocarlo <= se habia ido...

lo probe pero no me muestra nada... como ven coloque un hecho hola pero tampoco lo muestra ¿que será?

Código PHP:
//traer la ruta
$ruta=$_GET['urldir'];

for(
$x=0$_POST['check'] <= count($_POST['check']);$x++){ 
echo 
"hola";
//echo $id.$ruta.$_POST['nick'][$x]."<br>"; 

  #8 (permalink)  
Antiguo 25/11/2005, 12:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
for ($x=0; $_POST['check'] =< count($_POST['check']; $x++){

Me equivoqué por completo .. (o se me duplicó no sé que pasó).

Sería:
Código PHP:
for ($x=0$x <= count($_POST['check']) ; $x++){ 
Un saludo,
  #9 (permalink)  
Antiguo 25/11/2005, 14:01
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
Okey ahora si esta trayendo la ruta junto con los nombres correspondientes.

ahora el tema es ¿cómo hacer para que borre realmente los archivos de los check seleccionados? porque el for solo esta contando cuantos chek fueron seleccionados pero no cuales...

Porque acabo de hacer una prueba y borra algunos archivos y deja otros sin borrar un caos

se tendría que hacer algun if donde se tome el seleccionado y compare con otro valor, variable, y si son ciertas que borre de lo contrio avanzar
  #10 (permalink)  
Antiguo 25/11/2005, 14:26
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
Cita:
Iniciado por Cluster
Pero .. en principio se trata de que tu Obtengas ese dato que tiene en tu BD .. eso implica una consulta SQL "SELECT ... WHERE id='$id'" (el mismo que usas para hacer tu DELTE ... WHERE id='$id' ..) obtengas el dato de la ruta y apliques unlink() a lo que obtienes ...
Creo que estoy pasando esto por alto, probando...
  #11 (permalink)  
Antiguo 25/11/2005, 15:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ese comentario lo hize cuando no había visto como trabajabas el tema. En tu caso desde el formulario le pasas los datos que necesitas: "id" y la "ruta" del archivo a borrar.

Pero .. como la información de esa "ruta" depende o está relacionada con ese "ID" .. podrías pasar sólo ese ID como información desde el formulario (donde se selecciona X de esos registros) hacia tu script de proceso y ahí "volver" a consultar a tu BD por esos ID's y obtener otro dato relacionado como es tu URL .. Son dos formas diferentes de resolver el problema. A veces no te interesará que esa "ruta" viaje al "cliente" y lo vea (si edita el código fuente de tu página HTML generada) .. en otras ocasiones ese dato no será tan relevante ..

Un saludo,
  #12 (permalink)  
Antiguo 25/11/2005, 17:34
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
Okey Uff.. cada vez más cerca cada vez más cerca, falta poco falta poco, vamos viendo, quite el campo hidden que llevaba los nombres y solo llevo los ID de las check box, si es que sirve de algo algo asi es el esquema donde muestro los datos y las checbox.

Nº | nombre | tipo | fecha | peso | Eliminar
1 |donante.jpg | image/pjpeg |2005-11-25 |227680KB |checkbox
2 |chatarra.JPG| image/pjpeg |2005-11-25 |339487KB |checkbox

Por otro lado en mi script que recepciona los datos, he agregado un par de query´s para traer los id y los nombre de archivos, de la base de datos y hacer la comparación con los que vienen V/S los que estan en la BD, si son correctos entonces dentro del for he colocado un if


Código PHP:
$run=$_SESSION['rut'];
/***Primero traigo el id_user y path de tbusuario donde el path es la ruta
hacia el archivo e id_user me sirve para compararlo 
con el otro select de abajo***/
$strsql=mysql_query("SELECT id_user,path FROM tbusuario where rut='$run'")or die(mysql_error());
$resultado=mysql_fetch_assoc($strsql);
$take=$resultado[id_user];
mysql_free_result($strsql);

$sql=mysql_query("SELECT idfile,nombre_file FROM tbarchivo where tbusuario_id_user='$take'")or die(mysql_error());
$result=mysql_fetch_assoc($sql);
mysql_free_result($sql);

//Ontener la ruta
$ruta=$result[path];

for (
$x=0$x <= count($_POST['check']) ; $x++){ 
//echo $_POST['check'][$x]."<br>"; 
    
if($_POST['check'][$x] == $result[idfile])
    {
        
$total=$ruta.$result[nombre_file];
        echo 
$total;
        
//unlink($total);
    
}

Así como está, esta ocurriendo 1 error

cuando selecciono el último registro, por ejemplo chatarra.jpg hace todo perfecto, borra chatarra.jpg de la carpeta y de la BD y si continuo en forma ordena borrando hacia arriba tambien lo hace bien, pero cuando eligo que se borren todos solo me borra el ultimo archivo de la carpeta y el resto no
  #13 (permalink)  
Antiguo 25/11/2005, 19:40
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
ahora e usado un while, tiene la lógica...pero sigue eliminandome el primero que ingreso

Código PHP:
$x=0;
$viene=count($_POST['check']);
//echo $viene;
while($x <$viene){

    if(
$_POST['check'][$x] == $result[idfile])
    {
        
$total=$ruta.$result[nombre_file];
        
//echo $total;
        
unlink($total);
    }

$x++;


  #14 (permalink)  
Antiguo 26/11/2005, 08:05
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años
Puntos: 1
bueno sigue existiendo el problema por lo que puede deducir ayer es que este IF

Código PHP:
if($_POST['check'][$x] == $result[idfile]) 
El $_POST['check'][$x] esta funcionanado okey mi , duda es con resut[idfile] ya que viene de una consulta SQL y debe trae un array con los resultados, de hecho lo traigo de esa manera

Código PHP:
$sql=mysql_query("SELECT idfile,nombre_file FROM tbarchivo where tbusuario_id_user='$take'")or die(mysql_error()); 
$result=mysql_fetch_array($sql); 
mysql_free_result($sql); 
y veo que no esta comparados todos con todos sino con el último que trajo, quizas probar con algun mysql_num_rows por que reviso el while y tiene sentido
  #15 (permalink)  
Antiguo 27/11/2005, 19:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La propuesta que te hago sobre en base al ID obtener el nombre del archivo a borrar bajo los "ID's" que vienen de tu formulario bajo los checkbox seleccionados se trataría de hacer una consulta SQL a cada "ID" que recorres con el bucle for() que los lee para obtener y aplicar tu unlink() al nombre de archivo + ruta obtendio:

Código PHP:
for ($x=0$x <= count($_POST['check']) ; $x++){ 

$resultado=mysql_query("SELECT nombre_file FROM tbarchivo where idfile='".$_POST[$x]."'")or die(mysql_error()); 
$archivo=mysql_result($resultado,0,"nombre_file"); 
echo 
"Archivo a borrar: ".$ruta.$archivo;
// unlink ($ruta.$archivo);



Supongo que $ruta tendrá algo tipo /nose/ (con el / al final?)....

Eso sería una forma .. también podrías obtener los "nombres_file" aplicando una sentencia SQL tipo: SELECT nombre_file FROM tbarchivo WHERE idfile IN ($lista) (tal cual el "DELETE" que hacias antes). Eso te arrojará un "record-set" que debes recorrer aplicando mysql_fecht_array() o equivalente bajo un while($row=mysql_fetch_arra()) ..

Un saludo,
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:46.