Foros del Web » Programando para Internet » PHP »

php no reconoce input file dinamico

Estas en el tema de php no reconoce input file dinamico en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/01/2012, 22:51
Avatar de Martriay  
Fecha de Ingreso: noviembre-2010
Mensajes: 80
Antigüedad: 13 años, 5 meses
Puntos: 5
php no reconoce input file dinamico

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%=== '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===|| 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
  #2 (permalink)  
Antiguo 01/01/2012, 23:52
 
Fecha de Ingreso: julio-2010
Mensajes: 197
Antigüedad: 13 años, 9 meses
Puntos: 32
Respuesta: php no reconoce input file dinamico

se envia al mismo formulario pk el form action en tu codigo lo tienes vacio debes indicarle el nombre
  #3 (permalink)  
Antiguo 02/01/2012, 00:05
Avatar de Martriay  
Fecha de Ingreso: noviembre-2010
Mensajes: 80
Antigüedad: 13 años, 5 meses
Puntos: 5
Respuesta: php no reconoce input file dinamico

Es apropósito, fijate que hay un hidden que activa la inserción en la base de datos.
Y si eso fuera un problema, añadir los <input type='file'> manualmente tampoco funcionaría, el problema es con los añadidos vía javascript.

Ideas?
  #4 (permalink)  
Antiguo 02/01/2012, 00:57
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: php no reconoce input file dinamico

me parece que :

la accion del formulario debe apuntar a la pagina y al principio justo despues de <? debe ir
session_start();

y como consejo :

proteger injecion mysql

http://www.forosdelweb.com/f18/prote...on-sql-952070/

y busca tambien evitar XSS , insercion remota archivo.

en fin, valida las variables, verifica que sean lo que tu codigo espera por ejemplo si es intero agrega (int) antes,
antes de hacer una consulta usa is_int .
mas que nada de las que vienen por GET . ( tambien puedes encriptar y desencriptar busca en este foro hay mucho material al respecto)

saludos
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -

Última edición por zerpico_01; 02/01/2012 a las 01:04
  #5 (permalink)  
Antiguo 02/01/2012, 01:04
Avatar de Martriay  
Fecha de Ingreso: noviembre-2010
Mensajes: 80
Antigüedad: 13 años, 5 meses
Puntos: 5
Respuesta: php no reconoce input file dinamico

Este archivo está incluído en otro donde sí hay un session_start() al comienzo, y al ser código reutilizable (el que puse arriba de todo) la acción del formulario apunta a sí mismo para quedarme en la misma sección desde donde lo envíe, ese form trata de agregar algo al cuadro de esa misma página.

Aún así, eso no explicaría por qué si pongo manualmente el input funciona, pero el dinámico no.

Gracias igual
  #6 (permalink)  
Antiguo 02/01/2012, 01:25
 
Fecha de Ingreso: marzo-2003
Ubicación: Gandia, Valencia, España
Mensajes: 55
Antigüedad: 21 años
Puntos: 3
Respuesta: php no reconoce input file dinamico

Sin probar el código te diría que pruebes a ver un var_dump($_FILES);
Tambien asignale un valor al input "add", aunque sea un hidden (O sobre todo por serlo) y estar vacio algunos navegadores pueden no manejarlo correctamente.
__________________
Sueño luego existo
  #7 (permalink)  
Antiguo 02/01/2012, 12:18
Avatar de Martriay  
Fecha de Ingreso: noviembre-2010
Mensajes: 80
Antigüedad: 13 años, 5 meses
Puntos: 5
Respuesta: php no reconoce input file dinamico

Ahí arreglé lo del hidden, muchas gracias! Ese tipo de ayuditas siempre vienen bien.
Sobre el dump, no lo hice, pero porque va a estar vacío, ¿cómo lo se?

Código PHP:
            $qry "INSERT INTO cuadro VALUES (NULL,'".$prove."','".$procu."','".$observ."','".$foja."','".$padre."','".$name."','";
            echo 
"entra 1";
            if(!empty(
$_FILES)){
                echo 
"entra 2";
                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); 
me imprime "entra 1", pero no el "entra 2"
  #8 (permalink)  
Antiguo 02/01/2012, 17:59
Avatar de Martriay  
Fecha de Ingreso: noviembre-2010
Mensajes: 80
Antigüedad: 13 años, 5 meses
Puntos: 5
Respuesta: php no reconoce input file dinamico

Alguien podría probarlo y decirme si le funciona?
  #9 (permalink)  
Antiguo 16/01/2012, 09:14
Avatar de Martriay  
Fecha de Ingreso: noviembre-2010
Mensajes: 80
Antigüedad: 13 años, 5 meses
Puntos: 5
Respuesta: php no reconoce input file dinamico

Lo edité para que funcione con un array

Código PHP:
Ver original
  1. <?php
  2.     if(isset($_POST['add'])){
  3.         $padre  = $_POST['parent'];
  4.         $name   = $_POST['name'];
  5.         $procu  = $_POST['procu'];
  6.         $prove  = $_POST['prove'];
  7.         $foja   = $_POST['foja'];
  8.         $observ = $_POST['observ'];
  9.         $k=0;
  10.         echo '<pre>',var_dump($_FILES),'</pre>';
  11.         foreach($_FILES as $file){
  12.             foreach($file['tmp_name'] as $kt_n => $vtn) $images[$kt_n]['tmp'] = $vtn;
  13.             foreach($file['type'] as $kt => $vt) $images[$kt]['tipo'] = $vt;
  14.         }
  15.         if (empty($padre) || empty ($name) || empty($procu) || empty($observ)){
  16.             if(empty($procu)) $msg.= "<br />Debe ingresar fecha de procuraci&oacute;n.";
  17.             if(empty($observ)) $msg.= "<br />Debe ingresar observaci&oacute;n.";
  18.         }else{
  19.             $qry = "INSERT INTO cuadro VALUES (NULL,'".$prove."','".$procu."','".$observ."','".$foja."','".$padre."','".$name."','";
  20.             if(!empty($images)){
  21.                 foreach($images as $imagen){
  22.                     $sep=explode('image/',$imagen['tipo']);
  23.                     $tipo=$sep[1];
  24.                     if($tipo == "gif" || $tipo == "pjpeg" || $tipo == "bmp" || $tipo == "jpg" || $tipo == "jpeg"){
  25.                         $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
  26.                         $cad = "";
  27.                         for($i=0;$i<6;$i++)$cad .= substr($str,rand(0,62),1);
  28.                         $cad .=time();
  29.                         $destino='subidas';
  30.                         $lugar=$destino.'/'.$cad.'.'.$tipo;
  31.                         move_uploaded_file($imagen['tmp'],$lugar);
  32.                         $qry .= '<a href="'.$lugar.'" target="_blank"><img src="images/img.png" /></a>';
  33.                     }
  34.                 }
  35.             }
  36.             $qry .= "')";
  37.             $rs = mysql_query($qry);
  38.         }
  39.     }
  40.     $qry_cuad = "SELECT * FROM cuadro WHERE parent=".$cau." ORDER BY id DESC";
  41.     $rs_cuad = mysql_query($qry_cuad);
  42.     $rw_cuad = mysql_num_rows($rs_cuad);
  43.     $td = 0;
  44.     while ($cuad = mysql_fetch_object($rs_cuad)) {
  45.     $cuadro[$cuad->id]['parent'] = $cuad->parent;
  46.     $cuadro[$cuad->id]['fecha_prov'] = $cuad->fecha_prov;
  47.     $cuadro[$cuad->id]['fecha_procu'] = $cuad->fecha_procu;
  48.     $cuadro[$cuad->id]['observ'] = $cuad->observ;
  49.     $cuadro[$cuad->id]['foja'] = $cuad->foja;
  50.     $cuadro[$cuad->id]['name'] = $cuad->name;
  51.     $cuadro[$cuad->id]['image'] = $cuad->image;
  52.     }
  53.     echo '<table class="cuadro"><tr class="thead"><td>Fecha de<br />procuracion:</td><td>Fecha de<br />proveido:</td><td>Foja:</td><td>Imagen:</td><td>Observaciones:</td><td>Escrito<br />por:</td></tr>';
  54.     if ($rw_cuad != 0){
  55.         foreach ($cuadro as $cu){
  56.             $clase = ($td%2 === 0 ? 'uno' : 'dos');
  57.             echo '<tr class="',$clase,'"><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><td class="centrar">',$cu['name'],'</td></tr>';
  58.             $td++;
  59.         }
  60.     }
  61.     ?>
  62.     <form id='formcuad' method='POST' enctype='multipart/form-data'>
  63.         <input type='hidden' name='add' value='true' />
  64.         <input type='hidden' name='parent' value='<?=$cau?>' />
  65.         <input type='hidden' name='parent' value='<?=$cau?>' />
  66.         <input type='hidden' name='name' value='<?=$_SESSION['name']?>' />
  67.             <tr>
  68.                 <td><input type='text' size='8' id="procu" name='procu' onkeyup=mascara(this,'/',patron,true) maxlength='10' /></td>
  69.                 <td><input type='text' size='8' name = 'prove' onkeyup=mascara(this,'/',patron,true) maxlength='10' /></td>
  70.                 <td><input type='text' size='4' name='foja' maxlength='4' /></td>
  71.                 <td><button type='button' id='addfile'>+</button></td>
  72.                 <td><textarea cols='30' rows='1' name='observ'></textarea></td>
  73.                 <td><input type='Submit' value='Guardar'></td>
  74.             </tr>
  75.         </table>
  76.         <div id='files'>
  77.             <input type="file" name="file[]"><br />
  78.         </div>
  79.     </form><?
  80.     if(isset($msg))echo $msg,"<br />";
  81. ?>

Código Javascript:
Ver original
  1. $("#addfile").click(
  2.         function(){
  3.             $("#files").append("<input type='file' name='file[]' /><br/>");
  4.     });

Pero ningún input dinámico llega a $_FILES
  #10 (permalink)  
Antiguo 16/01/2012, 12:32
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: php no reconoce input file dinamico

Yo creo que el problema es de JS. No uso jquery por lo cual no lo puedo asegurar, pero me parece que al agregar los inputs, lo que haces en realidad es agregar html a un elemento, cuando lo que hay que hacer es agregar un nodo o hijo al formulario.
  #11 (permalink)  
Antiguo 16/01/2012, 14:36
Avatar de Martriay  
Fecha de Ingreso: noviembre-2010
Mensajes: 80
Antigüedad: 13 años, 5 meses
Puntos: 5
Respuesta: php no reconoce input file dinamico

Yo creo que el error está en el contexto, probé con un form sencillo y ese mismo codigo jQuery, enviarlo a si mismo y hacer var_dump de $_FILES y me lo toma.
Hay algo en el contexto de mi código que invalida los input dinámicos.

Por favor que alguien me ayude a encontrarlo, estoy hace bastante con este tema jaja.

Etiquetas: dinamico, file, formulario, input, mysql, reconoce
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 23:04.