Foros del Web » Programando para Internet » PHP »

asignar identificador a multiples campos tipo file

Estas en el tema de asignar identificador a multiples campos tipo file en el foro de PHP en Foros del Web. Hola Tengo un formulario algo extenso, donde dentro del cual, hay un pequeño sub-apartado donde pueden insertar varias lineas @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original ...
  #1 (permalink)  
Antiguo 28/06/2012, 03:38
 
Fecha de Ingreso: septiembre-2010
Ubicación: /home/
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 17
asignar identificador a multiples campos tipo file

Hola

Tengo un formulario algo extenso, donde dentro del cual, hay un pequeño sub-apartado donde pueden insertar varias lineas

Código HTML:
Ver original
  1.                     <legend><strong>Medidas Correctoras</strong></legend>                  
  2.                     <table width="100%" border="0">
  3.                         <thead>
  4.                         <tr>
  5.                             <td>Descripci&oacute;n</td>
  6.                             <td colspan="3"><input type="text" id="descripcio_mesura_correctora" name="descripcio_mesura_correctora" size="80"/></td>
  7.                             <td rowspan="3"><input type="button" onclick="javascript:nova_mesura_correctora();" value=" A&ntilde;adir Medida Correctora"/></td>
  8.                         </tr>
  9.                         <tr>
  10.                             <td>Responsable</td>
  11.                             <td>
  12.                                 <select id="responsable_mesura_correctora" name="responsable_mesura_correctora" class="select_control">
  13.                                     <option value="0">Responsables</option>
  14.                                     <?php
  15.                                    $wresponsables    = " WHERE situacio=0";
  16.                                    $sql_responsables = $objResponsables->mostrar_responsables_w($wresponsables);
  17.                                     if(mysql_num_rows($sql_responsables)!=0){
  18.                                         while($rs_responsables = mysql_fetch_array($sql_responsables)){
  19.                                             ?>
  20.                                             <option value="<?php echo $rs_responsables['id_responsable'];?>"><?php echo $rs_responsables['nom'];?></option>
  21.                                             <?php
  22.                                        }// -- $rs_origen = mysql_fetch_array($sql_origen)){
  23.                                    }// -- if(mysql_num_rows($sql_origen)!=0){  
  24.                                    ?>
  25.                                 </select>
  26.                             </td>
  27.                             <td align="right">Fecha Aplicaci&oacute;n</td>                        
  28.                             <td align="left"><input type="text" id="data_mesura_correctora" name="data_mesura_correctora" value="" size="10" readonly="readonly"/></td>
  29.                         </tr>
  30.                         </thead>                        
  31.                     </table>
  32.                     <table id="mesura_correctora" width="100%" border="0">
  33.                         <thead>
  34.                         <tr>
  35.                             <td class="cap_taula_resultat" valign="top" align="center">Descripci&oacute;n</td>                            
  36.                             <td class="cap_taula_resultat" valign="top" align="center">Responsable</td>                            
  37.                             <td class="cap_taula_resultat" valign="top" align="center">Fecha Aplicaci&oacute;n</td>
  38.                             <td class="cap_taula_resultat" valign="top" align="center">Archivos/Imagenes&nbsp;</td>  
  39.                         </tr>
  40.                         </thead>  
  41.                         <tbody></tbody>
  42.                     </table>                    
  43.                 </fieldset>

y a mesura que las insertan uso el siguiente código (jquery) para mostrarlo sin refrescar la página

Código Javascript:
Ver original
  1. function nova_mesura_correctora(){
  2.         var valit = true;
  3.         if($("#descripcio_mesura_correctora").val() == ''){
  4.             alert('La descripcion de la Mesura Correctora es un campo obligatorio');
  5.             valit=false;
  6.         }
  7.         if(valit==true){
  8.             if($("#responsable_mesura_correctora").val() == 0){
  9.                 alert('El Responsable de la Mesura Correctora es un campo obligatorio');
  10.                 valit=false;
  11.             }
  12.         }
  13.         if(valit==true){        
  14.             if($("#data_mesura_correctora").val() == ''){
  15.                 alert('La Fecha de la Mesura Correctora es un campo obligatorio');
  16.                 valit=false;
  17.             }
  18.         }        
  19.         if(valit==true){
  20.             $.post("controls/afegir_mesura.php", {tipus: 'correctora', id_rel_control: $('#id_rel_control').attr('value'), descripcio_mesura_correctora: $("#descripcio_mesura_correctora").val(), responsable_mesura_correctora: $("#responsable_mesura_correctora").val(),data_mesura_correctora: $("#data_mesura_correctora").val()},
  21.             function(id_mesura_correctora){
  22.                 if(!isNaN(id_mesura_correctora)){
  23.                     var cadena;
  24.                     cadena = "<tr id=fila_mesura_correctora_"+id_mesura_correctora+">";        
  25.                     cadena = cadena + "<td>" + $("#descripcio_mesura_correctora").val() + "</td>";
  26.                     cadena = cadena + "<td>" + $('#responsable_mesura_correctora :selected').text() + "</td>";
  27.                     cadena = cadena + "<td>" + $("#data_mesura_correctora").val() + "</td>";    
  28.                     cadena = cadena + "<td><input type='file' name='adjunts_data_mesura_correctora["+id_mesura_correctora+"]' maxlength='5' accept='gif|jpg|pdf'/></td>";
  29.                     cadena = cadena + "<td><a onclick='eliminar_mesura_correctora("+id_mesura_correctora+");'><img src='lib/images/delete.png' class='img_delete'/></a></td>";
  30.                     $("#mesura_correctora tbody").append(cadena);
  31.                    
  32.                     $("#descripcio_mesura_correctora").val('');
  33.                     $('#responsable_mesura_correctora  option[value=0]').attr('selected',true);
  34.                     $("#data_mesura_correctora").val('');
  35.                    
  36.                 }else{
  37.                     alert("Error: "+id_mesura_correctora);
  38.                 }            
  39.             });
  40.         }        
  41.     }

el problema que tengo es que en cada linea que añade se le puede añadir un adjunto un vez haya insertado la linea, pero no ser como asignarle un id concreto para q luego cuando mande el formulario y suban los archivos pueda guardar el id de ese campo relacionado con el nombre del archivo subido-
he probado lo siguiente

<input type='file' name='adjunts_data_mesura_correctora["+id_mesura+']' maxlength='5' accept='gif|jpg|pdf'/>

pero cuando envio el form con todo y recibo estos valores, haciendo lo siguiente:

Código PHP:
if(isset($_FILES['adjunts_data_mesura_correctora'])){        
         
            echo 
"<pre>";
            
print_r($_FILES['adjunts_data_mesura_correctora']);
            echo 
"</pre>";


el valor id que le asigno no me aparece en ningún lugar... y no se me ocurre como hacer eso.

como puedo solucionarlo?

espero haber sido más o menos claro.

gracias de antemano!

saludos
  #2 (permalink)  
Antiguo 28/06/2012, 07:12
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: asignar identificador a multiples campos tipo file

Para saber en si como esta llegando ese campo FILE realice un print_r($_POST) o un print_r($_FILES) y revise la informacion para saber que esta llegando del formulario.

Adicionalmente, a manera de informacion recuerde que el formulario debe tener el atributo multipart/form-data para que pueda enviar archivos a traves de este. Digo esto ya que no coloco las etiquetas de formulario asi que no las podemos ver.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 28/06/2012, 08:28
 
Fecha de Ingreso: septiembre-2010
Ubicación: /home/
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: asignar identificador a multiples campos tipo file

Hola

lo que llega imprimiendo eso es el array con el name/size,tmp_name.... , todo lo que se compone del tipo FILE pero el ID que quiero pasar yo no ser como hacerlo, para poder identificar ese archivo subido con la linea en que se ha insertado.

a ver si me hago entender mejor con lo siguiente
Código HTML:
Ver original
  1. <form id="frm_afegir_control" action="home.php?doo=add_control" method="post" enctype="multipart/form-data">
  2. <input type="file" name="adjuntos[]" class="multi" maxlength="5" accept="gif|jpg|pdf"/>
  3. <input type="file" name="adjuntos[]" class="multi" maxlength="5" accept="gif|jpg|pdf"/>
  4. <input type="file" name="adjuntos[]" class="multi" maxlength="5" accept="gif|jpg|pdf"/>
  5. <input type="file" name="adjuntos[]" class="multi" maxlength="5" accept="gif|jpg|pdf"/>
  6. </form>

los adjuntos deben corresponder a un ID concreto. por ejemplo, en el caso del primero podría ser 1, el segundo podría ser el 3, el siguiente podría ser el 8...

pero cuando mando el formulario y hago

Código PHP:
echo "<pre>";
print_r($_FILES['adjuntos']);
echo 
"</pre>"
no ser como puedo saber cual es el 1, el 3 o el 8... ya que por FILES no me llega el ID

he probado lo siguiente:

Código HTML:
Ver original
  1. <form id="frm_afegir_control" action="home.php?doo=add_control" method="post" enctype="multipart/form-data">
  2. <input type="file" name="adjuntos[1][]" class="multi" maxlength="5" accept="gif|jpg|pdf"/>
  3. <input type="file" name="adjuntos[3][]" class="multi" maxlength="5" accept="gif|jpg|pdf"/>
  4. <input type="file" name="adjuntos[8][]" class="multi" maxlength="5" accept="gif|jpg|pdf"/>
  5. <input type="file" name="adjuntos[x][]" class="multi" maxlength="5" accept="gif|jpg|pdf"/>
  6. </form>

por probar... pero no ser/consigo como puedo recoger ese valor 1,3,8

saludos

Última edición por Bugger; 28/06/2012 a las 08:38
  #4 (permalink)  
Antiguo 28/06/2012, 09:15
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: asignar identificador a multiples campos tipo file

Si utilizas un arreglo ajuntos[] de esa forma PHP tendra esto:

array(
array();
array();
array();
)

Tantos arreglos como campos de file tengas....

Teniendo esa teoria deberias utilizar:

Código PHP:
Ver original
  1. print_r($adjuntos[0]); // primer input
  2. print_r($adjuntos[1]); // segundo input
  3. print_r($adjuntos[2]); // tercer input

Ya que es un arreglo indexado automaticamente, empezara desde cero hasta n campos inputs que tengas en el formulario
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #5 (permalink)  
Antiguo 28/06/2012, 09:27
 
Fecha de Ingreso: septiembre-2010
Ubicación: /home/
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: asignar identificador a multiples campos tipo file

hola,

hasta aqui todo bien,
pero yo no ser el numero que voy a recibir en $adjuntos[x] puede ser un 1, un 6, o un 10, depende de la cantidad de registros que haya insertado previamente, como he puesto en el primer post, que espero que se me haya entendido.

quizás sea muy simple y supongo que mi ofuscación mental no me deja ver la clara solución.

si aceptara values, seria algo como adjuntos[]->value X necesito saber esa X para poder relacionar el archivo que estoy subiendo con el Id de la linea asignada a ese archivo.

recibo esto:

pero el ID que quiero no se ve por ninguna parte

Cita:
Array
(
[name] => Array
(
[0] => archivo1.pdf
[1] => archivo2.pdf
)

[type] => Array
(
[0] => application/pdf
[1] => application/pdf
)

[tmp_name] => Array
(
[0] => C:\Windows\Temp\php2637.tmp
[1] => C:\Windows\Temp\php2657.tmp
)

[error] => Array
(
[0] => 0
[1] => 0
)

[size] => Array
(
[0] => 89012
[1] => 84515
)
}
Saludos y gracias!

saludos
  #6 (permalink)  
Antiguo 28/06/2012, 09:39
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: asignar identificador a multiples campos tipo file

Para saber cuantos enviaron use count

Para saber que indice se esta trabajando se puede hacer con un foreach:

Código PHP:
Ver original
  1. foreach($array as $clave => $valor){
  2. echo "estoy trabajando con la clave numero: $clave";
  3. }
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #7 (permalink)  
Antiguo 28/06/2012, 09:48
 
Fecha de Ingreso: septiembre-2010
Ubicación: /home/
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: asignar identificador a multiples campos tipo file

nono, esto me devuelve la $clave pero del ARRAY,0 ,1,2... siempre es lo mismo, yo quiero el número que le asigno en el formulario a mesura que voy creando campos type="file", que van relacionados con los ID de una base de datos, es decir, el primero que empiece a subir archivos si que se corresponderá con 1,2,3, pero el siguiente que entre en el formulario será el 4-5-6 y así continuamente, 6-7-8-9-10 el siguiente por ejemplo, o quizás haya un salto porque en un registro no han insertado adjuntos. y los siguiente adjuntos se correspondan con 20-23-28...

saludos y gracias por seguirme en el tema.
  #8 (permalink)  
Antiguo 28/06/2012, 10:07
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: asignar identificador a multiples campos tipo file

Pero ese ID de donde sale? Queres colocar ese ID en el atributo NAME de los input file ? no entiendo en si que queres hacer.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #9 (permalink)  
Antiguo 28/06/2012, 11:15
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: asignar identificador a multiples campos tipo file

Para tu caso, la mejor forma es que los envies de forma separa y no como array, ya que el orden en que llegan no será igual al orden que tienes en tu form, la forma mas sencilla es que en el "name" del input agregues el identificador, y en un campo "hidden" envias el numero de inputs generados...

Código HTML:
Ver original
  1. <input type="file" name="archivo_1" />
  2. <input type="file" name="archivo_2" />
  3. <input type="file" name="archivo_3" />
  4. <input type="file" name="archivo_X" />
  5.  
  6. <input type="hidden" name="numfiles" value="X" />

En el PHP solo recorres los items según el numero de inputs...
Código PHP:
Ver original
  1. $numFiles = $_POST['numfiles'];
  2. for($i=1; $i<$numFiles; $i++) {
  3.      if (isset($_FILES['archivo_'.$i])) {
  4.           echo 'Archivo enviado desde la linea: '.$i;
  5.      }
  6. }

Es la manera mas facil de tener "control" para saber que archivo pertenece a que input, de la otra forma puedes tener 5 inputs tipo file, cuando se envíen los ID dentro del array siempre será 0 y 1, aun cuando solo se indico archivos en el primer y ultimo input...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 28/06/2012, 12:19
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: asignar identificador a multiples campos tipo file

Cita:
que van relacionados con los ID de una base de datos
Como relacionar el ID que generas con el ID de la base de datos? si el quiere hacer eso tendra que realizar un SELECT para saber a que registro se le colocaran los adjuntos.

Eso es lo que no he podido entender.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #11 (permalink)  
Antiguo 28/06/2012, 13:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: asignar identificador a multiples campos tipo file

Cita:
Iniciado por Nemutagk Ver Mensaje
[...] ya que el orden en que llegan no será igual al orden que tienes en tu form [...]
De hecho es así, jamás ha cambiado eso, siempre llegan en orden.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 28/06/2012, 13:16
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: asignar identificador a multiples campos tipo file

Cita:
Iniciado por pateketrueke Ver Mensaje
De hecho es así, jamás ha cambiado eso, siempre llegan en orden.
A lo que me referia es al punto final que llegue en la misma respuesta, si tienes 5 inputs "file" y solo envias el primero y el ultimo al final obtendrás un array 0 y 1, mas no 0 y 4 como lo necesitaría @Bugger mas no que el orden del array sea aleatorio...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #13 (permalink)  
Antiguo 28/06/2012, 14:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: asignar identificador a multiples campos tipo file

Ahh, claro.

Sin embargo se puede especificar como clave el ID, en lugar de concatenarlo al name.
Código HTML:
<input name="foo[99]">
<input name="foo[13]">
<input name="foo[20]"> 
¿O no estoy entendiendo el problema?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 29/06/2012, 01:38
 
Fecha de Ingreso: septiembre-2010
Ubicación: /home/
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: asignar identificador a multiples campos tipo file

Hola de nuevo, perdón por mi ausencia pero cumplo con mi horario, aunque desde casa me leí varias respuestas... y antes de nada muchas gracias!!!!!

a ver,

el código que puse al principio, lo que hace es insertar un registro en la base de datos y a través de javascript muestra lo insertado sin recargar la página a la vez, que el php que inserta los datos me devuelve el ID de esa entrada en la base de datos, y es ese ID el que quiero asignar a un campo FILE que se agrega justamente al lado de los campos insertados.

en las siguiente lineas, muestro en una tabla en mitad del formulario lo que se va insertado, y a mesura q se va insertando los registros le aparece la opción de adjuntar un archivo a esa linea insertada.

aqui:

Código Javascript:
Ver original
  1. var cadena;
  2. cadena = "<tr id=fila_mesura_correctora_"+id_mesura_correctora+">";        
  3. cadena = cadena + "<td>" + $("#descripcio_mesura_correctora").val() + "</td>";
  4. cadena = cadena + "<td>" + $('#responsable_mesura_correctora :selected').text() + "</td>";
  5. cadena = cadena + "<td>" + $("#data_mesura_correctora").val() + "</td>";    
  6. cadena = cadena + "<td><input type='file' name='adjunts_data_mesura_correctora["+id_mesura_correctora+"]' maxlength='5' accept='gif|jpg|pdf'/></td>";
  7. cadena = cadena + "<td><a onclick='eliminar_mesura_correctora("+id_mesura_correctora+");'><img src='lib/images/delete.png' class='img_delete'/></a></td>";
  8.   $("#mesura_correctora tbody").append(cadena);

el <input type='file' name='adjunts_data_mesura_correctora["+id_mesura_correctora+"]' maxlength='5' accept='gif|jpg|pdf'/>
es el campo que va generando al lado de cada registro insertado y es el q quiero que cuando se envíe el FORM entero, se mandan también esos archivos con el ID que quiero, pero hasta ahora, si recojo lo del $_FILE, el ID no consigo traerlo.

el id_mesura_correctora es el que me devuelve php al insertar el registro, lo paso a Javascript, para generar la linea, poder borrarla y a la vez meterle el adjunto... ^^

el último mensaje de pateketrueke, es eso, pero no consigo recuperar el ID.

Código PHP:
Ver original
  1. echo "<pre>";
  2. print_r($_FILES['adjunts_data_mesura_correctora']);
  3. echo "</pre>";

espero que quede más claro ahora...

saludos

Última edición por Bugger; 29/06/2012 a las 01:47
  #15 (permalink)  
Antiguo 30/06/2012, 23:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: asignar identificador a multiples campos tipo file

Has print_r() de todo el $_POST que recibes también y muestra.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #16 (permalink)  
Antiguo 04/07/2012, 01:15
 
Fecha de Ingreso: septiembre-2010
Ubicación: /home/
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: asignar identificador a multiples campos tipo file

Cita:
Iniciado por pateketrueke Ver Mensaje
Has print_r() de todo el $_POST que recibes también y muestra.
Hola

por post tampoco

sale lo siguiente:

el primero es el $_FILE y el segundo el $_POST.
Código:
20120704

Array
(
    [name] => Array
        (
            [0] => ACTIVACION VSOFT-IP.pdf
        )

    [type] => Array
        (
            [0] => application/pdf
        )

    [tmp_name] => Array
        (
            [0] => C:\Windows\Temp\php4D1.tmp
        )

    [error] => Array
        (
            [0] => 0
        )

    [size] => Array
        (
            [0] => 89012
        )

)


Array
(
    [id_rel_control] => 20124
    [data_creacio_usuari] => 04/07/2012
    [id_tipus] => ca
    [id_classificacio] => 0
    [id_objecte] => 0
    [id_origen] => 0
    [descripcio] => 
    [investigacio] => 
    [descripcio_mesura_correctora] => 
    [responsable_mesura_correctora] => 0
    [data_mesura_correctora] => 
    [descripcio_mesura_correctiva] => 
    [responsable_mesura_correctiva] => 0
    [data_mesura_correctiva] => 
    [data_limit] => 
    [data_finalitzacio] => 
    [cost] => 0
    [act_add] => Guardar
)
alguna idea de como solventarlo? aparte de asignar el id en el name?

no se me ocurre nada ya ^^

saludos

Última edición por Bugger; 04/07/2012 a las 01:48
  #17 (permalink)  
Antiguo 04/07/2012, 04:34
 
Fecha de Ingreso: septiembre-2010
Ubicación: /home/
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: asignar identificador a multiples campos tipo file

bueno, lo dejo como me dijeron en el name añadir el numero deseado y ya está!

muchas gracias por el seguimiento y el interés mostrado!

Saludos y gracias de nuevo!

Etiquetas: campos, file, formulario, identificador, multiples, mysql, sql, tipo
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:18.