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:
$_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:
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:
<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
<?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...
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);
}
}
y el código que la almacena? en el codigo que publicaste no veo la linea que colocas en el titulo
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:is_uploaded_file($_FILES[$filename]["tmp_name"])
Perdón por mi ignorancia?
intenta colocarle al form el enctype
<form method="post" action="subir_imagen.php" onsubmit="return validacion(this)" enctype="multipart/form-data">
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 ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
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
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)
Aqui te pongo lo que imprime cada:
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]=>
string(0) ""
}
Cita de: Effort en 18 Septiembre 2014, 04:12 AM
Aqui te pongo lo que imprime cada:
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]=>
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.
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.
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:
$_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])?
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
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
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:
<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