[SOLUCIONADO][PHP] $_FILE[nombre][propiedad] devuelve un array

Iniciado por LaThortilla (Effort), 18 Septiembre 2014, 03:14 AM

0 Miembros y 1 Visitante están viendo este tema.

LaThortilla (Effort)

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);
           }
       }

engel lex

 y el código que la almacena? en el codigo que publicaste no veo la linea que colocas en el titulo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

LaThortilla (Effort)

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?

engel lex

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">
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

LaThortilla (Effort)

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 ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)

LaThortilla (Effort)

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

engel lex

#6
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)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

LaThortilla (Effort)

#7
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) ""

}


LaThortilla (Effort)

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.

MinusFour

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.