Foro de elhacker.net

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
  1. $_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
  1. CREATE TABLE IF NOT EXISTS `IMG_PERFIL` (
  2.  `ID` SMALLINT(6) NOT NULL AUTO_INCREMENT,
  3.  `ANCHURA` SMALLINT(6) NOT NULL,
  4.  `ALTURA` SMALLINT(6) NOT NULL,
  5.  `TIPO` CHAR(15) NOT NULL,
  6.  `IMAGEN` mediumblob NOT NULL,
  7.  PRIMARY KEY  (`id`)
  8. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

El formulario:
Código
  1. <form method="post" action="subir_imagen.php" onsubmit="return validacion(this)">
  2.  
  3.       <label>Elige una fotografia tipo credencial(2MB max):</label>
  4.       <div id="frm-campo-image"></div>
  5.       <input type="hidden" name="MAX_FILE_SIZE" value="2400" />
  6.       <input type="file" id="foto" name="foto_perfil_registro[]" required="true"/>
  7.       <output id="list"></output>          
  8.        <input class="botton1" type="submit" value="Registrarse"/>
  9.  
  10. </form>

El archivo subir_imagen.php

Código
  1.  
  2.        <?php
  3.           $filename = "foto_perfil_registro";
  4.  
  5.  $link = new mysqli('localhost', 'base', '1234', 'tabla');
  6. //echo "<BR>".$_FILES[ $filename]["name"][0]; //nombre del archivo
  7. //echo "<BR>".$_FILES[ $filename]["type"][0]; //tipo
  8. //echo "<BR>".$_FILES[ $filename]["tmp_name"][0]; //nombre del archivo de la imagen temporal
  9. //echo "<BR>".$_FILES[ $filename]["size"][0]; //tamaño
  10. # Comprovamos que se haya subido un fichero
  11.  
  12.    if (is_uploaded_file($_FILES[$filename]["tmp_name"][0])) {
  13.        # Cogemos el formato de la imagen
  14.  
  15.           $filetype =$_FILES[$filename]["type"][0];
  16.  
  17.        if ( $filetype== "image/jpeg" || $filetype== "image/pjpeg" || $filetype == "image/gif" || $filetype == "image/bmp" || $filetype == "image/png") {
  18.            # Cogemos la anchura y altura de la imagen
  19.            $info = getimagesize($_FILES[$filename]["tmp_name"]);
  20.            echo "<BR>".$info[0]; //anchura
  21.            echo "<BR>".$info[1]; //altura
  22.            echo "<BR>".$info[2]; //1-GIF, 2-JPG, 3-PNG
  23.            echo "<BR>".$info[3]; //cadena de texto para el tag <img
  24.            #Obtenemos el contenido del archivo
  25.            $contetF = file_get_contents($_FILES[$filename]["tmp_name"]);
  26.            # Escapa caracteres especiales
  27.            $imagenEscapes = mysql_real_escape_string($contetF);
  28.            # Agregamos la imagen a la base de datos
  29.            $result = $link->query("INSERT INTO `IMG_PERFIL` (ANCHURA,ALTURA,TIPO,IMAGEN) VALUES (" . $info[0] . "," . $info[1] . ",'" . $_FILES[$filename]["type"] . "','" . $imagenEscapes . "')", $link);
  30.            # Cogemos el identificador con que se ha guardado
  31.             mysqli_close($link);
  32.  
  33.  
  34.            # Mostramos ela imagen agregada
  35.            //echo "Imagen agregada con el id ".$id."<BR>";
  36.            //echo "<img src='imagen_mostrar.php?id=".$id."' width='".$info[0]."' height='".$info[1]."'>";
  37.        }
  38.    }
  39.  
  40.        ?>

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

Código
  1. function handleFileSelect(evt) {
  2.            var files = evt.target.files; // FileList object
  3.            // Loop through the FileList and render image files as thumbnails.
  4.            for (var i = 0, f; f = files[i]; i++) {
  5.                //alert('archivo: ' + i);
  6.                // Only process image files.
  7.                if (!f.type.match('image.*')) {
  8.                    continue;
  9.                } else {
  10.                    document.getElementById('list').innerHTML = [''].join('');
  11.                }
  12.  
  13.                var reader = new FileReader();
  14.  
  15.                // Closure to capture the file information.
  16.                reader.onload = (function(theFile) {
  17.                    return function(e) {
  18.                        // Render thumbnail.
  19.  
  20.                        document.getElementById('list').innerHTML = ['<img id="form-foto" src="', e.target.result,
  21.                            '" title="', escape(theFile.name), '"/>'].join('');
  22.                    };
  23.                })(f);
  24.  
  25.                // Read in the image file as a data URL.
  26.                reader.readAsDataURL(f);
  27.            }
  28.        }


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
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
  1. 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
  1. <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
  1. echo $_FILES[ $filename]["name"]; //imprime  afas.jpg
  2. echo $_FILES[ $filename]["type"]; //imprime (nada)
  3. echo $_FILES[$filename]["tmp_name"]; //imprime (nada)
  4. echo $_FILES[ $filename]["size"]; //imprime (nada)
  5. echo $_FILES[ $filename]["error"]; //imprime 2
  6.  
  7.  
  8. Esto es lo que devuelve el var_dump($_FILES[$filename]["tmp_name"]):
  9. <br>array(1) {
  10.  [0]=&gt;
  11.  string(0) ""
  12.  
  13. }


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


Código
  1. echo $_FILES[ $filename]["name"]; //imprime  afas.jpg
  2. echo $_FILES[ $filename]["type"]; //imprime (nada)
  3. echo $_FILES[$filename]["tmp_name"]; //imprime (nada)
  4. echo $_FILES[ $filename]["size"]; //imprime (nada)
  5. echo $_FILES[ $filename]["error"]; //imprime 2
  6.  
  7.  
  8. Esto es lo que devuelve el var_dump($_FILES[$filename]["tmp_name"]):
  9. <br>array(1) {
  10.  [0]=&gt;
  11.  string(0) ""
  12.  
  13. }


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
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
  1. $_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
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
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
  1. <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