Formularios con fotos en php

Mi pregunta es como se hace para que el usuario pueda enviar fotos a mi casilla de e-mail desde el formulario de una página web.
La página esta hecha en html y el formulario en php.
lapagina es www.billarjuvenil.com.ar
Agradeceria el codigo fuente asi lo agrego y listo y depaso ya lo tengo .
1

1 Respuesta

2.225 pts. Programación web php, asp, javascript, java, cgi, perl,...
Te daré el código fuente que necesitas pero obviamente tu tendrás que hacer la implantación y adaptación... estando o no de acuerdo... ahí voy.
Mi primera sugerencia es que guardes las imágenes en una carpeta de tu sitio de esa manera después puedes usarlas en tu página sin necesidad de subirlas de nueva cuenta, ademas que de esa forma puedes limitar el tamaño de la imagen y claro no saturar tu correo.
Primera clase que necesitas (php Upload):
<?php
//----------------------------------------------------------------------------------------------------------CLASE
class FileUpLoad {
//------------------------------------------------------PROPIEDADES
var $directorio;
var $nombre_archivo;
var $repetido;
var $tipos_validos;
var $crea_direcotorios;
var $permisos_direcotorios;
var $max_weight;
var $min_weight;
var $errores;
//------------------------------------------------------METODO
function InicializaErrores() {
$this->errores = '';
}
//------------------------------------------------------METODO
function AgregaError($error) {
$this->errores .= $error;
}
//------------------------------------------------------METODO
//Basado en el script encontrado en php.net en la función con cabecera (andrei at bizland dot ro 24-Oct-2004 06:33)
function CreaDirectorioRecursivo($dir, $permisos) {
if (file_exists($dir)) return false;
preg_match_all('/([^\/]*)\/?/i', $dir, $atmp);
$base = '';
foreach ($atmp[0] as $directorio) {
$base .= $directorio;
if((!file_exists($base)) && (!mkdir($base, $permisos))) return false;
}
return false;
}
//------------------------------------------------------METODO
function ExisteArchivo($nombre_archivo) {
if($this->nombre_archivo) $nombre_archivo = $this->nombre_archivo;
switch($this->repetido) {
//sobreescribir
case 1: {
$this->nombre_archivo = $nombre_archivo;
break;
}
//copiar con nuevo nombre
case 2: {
$array_partes = explode('.', $nombre_archivo);
if((count($array_partes)) > 1) {
$extension = '.' . implode('.', array_slice($array_partes, 1));
$nombre = $array_partes[0];
}
else {
$extension = '';
$nombre = $nombre_archivo;
}
$nombre_temp = $nombre . $extension;
$i = 0;
while(file_exists($this->directorio . $nombre_temp)) {
$nombre_temp = $nombre . '_' . $i . $extension;
$i++;
}
$this->nombre_archivo = $nombre_temp;
break;
}
//abortar si el fichero existe
default : {
if(file_exists($this->directorio . $nombre_archivo)) return false;
return true;
break;
}
}
return true;
}
//------------------------------------------------------METODO
function CrearDirectorios($permisos = 0777) {
$this->crea_direcotorios = true;
$this->permisos_directorios = $permisos;
return true;
}
//------------------------------------------------------METODO
function NombreDeArchivo($nombre) {
$this->nombre_archivo = $nombre;
return true;
}
//------------------------------------------------------METODO
function TiposValidos($array_tipos) {
if(is_array($array_tipos)) $this->tipos_validos = $array_tipos;
return false;
}
//------------------------------------------------------METODO
function PesoMaximo($peso) {
$this->max_weight = $peso * 1024;
return true;
}
//------------------------------------------------------METODO
function PesoMinimo($peso) {
$this->min_weight = $peso * 1024;
return true;
}
//------------------------------------------------------METODO
function SiArchivoExiste($repetido) {
$this->repetido = $repetido;
return true;
}
//------------------------------------------------------METODO
function EstableceDirectorio($dir) {
//Si no existe el directorio, deseamos crearlo, y lo creamos satisfactoriamente, o si el directorio existe y es escribible
if(((!file_exists($dir)) && ($this->crea_direcotorios == 1) && ($this->CreaDirectorioRecursivo($dir, 0777))) || ((is_dir($dir)) && (is_writable($dir)))) {
$this->directorio = $dir;
}
return true;
}
//------------------------------------------------------METODO
function Subir($form_file_name, $permisos = 0775, $nombre = '') {
$this->InicializaErrores();
if(!empty($nombre)) $this->NombreDeArchivo($nombre);
if(!isset($_FILES[$form_file_name])) {
$this->AgregaError('No se ha recibido ningún archivo.<br>');
}
if(!$this->ExisteArchivo($_FILES[$form_file_name]['name'])) {
$this->AgregaError('El archivo ya existe y no está habilitada la opción de sobreescribir.<br>');
}
if($_FILES[$form_file_name]['error'] != 0) {
$this->AgregaError('El archivo no se ha recibido correctamente.<br>');
}
if(!$this->directorio) {
$this->AgregaError('No tiene permisos para escribir en el directorio seleccionado o para crearlo.<br>');
}
if(($this->min_weight) && ($_FILES[$form_file_name]['size'] < $this->min_weight)) {
$this->AgregaError('El tamaño del archivo no supera el mínimo permitido.<br>');
}
if(($this->max_weight) && ($_FILES[$form_file_name]['size'] > $this->max_weight)) {
$this->AgregaError('El tamaño del archivo es superior al máximo permitido.<br>');
}
if(($this->tipos_validos) && (!in_array($_FILES[$form_file_name]['type'], $this->tipos_validos))) {
$this->AgregaError('El tipo de archivo enviado no es válido.<br>');
//print_r ($_FILES); // Cuando haya error descomentar
}
if((empty($this->errores)) && (!copy($_FILES[$form_file_name]['tmp_name'], $this->directorio . $this->nombre_archivo))) {
$this->AgregaError('No se ha podido subir el archivo, revise los errores previos.<br>');
}
if(!empty($this->errores)) return $this->errores;
chmod($this->directorio . $this->nombre_archivo, $permisos);
return true;
}
}
?>
Esta clase es una de las más completas que hay para subir archivos.
============================
La forma en la que yo pediría la foto es poniendo un campo dentro del formulario con una imagen, al dar clic sobre esa imagen se abre un pop-up que es donde el usuario selecciona la imagen y la sube al servidor. Estos campos deberían incluirse en el formulario.
<img src="" alt="Clic Aqui" width="350" height="200" onclick="javascript:window.open('inserta_thumb.php', 'InsertTH', 'history=no,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=no,resizable=no,width=360,height=200');" name="img_th" id="img_th" />
<input name="imagen_th" type="hidden" id="imagen_th" value=""/>
Esta imagen servirá también para que una vez que la imagen este en el servidor el usuario pueda ver su imagen en miniatura.
Este puede ser un ejemplo del pop-up:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><? echo $titulo_pagina; ?></title>
</head>
<body>
<form action="enviarth.php" method="post" ENCTYPE="multipart/form-data" name="Feditorial" >
<label>
<div align="center">
<p><strong>Insertar Imagen </strong></p>
<p align="center">
<input type="file" name="archivo" size="20" />
<br />
</p>
</div>
</label>
<div align="center">
<input name="enviar" value="Subir Imagen" type="submit" />
</div>
</form>
</body>
</html>
y luego viene el html de envio.php la pagina que guarda el archivo.
<?php
include('../../scripts/class.FileUpload.php');
//declaramos la clase
$obj_1 = new FileUpLoad;
//añadirmos la opción para la creación de directorios
//especificando los permisos que le asignaremos
$obj_1->CrearDirectorios(0775);
//establecemos el directorio dónde subiremos las fotos
//damos por hecho que la variable $id ya la habíamos obtenido previamente
$obj_1->EstableceDirectorio('/imagenes');
//en el caso de que el archivo exita lo reombramos
$obj_1->SiArchivoExiste(2);
//declaramos los tipos válidos, en nuestro caso para una galería
$tipos_validos[] = 'image/jpeg';
$tipos_validos[] = 'image/bmp';
$tipos_validos[] = 'image/gif';
$tipos_validos[] = 'image/ief';
$tipos_validos[] = 'image/jpeg';
$tipos_validos[] = 'image/png';
$tipos_validos[] = 'image/tiff';
$tipos_validos[] = 'image/x-cmu-raster';
$tipos_validos[] = 'image/x-portable-anymap';
$tipos_validos[] = 'image/x-portable-bitmap';
$tipos_validos[] = 'image/x-portable-graymap';
$tipos_validos[] = 'image/x-portable-pixmap';
$tipos_validos[] = 'image/x-rgb';
$tipos_validos[] = 'image/x-xbitmap';
$tipos_validos[] = 'image/x-xpixmap';
$tipos_validos[] = 'image/x-xwindowdump';
$tipos_validos[] = 'image/x-png';
$tipos_validos[] = 'image/pjpeg';
// $tipos_validos[] = 'image/png';
// $tipos_validos[] = 'image/gif';
//asignamos los tipos válidos
$obj_1->TiposValidos($tipos_validos);
//declaramos los tamaños mayor y menor (en kb) para cada archivo a subir
$obj_1->PesoMaximo(1000);
$obj_1->PesoMinimo(5);
//si el archivo no es subido correctamente
if($obj_1->Subir('archivo', 0744) !== true) {
//mostramos los errores
$errores .= $obj_1->errores;
}
else {
//si todo hay ido bien, mostramos un mensaje de satisfacción
$errores .= 'El archivo ha sido subido correctamente al directorio '.$obj_1->directorio.' con el nombre '.$obj_1->nombre_archivo.'.<br />';
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title><? echo $titulo_pagina; ?></title>
</head>
<body onLoad="javascript: window.opener.document.getElementById('img_th').src='<? echo $site.$http."thumbails/".$nombre_archiv; ?>'; window.opener.document.getElementById('imagen_th').value='<? echo $nombre_archiv; ?>'; self.close();"><div align="center">
<span class="style1"><?php echo $errores; ?></span><br>
<br>
<input name="cerrar" type="button" value="Cerrar ventana" onclick="javascript:javascript: window.opener.document.getElementById('img_th').src='<? echo $site.$http."thumbails/".$nombre_archiv; ?>'; window.opener.document.getElementById('imagen_th').value='<? echo $nombre_archiv; ?>'; self.close();" ></div>
</body>
</html>
Este antes de cerrarse lo que hace es enviar el nombre del archivo al campo oculto y enviar el nombre de la imagen al recuadro de imagen.
Una vez que tenemos la imagen en el servidor y el nombre de la imagen en el formulario solo nos queda, crear el email en formato html e incluir la imagen.
Supondré que esa parte de cómo generar correos con html la conoces si no la conoces entonces complementa tu pregunta y te explico un poco.
Solo necesitas insertar una linea de image <img src=?http://tusitio.com/imagenes/imagen.jpg?> de esta forma el email no pesara mas por la imagen adjunta ya que ira a buscarla al servidor cuando tu abras el email, y todo sera mas ligero. Ademas podrias guardar la descripción en una base de datos o que se yo las posibilidades son muchas. Aquí depende de tu tiempo y las ganas que le pongas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas