Comunidad de diseño web y desarrollo en internet online

php no reconoce input file dinamico

Citar            
MensajeEscrito el 03 Ene 2012 05:43 am
Feliz año nuevo!

Comento la situación: yo tengo un cuadro que se recupera por base de datos, al pie del cuadro hay un form para insertar una nueva entrada en ese cuadro, agrego también la opción de subir imágenes.
Lo que intento es que se puedan subir tantas imágenes como se quiera, con sólo apretar un botón agrego un nuevo input para file en el form ¿El problema? una vez enviado el formulario (se envía al mismo archivo .php) no me toma los input dinámicos.

Si agrego manualmente la cantidad de inputs que yo quiera me los toma todos, si utilizo los input generados por javascript, no me toma ninguno.

¿Alguna ayuda?

Código PHP :

<?
   include ("mysqlconn.php"); 
   if(isset($_POST['add'])){
      $padre          = $_POST['parent'];
      $name          = $_POST['name'];
      $procu          = $_POST['procu'];
      $prove        = $_POST['prove'];
      $foja           = $_POST['foja'];
      $observ         = $_POST['observ'];
      foreach($_FILES as $k => $file){
      $images[$k]['tmp']      = $file['tmp_name'];
      $images[$k]['tipo']      = $file['type'];
      }
      if (empty($padre) || empty ($name) || empty($procu) || empty($observ)){
         if(empty($procu)) $msg.= "<br />Debe ingresar fecha de procuraci&oacute;n.";
         if(empty($observ)) $msg.= "<br />Debe ingresar observaci&oacute;n.";
      }else{
         $qry = "INSERT INTO cuadro VALUES (NULL,'".$prove."','".$procu."','".$observ."','".$foja."','".$padre."','".$name."','";
         if(!empty($_FILES)){
            foreach($images as $imagen){
               $sep=explode('image/',$imagen['tipo']);
               $tipo=$sep[1];
               if($tipo == "gif" || $tipo == "pjpeg" || $tipo == "bmp" || $tipo == "jpg" || $tipo == "jpeg"){
                  $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
                  $cad = ""; 
                  for($i=0;$i<6;$i++)$cad .= substr($str,rand(0,62),1);
                  $cad .=time();
                  $destino='subidas';
                  $lugar=$destino.'/'.$cad.'.'.$tipo;
                  move_uploaded_file($imagen['tmp'],$lugar);
                  $qry .= '<a href="'.$lugar.'" target="_blank"><img src="images/img.png" /></a>';
               }
            }
         }
         $qry .= "')";
         $rs = mysql_query($qry);
         echo $qry;
      }
   }
   $cau = $_GET['cau'];
   $qry_cuad = "SELECT * FROM cuadro WHERE parent=".$cau." ORDER BY id DESC";
   $rs_cuad = mysql_query($qry_cuad);
   $rw_cuad = mysql_num_rows($rs_cuad);
   $td = 1;
   while ($cuad = mysql_fetch_object($rs_cuad)) {
    $cuadro[$cuad->id]['parent'] = $cuad->parent; 
    $cuadro[$cuad->id]['fecha_prov'] = $cuad->fecha_prov; 
    $cuadro[$cuad->id]['fecha_procu'] = $cuad->fecha_procu; 
    $cuadro[$cuad->id]['observ'] = $cuad->observ; 
    $cuadro[$cuad->id]['foja'] = $cuad->foja; 
    $cuadro[$cuad->id]['name'] = $cuad->name; 
    $cuadro[$cuad->id]['image'] = $cuad->image; 
    }
    echo '<table id="cuadro"><tr class="thead"><td>Escrito<br />por:</td><td>Fecha de<br />procuracion:</td><td>Fecha de<br />proveido:</td><td>Foja:</td><td>Imagen:</td><td>Observaciones:</td></td>';
    if ($rw_cuad != 0){
      foreach ($cuadro as $cu){
         $clase = ($td%2 === 0 ? 'uno' : 'dos');
         echo '<tr class="',$clase,'"><td class="centrar">',$cu['name'],'</td><td class="centrar">',$cu['fecha_procu'],'</td><td class="centrar">',$cu['fecha_prov'],'</td><td class="centrar">',$cu['foja'],'</td><td>',$cu['image'],'</td><td>',$cu['observ'],'</td></tr>';
         $td++;
      }
   }
   ?>
   <form id='formcuad' action='' method='POST' enctype='multipart/form-data'>
      <input type='hidden' name='add' />
      <input type='hidden' name='parent' value='<?=$cau?>' />
      <input type='hidden' name='parent' value='<?=$cau?>' />
      <input type='hidden' name='name' value='<?=$_SESSION['name']?>' />
         <tr>
            <td><input type='Submit' value='Guardar'></td>
            <td><input type='text' size='8' class="required" id="procu" name='procu' onkeyup=mascara(this,'/',patron,true) maxlength='10' /></td>
            <td><input type='text' size='8' name = 'prove' onkeyup=mascara(this,'/',patron,true) maxlength='10' /></td>
            <td><input type='text' size='4' name='foja' maxlength='4' /></td>
            <td><button type='button' id='addfile'>+</button></td>
            <td><textarea cols='30' rows='1' name='observ'></textarea></td>
         </tr>
      </table>
      <div id='files'>
      </div>
   </form>
   <?if(isset($msg))echo $msg,"<br />";?>
   <hr />
   <a href="" class='display'>Mostrar liquidacion</a><br />
   <hr />
   <?
   $form_qry = "SELECT * FROM liquidacion WHERE parent=".$cau;
   $form = mysql_query($form_qry);
   $form_nr = mysql_num_rows($form);
   if($form_nr===0 || isset($_GET['edit'])){
      include('formliq.php');
   }else{
      $liqui = mysql_fetch_assoc($form);
      $nombre = $liqui['nombre'];
      $tipo = $liqui['tipo'];
      $decreto = $liqui['decreto'];
      $rub = $liqui['rub'];
      $senten1 = $liqui['senten1'];
      $senten2 = $liqui['senten2'];
      $entrega = $liqui['entrega'];
      $confec = $liqui['confec'];
      $presenta = $liqui['presenta'];
      $impugnaciones = $liqui['impugnaciones'];
      include ('cuadroliq.php');
   }
   mysql_close($conn);
?>
<script type="text/javascript">
$().ready(function() {
   i=0;
   $(".display").toggle(
      function(){
         $("#liquidacion").slideDown('slow');
      },
      function(){
         $("#liquidacion").slideUp('slow');
      }
   );
   $("#addfile").click(
      function(){
         i++;
         $("#files").append("<input type='file' name='img"+i+"' /><br/>");
   });
});
</script>


En ese código no dejé ningún input-file, sólo se agregan mediante el botón +. Hay muchas cosas que no hacen a la cuestión, pero puse tooodo el archivo php para que sea más fácil encontrar errores (si encuentran errores o consejitos para mejorar el código, agradecido de los aportes).

En definitiva, el script en jQuery me agrega bien el html, pero php no los toma ¿ideas?

Saludos

Por Martriay

5 de clabLevel



Genero:Masculino  

Freelancer

chrome
Citar            
MensajeEscrito el 03 Ene 2012 12:33 pm
Al imput type=file ponle img[] en su name en vez de usar una variable.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 03 Ene 2012 12:42 pm
En el php que recibe el form debes conocer los input que te llegan! podrías enviarle un arreglo con todos los input que has creado para luego recorrerlos y así capturar los datos que necesitas!

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

chrome
Citar            
MensajeEscrito el 03 Ene 2012 06:54 pm

jpcw escribió:

En el php que recibe el form debes conocer los input que te llegan! podrías enviarle un arreglo con todos los input que has creado para luego recorrerlos y así capturar los datos que necesitas!

Lo hay, si agrego manualmente la cantidad de inputs file que quiera, mi código php los reconoce todos (toma $_FILES como un array y lo recorre tomando todas sus posiciones), el problema es con los creados dinámicamente por javascript que no entiendo por qué no funcionan, si en el html comprobé que están idénticos a los que agrego a mano!

DriverOp escribió:

Al imput type=file ponle img[] en su name en vez de usar una variable.

Y eso como sería? Te recuerdo que no puede ser un array ya que utilizo explode() en mi php y sólo funciona con strings, no con arrays.


Muchas gracias por sus respuestas

Por Martriay

5 de clabLevel



Genero:Masculino  

Freelancer

chrome
Citar            
MensajeEscrito el 03 Ene 2012 08:56 pm
Es que al hacerlo de esa manera ya es un array.
Te tiene que quedar así:

Código HTML :

<input type="file" name="img[]" />

Y luego en PHP, lo puedes leer como:

Código PHP :

$imagenes = $_FILES['img'];

La variable $imagenes será un array con índice numérico y base cero.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 03 Ene 2012 09:12 pm
No funciona, hice var dump a $imagenes y llega vacío, el mismo problema que tengo desde siempre, el error no está ahí

Por Martriay

5 de clabLevel



Genero:Masculino  

Freelancer

chrome
Citar            
MensajeEscrito el 04 Ene 2012 02:41 am
el error esta en javascript

Código :

$("#files").append("<input type='file' name='img"+i+"' /><br/>");

si te fijas no le pusiste los corchetes a name
deberia quedar asi

Código :

$("#files").append("<input type='file' name='img["+i+"]' /><br/>");

cuando trabajes con javascript trata de usar algun plugin para tu navegador, como usas chrome usa su propio debuger jeje tienes que aprender a usar el debuguer si no te daras de cabezasos a un simple punto :)

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Ene 2012 09:51 pm
Ojalá, pero no está bien esa corrección, te explico: no trato de generar un array img[] para poner las imágenes (de hecho, lo evito porque sino el código no funcionaría, más arriba dije que no funcionó, ni aún editando el código para recibir un arreglo img[]); mi código toma todos los $_FILES enviados, si manualmente pongo inputs con nombre 'im1', 'img2, 'img3', etc me los toma, (si manualmente pongo arrays me devuelve error).

Entonces con un array no solo que no funcionaría, sino que empeoraría.
Gracias igual.

Por Martriay

5 de clabLevel



Genero:Masculino  

Freelancer

chrome
Citar            
MensajeEscrito el 12 Sep 2015 04:44 am
alguien pudo encontrar solución a este inconveniente con input file clonados

Por ricardo.gonzalez

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Sep 2015 04:44 am

Martriay escribió:

Ojalá, pero no está bien esa corrección, te explico: no trato de generar un array img[] para poner las imágenes (de hecho, lo evito porque sino el código no funcionaría, más arriba dije que no funcionó, ni aún editando el código para recibir un arreglo img[]); mi código toma todos los $_FILES enviados, si manualmente pongo inputs con nombre 'im1', 'img2, 'img3', etc me los toma, (si manualmente pongo arrays me devuelve error).

Entonces con un array no solo que no funcionaría, sino que empeoraría.
Gracias igual.



alguien pudo encontrar solución a este inconveniente con input file clonados

Por ricardo.gonzalez

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 18 Sep 2015 02:52 pm
Sip hace algún tiempo hice un tutorial de eso para subir muchos :D

http://elporfirio.com/wp/2013/07/subir-varios-archivos-con-php-multifile-upload/

Y si el código de atrás (el PHP) no funciona, cámbialo para que pueda procesar un array.

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.