Formulario que envíe imagen .jpg y datos
3 seguidores
Hola a tod@s:
puesto que no tengo ninguna experiencia con php, quisiera que desde mi web los usuarios pudieran rellenar un formulario y, a la vez, adjuntar una foto para que me llegue todo a mi correo, o bien al servidor de mi web.
Encontré en un foro unas pautas para crear un formulario y dos archivos php, pero no entiendo bien donde me equivoco o si hay soluciones diferentes para llegar al mismo resultado. Este es el enlace:
http://www.forosdelweb.com/f18/aporte-subir-imagen-con-php-568511/
Alguien me puede ayudar? Muchísimas gracias
Victor Moreno
Hola,
El fallo mas común en estos casos es no darle permisos al directorio, también he visto que el script no valida archivos jpg
" if($tipo == "gif" || $tipo == "pjpeg" || $tipo == "bmp") "
y el directorio que utiliza es uploaded.
Un saludo
Michaellaspalmas
Hola Andrea,
subir archivos (fotos, pdf, oloquesea) hay que hacer en unos pasos. Subir el archivo y guardarlo en en una carpeta en el sitio (no en bbdd) con un nombre aleatorio, guardar el nombre alet. en un bbdd. Controlar si el archivo es correcto (.jpg, .pdf, oloquesea,)y de tamaño adecuado. Nunca dejes un desconocido subir archivos .EXE.
IMPORTANTE: En el servidor web debe dársele permiso CHMOD 777 para poder subir archivos!!!!!!!!
Abajo ves un ejemplo para subir imagenes tipo jpeg, png ó gif con un peso max de 300 kb.
Insertar archivos desde formulario
El objeto es insertar un archivo (en este caso una imagen) en una carpeta del servidor y, al mismo tiempo, almacenar el nombre de la misma y extensión en una base de datos. Necesitaremos crear en el sitio la carpeta ‘img’ donde se guardarán las imágenes.
(IMPORTANTE: En el servidor web debe dársele permiso CHMOD 777)
1º.- Comenzamos, creando una base de datos y una tabla llamada “fotos” con los campos:
CREATE TABLE IF NOT EXISTS `fotos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fecha` date NOT NULL,
`alea` varchar(66) COLLATE utf8_spanish_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `alea` (`alea`)
)
2º.- Ahora crearemos la página en php que contendrá el formulario de envío de la imagen, que guardaremos con el nombre de form.php
<body onload="document.form1.reset();">
<form action="procesar.php" method="post" enctype="multipart/form-data" id="form1" name="form1">
<p>Archivo&nbsp;
<input type="file" name="foto" id="textfield" />
</p>
<p>
<input type="submit" name="button" id="button" value="Enviar" />
</p>
</form>
3º.- A continuación, la página que procesará el envío de la imagen a la carpeta de almacenamiento y su registro en la tabla fotos. Creamos una conexión a la base de datos… yo la he llamado conexión
<?php require_once("conexion/conexion.php");?>
<?php
$temp = $_FILES['foto']['tmp_name']; // tmp name (no se puede cambiar el nombre nos devuelve la ubicación temporal del archivo.
$name = $_FILES['foto']['name']; // nombre original del archivo
$tamanoBytes = $_FILES['foto']['size']; // En bytes
$tipoFile = $_FILES['foto']['type'];
// VALIDAR PESO DEL ARCHIVO. LIMITAR SUBIDA POR PESO
// LIMITAMOS A 300KB
$kiloBytes = $tamanoBytes/1024; // esto nos da la cantidad de kb
if($kiloBytes > 300){
echo "El archivo supera los 300 KB <br/>";
exit;
sleep(2);
}
// VALIDAR POR TIPO DE ARCHIVO.
// COMPROBAMOS LA EXTENSIÓN DEL ARCHIVO SÓLO ADMITIMOS JPH, GIF Y PNG
if($tipoFile == "image/jpeg" || $tipoFile == "image/gif" || $tipoFile == "image/png"){
echo "Es el tipo esperado <br/>";
}
else{
echo "Archivo no válido";
exit;
}
// LE ASIGNAMOS UN NOMBRE DE EXTENSIÓN A LOS ARCHIVOS GRÁFICOS
switch ($tipoFile)
{
case 'image/jpeg':
$ext = ".jpg";
break;
case 'image/gif':
$ext = ".gif";
break;
case 'image/png':
$ext = ".png";
break;
}
// VALOR ALEATORIO CON EL QUE SE ALMACENARÁ EL ARCHIVO
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
$cad = "";
// 18 ES EL LARGO DEL STRING RANDOM, ESTE SERÁ EL TAMAÑO DEL NOMBRE DEL ARCHIVO
for($i=0;$i<18;$i++) {
$cad .= substr($str,rand(0,62),1);
}
// REEMPLAZAR EN CASO DE NOMBRE COMPUESTOS LOS ESPACIOS POR GUIÓN BAJO
//$alea1 = str_replace(" ","_",$alea1);
$alea1 = $cad.$ext;
echo "Alea: " .$alea1 ."<br/>";
//copy($temp,$alea1);
$fecha = date("y-m-d");
// AHORA GUARDAMOS EL ARCHVO EN UNA BASE DE DATOS.
$sql ="insert into fotos values (null,'$fecha','$alea1')";
$conecta = mysql_select_db($bd,$con); // conecta a la base de datos
$result = mysql_query($sql);
// Podemos recuperar el último id guardado mediante
//echo "MYSQL: " .mysql_insert_id($con);
// Indicamos el directorio donde se guardará el archivo
$dir = "img/";
move_uploaded_file ($temp,"$dir/$alea1");
// LAS SIGUIENTES LÍNEAS NOS DAN LA INFORMACIÓN DE LO REALIZADO
echo "Esta es la exte: " .$ext ."<br/>";
echo "El archivo tienen como nombre: " .$name ."<br/>";
echo "El archivo en el servidor es temporal, como: " .$temp ."<br/>";
echo "El tamaño del archivo es: " .$tamanoBytes ."<br />";
echo "El tipo del archivo es: " .$tipoFile ."<br/>";
echo "El peso en KB es de: " .round($kiloBytes,2) ."Kb <br/>";
?>
// SE NOS MUESTRA LA IMAGEN
<img src="<?php echo "img/".$alea1; ?>" />
Un saludo