Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Mensaje iniciado por: LaThortilla (Effort) en 18 Septiembre 2014, 03:14 AM

Título: [SOLUCIONADO][PHP] $_FILE[nombre][propiedad] devuelve un array
Publicado por: LaThortilla (Effort) en 18 Septiembre 2014, 03:14 AM
Buenos días intento guardar una imagen en un Base de datos mySQL desde un formulario
El problema es el siguiente......

Problema2:
cada vez que se ejecuta el formulario se sube un nuevo archivo y la variable $_FILE[nombre][propiedad] va devolviendo un array....
por ejemplo para hacer referencia a la primera foto que se subio desde el formulario seria:
Código (php) [Seleccionar]
$_FILE[nombre][propiedad] [0]
tengo 2 dudas....
1. Se puede reiniciar esta variable?
2. En esta variable se almacenaran archivos solo de este formulario o de otros que esten
en mi pagina(si usara el mismo nombre)($_FILE[nombre])?



Problema1(solucionado):

al ejecutar el "subir_imagen.php" el archivo(imagen seleccionada en el input) no esta cargado por lo tanto no se puede mandar nada a la base... ver linea :15 Código subir_imagen.php eso da falso

Solucion:
El archivo hera demasiado grande.....
AYUDA PORFA.....

La Tabla:
Código (sql) [Seleccionar]

CREATE TABLE IF NOT EXISTS `IMG_PERFIL` (
 `ID` smallint(6) NOT NULL auto_increment,
 `ANCHURA` smallint(6) NOT NULL,
 `ALTURA` smallint(6) NOT NULL,
 `TIPO` char(15) NOT NULL,
 `IMAGEN` mediumblob NOT NULL,
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;


El formulario:
Código (html4strict) [Seleccionar]

<form method="post" action="subir_imagen.php" onsubmit="return validacion(this)">

      <label>Elige una fotografia tipo credencial(2MB max):</label>
      <div id="frm-campo-image"></div>
      <input type="hidden" name="MAX_FILE_SIZE" value="2400" />
      <input type="file" id="foto" name="foto_perfil_registro[]" required="true"/>
      <output id="list"></output>          
       <input class="botton1" type="submit" value="Registrarse"/>
                       
</form>


El archivo subir_imagen.php

Código (php) [Seleccionar]


       <?php
           $filename 
"foto_perfil_registro";
          
  
$link = new mysqli('localhost''base''1234''tabla');
//echo "<BR>".$_FILES[ $filename]["name"][0]; //nombre del archivo
//echo "<BR>".$_FILES[ $filename]["type"][0]; //tipo
//echo "<BR>".$_FILES[ $filename]["tmp_name"][0]; //nombre del archivo de la imagen temporal
//echo "<BR>".$_FILES[ $filename]["size"][0]; //tamaño
# Comprovamos que se haya subido un fichero

    
if (is_uploaded_file($_FILES[$filename]["tmp_name"][0])) {
        
# Cogemos el formato de la imagen

           
$filetype =$_FILES[$filename]["type"][0];

        if ( 
$filetype== "image/jpeg" || $filetype== "image/pjpeg" || $filetype == "image/gif" || $filetype == "image/bmp" || $filetype == "image/png") {
            
# Cogemos la anchura y altura de la imagen
            
$info getimagesize($_FILES[$filename]["tmp_name"]);
            echo 
"<BR>".$info[0]; //anchura
            
echo "<BR>".$info[1]; //altura
            
echo "<BR>".$info[2]; //1-GIF, 2-JPG, 3-PNG
            
echo "<BR>".$info[3]; //cadena de texto para el tag <img
            #Obtenemos el contenido del archivo
            
$contetF file_get_contents($_FILES[$filename]["tmp_name"]);
            
# Escapa caracteres especiales
            
$imagenEscapes mysql_real_escape_string($contetF);
            
# Agregamos la imagen a la base de datos
            
$result $link->query("INSERT INTO `IMG_PERFIL` (ANCHURA,ALTURA,TIPO,IMAGEN) VALUES (" $info[0] . "," $info[1] . ",'" $_FILES[$filename]["type"] . "','" $imagenEscapes "')"$link);
            
# Cogemos el identificador con que se ha guardado
             
mysqli_close($link);
             
           
            
# Mostramos ela imagen agregada
            //echo "Imagen agregada con el id ".$id."<BR>";
            //echo "<img src='imagen_mostrar.php?id=".$id."' width='".$info[0]."' height='".$info[1]."'>";
        
}
    }

        
?>


Esto es el script para validar y mostrar la imagen .... Esta de mas pero se los paso por si les sirve...

Código (javascript) [Seleccionar]
function handleFileSelect(evt) {
           var files = evt.target.files; // FileList object
           // Loop through the FileList and render image files as thumbnails.
           for (var i = 0, f; f = files[i]; i++) {
               //alert('archivo: ' + i);
               // Only process image files.
               if (!f.type.match('image.*')) {
                   continue;
               } else {
                   document.getElementById('list').innerHTML = [''].join('');
               }

               var reader = new FileReader();

               // Closure to capture the file information.
               reader.onload = (function(theFile) {
                   return function(e) {
                       // Render thumbnail.

                       document.getElementById('list').innerHTML = ['<img id="form-foto" src="', e.target.result,
                           '" title="', escape(theFile.name), '"/>'].join('');
                   };
               })(f);

               // Read in the image file as a data URL.
               reader.readAsDataURL(f);
           }
       }
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no existe
Publicado por: engel lex en 18 Septiembre 2014, 03:19 AM
 y el código que la almacena? en el codigo que publicaste no veo la linea que colocas en el titulo
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no existe
Publicado por: LaThortilla (Effort) en 18 Septiembre 2014, 03:25 AM
Cita de: engel lex en 18 Septiembre 2014, 03:19 AM
y el código que la almacena? en el codigo que publicaste no veo la linea que colocas en el titulo

Ammm cuando se da sumit... no es igual que con $_POST... solo accedes a el (pense que así era)?
o hay que cargarlo?
o es necesario subirlo por ftp y luego almacenarlo?
Esto da falso:
Código (php) [Seleccionar]
is_uploaded_file($_FILES[$filename]["tmp_name"])
Perdón por mi ignorancia?
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: engel lex en 18 Septiembre 2014, 03:39 AM
intenta colocarle al form el enctype

Código (html4strict) [Seleccionar]
<form method="post" action="subir_imagen.php" onsubmit="return validacion(this)" enctype="multipart/form-data">
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: LaThortilla (Effort) en 18 Septiembre 2014, 03:44 AM
OMG siii es cierto eso me faltaba... ya lo había leído pero no se lo puse
.... Deja se lo pongo y modifico para que le sirva a alguien mas..... 

Sos grande amigo... Gracias;D ;D ;D ;D ;D ;D ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: LaThortilla (Effort) en 18 Septiembre 2014, 03:49 AM
Compa me sale este error: Warning: is_uploaded_file() expects parameter 1 to be string, array given in /home/subir_imagen.php on line 15
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: engel lex en 18 Septiembre 2014, 03:58 AM
lo que le llegó no fue un string... revisa el $_FILES[$filename]["tmp_name"] a ver que contiene, porque dice que recibió un array (usa var_dump para ver el contenido)
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: LaThortilla (Effort) en 18 Septiembre 2014, 04:12 AM
Aqui te pongo lo que imprime cada:


Código (php) [Seleccionar]
echo $_FILES[ $filename]["name"]; //imprime  afas.jpg
echo $_FILES[ $filename]["type"]; //imprime (nada)
echo $_FILES[$filename]["tmp_name"]; //imprime (nada)
echo $_FILES[ $filename]["size"]; //imprime (nada)
echo $_FILES[ $filename]["error"]; //imprime 2


Esto es lo que devuelve el var_dump($_FILES[$filename]["tmp_name"]):
<br>array(1) {
 [0]=&gt;
 string(0) ""

}

Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: LaThortilla (Effort) en 18 Septiembre 2014, 04:34 AM
Cita de: Effort en 18 Septiembre 2014, 04:12 AM
Aqui te pongo lo que imprime cada:


Código (php) [Seleccionar]
echo $_FILES[ $filename]["name"]; //imprime  afas.jpg
echo $_FILES[ $filename]["type"]; //imprime (nada)
echo $_FILES[$filename]["tmp_name"]; //imprime (nada)
echo $_FILES[ $filename]["size"]; //imprime (nada)
echo $_FILES[ $filename]["error"]; //imprime 2


Esto es lo que devuelve el var_dump($_FILES[$filename]["tmp_name"]):
<br>array(1) {
 [0]=&gt;
 string(0) ""

}



creo que esto es el problema
UPLOAD_ERR_FORM_SIZE
Valor: 2; El archivo subido excede la directiva MAX_FILE_SIZE que fue especificada en el formulario HTML.
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: MinusFour en 18 Septiembre 2014, 05:00 AM
Vas a necesitar cambiar las directivas en tu php.ini:

post_max_size
upload_max_filesize

post_max_size pon 2mb mas que upload_max_filesize.
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: LaThortilla (Effort) en 18 Septiembre 2014, 12:58 PM
Cita de: MinusFour en 18 Septiembre 2014, 05:00 AM
Vas a necesitar cambiar las directivas en tu php.ini:

post_max_size
upload_max_filesize

post_max_size pon 2mb mas que upload_max_filesize.

Si eso ya esta soludionado....pero ahora el problema es otro.....
Problema2:
cada vez que se ejecuta el formulario se sube un nuevo archivo y la variable $_FILE[nombre][propiedad] va devolviendo un array....
por ejemplo para hacer referencia a la primera foto que se subio desde el formulario seria:
Código (php) [Seleccionar]
$_FILE[nombre][propiedad] [0]
tengo 2 dudas....
1. Se puede reiniciar esta variable?
2. En esta variable se almacenaran archivos solo de este formulario o de otros que esten
en mi pagina(si usara el mismo nombre)($_FILE[nombre])?
Título: Re: [DUDA][PHP] $_FILE[nombre][propiedad] devuelve un array
Publicado por: T. Collins en 18 Septiembre 2014, 13:45 PM
Esa variable se reinicia cada vez que mandas el formulario.
Solo se mandan los archivos del formulario en el que hagas submit.

http://php.net/manual/en/features.file-upload.multiple.php
Título: Re: [PROBLEMA][PHP] $_FILE[nombre] no esta cargado
Publicado por: MinusFour en 18 Septiembre 2014, 15:25 PM
Cita de: Effort en 18 Septiembre 2014, 12:58 PM
1. Se puede reiniciar esta variable?
2. En esta variable se almacenaran archivos solo de este formulario o de otros que esten
en mi pagina(si usara el mismo nombre)($_FILE[nombre])?

1. La variable depende del formulario que se envio en esa transacción. Si no se ha enviado nada entonces $FILE estasrá vacio durante la ejecución del script.

2. Tecnicamente todo se sube a upload_tmp_dir, lo necesitas mover a donde tu necesites después de haber sido subido.

http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir
Título: Re: [DUDA][PHP] $_FILE[nombre][propiedad] devuelve un array
Publicado por: LaThortilla (Effort) en 18 Septiembre 2014, 15:56 PM
Cita de: MinusFour en 18 Septiembre 2014, 15:25 PM
1. La variable depende del formulario que se envio en esa transacción. Si no se ha enviado nada entonces $FILE estasrá vacio durante la ejecución del script.

2. Tecnicamente todo se sube a upload_tmp_dir, lo necesitas mover a donde tu necesites después de haber sido subido.

http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir


Gracias compa, eso era lo que queria saber y  si, la razon por que devuelve un arra es esta:
Código (html4strict) [Seleccionar]
<input type="file" id="foto" name="foto_perfil_registro[]" required="true"/>
name="foto_perfil_registro[]" <------- por los corchetes al final del nombre...eso indica que es un array de archivos el que se sube pero dado que no es 'multiselect'(no recuerdo el nombre de la propiedad) solo se carga uno en el index 0.... eso es todo :D