Foros del Web » Programando para Internet » PHP »

[¿Podéis aconsejarme?]

Estas en el tema de [¿Podéis aconsejarme?] en el foro de PHP en Foros del Web. Wenas. Mi problema es le siguiente: He conseguido recorrer directorios (locales y remotos) y listar sus archivos , así como sus respectivos tamaños. Cada archivo ...
  #1 (permalink)  
Antiguo 06/12/2004, 10:15
Avatar de redlor  
Fecha de Ingreso: noviembre-2004
Ubicación: Sevilla
Mensajes: 42
Antigüedad: 19 años, 5 meses
Puntos: 0
Pregunta [¿Podéis aconsejarme?]

Wenas. Mi problema es le siguiente: He conseguido recorrer directorios (locales y remotos) y listar sus archivos, así como sus respectivos tamaños.

Cada archivo lleva sociado un campo imput checkbox que permite seleccionarlo
(<input type="checkbox" name="Archivos[]"...>). Este array lo envío a una página que se encargará de meter su contenido, ed, las rutas de los distintos archivos selccionados en una tabla de la BD. Ahora bien, me gustaría poder enviar junto a los archivos su tamaño. Digo enviar porq ya q lo tengo en la página origen sería redundante volver a calcularlo en la página destino no?

Esa es mi pregunta: ¿Cómo hacer para envíar un array (por ejemplo en un input oculto) con sólo los tamaños de los archivos seleccioandos por el usuario??

Gracias

Última edición por redlor; 06/12/2004 a las 10:19
  #2 (permalink)  
Antiguo 06/12/2004, 10:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Puedes hacerlo de várias formas ..

1) usando un array extra que del mismto tipo a tu archivos[] paralelo en un campo hidden.

Código PHP:
<input type="hidden" name="un_array[]" value="<? echo $valor_para_array1 ?>">
<input type="hidden" name="otro_array[]" value="<? echo $valor_para_array2 ?>">
<input type="hidden" name="otromas_array[]" value="<? echo $valor_para_array3 ?>">
Y en tu script PHP lo recibies ...
Código PHP:
for ($i=0$i<count($_POST['un_array']); $i++){
    echo 
$_POST['un_array'][$i]."<br>";
    echo 
$_POST['otro_array'][$i]."<br>";
    echo 
$_POST['otromas_array'][$i]."<br><br>";

Como veras .. se cuenta el total de elementos de un sólo array .. pues son "paralelos" (igual n° de elementos) .. se usa el bucle for por aportar el "indice" para cada uno de esos elementos en paralelo para los N elementos de sus respectivos arrays.

2) usando un array aosciativo tipo:
Código PHP:
<input type="checkbox" name="Archivos[<? echo $nombre_archivo ?>]" value="<? echo $tamano_archivo ?>">
En PHP recibiras un array asociativo que puedes recorrere con un bucle tipo:

Código PHP:
foreach ($_POST['Archivos'] as $archivo => $tamano){
   echo 
"archivo: ".$archivo." => ".$tamano."<br>";

Si necesitas más de 2 datos asociados .. te vendría bien la opción 1 sobre el uso de arrays "paralelos" (de igual numero de indices) para recorrerlos con bucles for() en tu script PHP.


Un saludo,
  #3 (permalink)  
Antiguo 06/12/2004, 10:52
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Pues

Primeramente cuentas la cantidad de elementos que posee tu array y luego realizas un ciclo for o while y vas entrando a la BDatos o a no se que los valores de las variables $_FILES[][]. Por ejemplo:
Código PHP:
 $array = array(); //Supongamos que el arreglo contiene 15 ficheros
 
$count array_count($array);
 for(
$i=0;$i<=$count;$count++){
  
$tamano $_FILES['campo']['size'];
  
// Luego los insertas a tu BDatos
 

Salu2
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 06/12/2004, 10:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Reynier .. el compañero ya obtiene por otro médio los tamaños de los archivos .. no los sube por HTTP sino que lee la estructura de directorios de sus servidor para obtener esos nombres de archivos y datos asociados.

Un saludo,
  #5 (permalink)  
Antiguo 06/12/2004, 11:04
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Disculpa Cluster

Cluster disculpa pero es que ambos estabamos respondiendo el mismo mensaje y parece que tu lo publicaste antes que yo. Lo vi luego que envie el mio.

Salu2
__________________
Ing. Reynier Pérez Mira
  #6 (permalink)  
Antiguo 06/12/2004, 11:24
Avatar de redlor  
Fecha de Ingreso: noviembre-2004
Ubicación: Sevilla
Mensajes: 42
Antigüedad: 19 años, 5 meses
Puntos: 0
No lo consigo...

Muchas gracias a los dos.

Cluster he estudiado tu solucion y hay algo de lo q no he conseguido enterarme. Disculpa si no te he entendido bien pero ya estoy algo embotado con el tema.

Con la solución 1 no conseguría enviar el valor de sólo los archivos seleccionados por el usuario (<input....checked>).

Si opto por la solución 2, en los checkbox envío el tamaño pero qué pasa con el nombre del archivo?

Me parece que en ningún caso tendría la relación archivo seleccionado-tamaño.

Te estoy malinterpretando?

Gracias de nuevo, seguiré investigando hasta donde me deje mi paciencia
  #7 (permalink)  
Antiguo 06/12/2004, 11:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Será mejor que pruebes los ejemplos .. La relación está en todos los casos .. ya sea como el caso 1 en arrays "paralelos" .. o en el caso 2 en un array asociativo donde el nombre del indice es tu nombre de tu archivo .. y su valor es el tamaño (u otro dato) de tu archivo.

para el primer caso tendrías arrays tipo:

nombre_archivo[0]="blabla.txt";
tamano[0]="97898";

nombre_archivo[1]="blabla2.txt";
tamano[1]="978983434";


Para el segundo caso te quedarían arrays tipo:

Archivo['nombre_archivo1']="979";
Archivo['nombre_archivo2']="97923";
Archivo['nombre_archivo3']="923";

Un saludo,
  #8 (permalink)  
Antiguo 06/12/2004, 12:14
Avatar de redlor  
Fecha de Ingreso: noviembre-2004
Ubicación: Sevilla
Mensajes: 42
Antigüedad: 19 años, 5 meses
Puntos: 0
:( siento mi torpeza!

Ok, pero qué hay de lo otro?? No consigo quedarme con sólo los selccionados por el usuario en los checkbox. Al envíar el array ya no guardaría la relación de índices para después referenciar al array de tamaños.

Mira te paso el código a ver si le puedes echar un vistazo:


foreach ($archivos as $archivo){
...
<input type='checkbox' value='".$archivo[0]."' id='Archivos[]' name='Archivos[]'/>
....
}
con ésto el usuario sleccionaría mediante el checkbox sólo los archivos deseados ($archivo[0] contiene el nombre del archivo), que serían los que se recogerían en la página destino. El tamaño lo tego almacenado en $archivo[1].

A la hora de recibir el resultado de la selección del checkboz en la página destino, con $_POST['Archivos'] recupero los nombres. Si envío otro array con los tamaños no veo la forma de incluir sólo los tamaños de los selccionados.



Disculpa mi pesadez, pero como te digo lo he probado de varias formas y no lo consigo

Última edición por redlor; 06/12/2004 a las 12:16
  #9 (permalink)  
Antiguo 06/12/2004, 13:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Voy a centrarme en la solución aplicando el segundo ejemplo (arrays asociativos):

Código PHP:
foreach ($archivos as $archivo){
...
<
input type='checkbox' value='".$archivo[1]."' id='Archivos[]' name='Archivos[".$archivo[0]."]'/>
....

Fijate que te comente que para ese caso .. en tu array archivo .. el Indice de esta es tu nombre del archivo y su valor será el dato del tamaño del archivo.

En el script PHP lo lees con el bucle foreach() como te puse en el ejemplo:

Código PHP:
foreach ($_POST['Archivos'] as $archivo => $tamano){ 
   echo 
"archivo: ".$archivo." => ".$tamano."<br>"

En ese "Archivos" array .. sólo tendrás los archivos (y su tamaño) que selecciones en tus checkbox . los que no seleccionas NO pasan a tu script PHP.

Un saludo,

Última edición por Cluster; 06/12/2004 a las 13:15
  #10 (permalink)  
Antiguo 06/12/2004, 14:50
Avatar de redlor  
Fecha de Ingreso: noviembre-2004
Ubicación: Sevilla
Mensajes: 42
Antigüedad: 19 años, 5 meses
Puntos: 0
Ok, Cluster

Muchas gracias Cluster, simplemente me chocaba el hecho de que enviaras el tamaño del archivo en el value del input, en lugar del nombre. Me había hecho un lío con la notación.

Lo voy aprobar a ver cómo va. Espero poder mostraros mi aplicación FTp en unos días.
Chao

Última edición por redlor; 06/12/2004 a las 14:51
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 01:33.