Foros del Web » Programando para Internet » PHP »

Enviar adjunto en formulario

Estas en el tema de Enviar adjunto en formulario en el foro de PHP en Foros del Web. Buenas. Pues llevo todo el día peleándome para adjuntar una imagen a un formulario y luego enviarlo a otra pagina, visualizarlo en esa pagina y ...
  #1 (permalink)  
Antiguo 14/02/2012, 11:32
 
Fecha de Ingreso: febrero-2012
Mensajes: 49
Antigüedad: 12 años, 2 meses
Puntos: 3
Enviar adjunto en formulario

Buenas.
Pues llevo todo el día peleándome para adjuntar una imagen a un formulario y luego enviarlo a otra pagina, visualizarlo en esa pagina y mandarlo por email. Me resulta complicado entender como funciona, si me pudierais echar una mano..

//Este es el formulario
<form id="formulario" name="formulario" onsubmit="return validar()" method="post" action="recoger_form1.php" enctype="multipart/form-data">

//Campo adjunto del formulario
<label for="adjunto">Adjuntar imagen</label><br>
<input type="file" name="adjunto" size="10"/>

//Para mostrarlo en una tabla, en 'recoger_form1', había pensado algo así
<th><strong> ARCHIVO </strong></th>
<th><?php echo $adjunto=$_FILES['adjunto']?></th>

--------------------- Hasta aquí sería para mostrar la imagen en la pagina recoger_form1

//Y ahora necesito saber como enviar todos los campos del form incluido el adjunto por mail. Esto es lo que tengo:

<?php
// Campos del formulario
$nombre=$_POST['nombre'];
$apellidos=$_POST['apellidos'];
$email=$_POST['email'];
$sexo=$_POST['sexo'];
$edad=$_POST['edad'];
$adjunto=$_FILES['adjunto']['adjunto'];
$notificacion=$_POST['notificacion'];
// Creamos las variables del mensaje
$mensaje .="Hemos recibido su mensaje satisfactoriamente, sus datos son: ";
$mensaje .=" Nombre: " .$nombre;
$mensaje .=" Apellidos: " .$apellidos;
$mensaje .=" Email: ".$email;
$mensaje .=" Sexo: " .$sexo;
$mensaje .=" Edad: " .$edad;
$mensaje .=" Archivo adjunto: " .$adjunto;
$mensaje .=" Notificacion " .$notificacion;
// receptor del mensaje
$receptor= $email;
// asunto del mensaje
$asunto="Envio de FORM";
// emisor del mensaje
$emisor = "From:[email protected]";
// envio email
mail($receptor, $asunto, $mensaje, $emisor);
?>

El caso es que todos los campos del form me llegan perfectamente al mail escepto el archivo adjunto que ya no sé que hacer... ¿alguna solución para cualquiera de los dos problemas?
Muchas gracias
  #2 (permalink)  
Antiguo 14/02/2012, 13:25
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Enviar adjunto en formulario

No tiene nada que ver subir un archivo al servidor con enviarlo por correo.
Para subir el archivo utiliza un formulario multipart como haces ahora.
Para adjuntarlo a un mail tendrás que agregar cabeceras y dar la ruta al archivo que has subido y guardado en el servidor. Consulta en el manual la función mail().
S2!
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 15/02/2012, 03:39
 
Fecha de Ingreso: febrero-2012
Mensajes: 49
Antigüedad: 12 años, 2 meses
Puntos: 3
Respuesta: Enviar adjunto en formulario

pff ya no sé que hacer :( me estuve peleando ayer media tarde y hoy 2 horas.. Ahora mismo sólo me interesa mandar la imagen adjunta de 'ejercicio_form1' a 'recoger_form1' y mostrarla aquí al final de la tabla...
Después de cambiar las cosas de sitio volví al inicio pq seguía sin funcionar.. El caso es que los ejemplos que vi por inet son para enviar por mail, y de momento sólo quiero mostrarlo en otra página sin enviarlo a ningún sitio...

//FORM
<form id="formulario" name="formulario" onsubmit="return validar()" method="post" action="recoger_form1.php" enctype="multipart/form-data">

// Adjunto archivo..
<br>
<label for="adjunto">Adjuntar imagen</label><br>
<input type="file" name="adjunto" size=13/>
<br>

//Muestro en 'recoger_form1' al final de la tabla... pero no muestra nada
<tr>
<th><strong> ADJUNTO </strong></th>
<th><?php echo "".$adjunto=$_FILES['adjunto']."";?></th>
</tr>
</table>
</body>
</html>

Si alguién me puede guiar un poco se lo agradezco..
  #4 (permalink)  
Antiguo 15/02/2012, 04:10
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Enviar adjunto en formulario

Subes el archivo al servidor, lo guardas, y en la página que quieras lo muestras con una etiqueta img. No puedes mostrar una imagen al mismo tiempo que la subes.
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 15/02/2012, 06:19
 
Fecha de Ingreso: febrero-2012
Mensajes: 49
Antigüedad: 12 años, 2 meses
Puntos: 3
Respuesta: Enviar adjunto en formulario

Gracias, la primera parte ya está, he subido el archivo y se me muestra en la 2º página, pff lo que me ha costado... :P

Ahora a pelearme para que aparte de mostrarlo en la 2º página, lo envíe por mail...
  #6 (permalink)  
Antiguo 15/02/2012, 13:35
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Enviar adjunto en formulario

No te compliques la vida con enviar mails, utiliza la librería phpmailer desde el principio.
Saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #7 (permalink)  
Antiguo 15/02/2012, 15:20
 
Fecha de Ingreso: febrero-2012
Mensajes: 5
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Enviar adjunto en formulario

Buenas os pongo un código por si os vale, de la forma para subir un fichero a un ftp, lo estoy intentando integrar en un formulario pero no me acaba de salir:

<?php
if (is_uploaded_file($HTTP_POST_FILES['im']['tmp_name']) )
{
//recojo la imagen
$imagen = $HTTP_POST_FILES['im']['name'];
//Obtengo el nombre de la imagen y la extensión de la foto
$imagen1 = explode(".",$imagen);
//Genero un nombre aleatorio con números y se asigno la extensión botenido anteriormente
$imagen2 = rand(0,9).rand(100,9999).rand(100,9999).".".$image n1[1];
//Coloco la iamgen del usuario en la carpeta correspondiente con el nuevo nombre
move_uploaded_file($HTTP_POST_FILES['im']['tmp_name'], "banners/".$imagen);
//Asigno a la foto permisos
$ruta="direcctorio/".$imagen;
chmod($ruta,0777);
//A partir de aqui sólo si quiero eliminar una foto
//$resultArchivos = mysql_query("Selecciono el nombre de la foto antigua");
//$rowArchivos= mysql_fetch_array($resultArchivos);
//unlink("carpeta/".$rowArchivos[0]);
echo "<br /><br /><b><span class='rojo'>Tu nueva imagen ha sido subida.</span></b>";

}
?>
<link href="estilo.css" rel="stylesheet" type="text/css">
<body background="images/Fondo.png">

<h1>Seleccione su nueva imagen.</h1>

<form method='post' action='imagen.php' enctype='multipart/form-data'>

<input name='im' type='file' /><br><br>

<input name='enviar' type='submit' value='Subir Imagen' />
<input name='limpiar' type='reset' value='Limpiar' />
</form></center>
  #8 (permalink)  
Antiguo 15/02/2012, 16:40
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Enviar adjunto en formulario

@Arraymoon Tal como te indico @repara2 usa PHPMailer, ya que si se te complico subir la imagen (que es lo mas sencillo) no veo lo que vas a estar peleando con adjuntar un archivo a un email usando la función mail()

@redfalconland sin ofender pero tu código esta pésimo, $HTTP_POST_VARS es obsoleto desde la versión 4.1.x y luego asignar permisos 777 a los archivos subidos es un suicidio!!! jamas debes darle dichos permisos a archivos que suben los usuarios
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #9 (permalink)  
Antiguo 16/02/2012, 04:26
 
Fecha de Ingreso: febrero-2012
Mensajes: 49
Antigüedad: 12 años, 2 meses
Puntos: 3
Respuesta: Enviar adjunto en formulario

Listo, muchas gracias por las respuestas, ya está todo funcionando OK. Lo de subir la imagen al servidor era una chorrada monumental, pero estaba bloqueado en aquel momento :P
Ahora ya está todo funcionando y enviando al mail con adjuntos.
Muchísimas gracias por vuestra ayuda ;)
  #10 (permalink)  
Antiguo 16/02/2012, 10:51
 
Fecha de Ingreso: febrero-2012
Mensajes: 5
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Enviar adjunto en formulario

Cita:
Iniciado por Nemutagk Ver Mensaje

@redfalconland sin ofender pero tu código esta pésimo, $HTTP_POST_VARS es obsoleto desde la versión 4.1.x y luego asignar permisos 777 a los archivos subidos es un suicidio!!! jamas debes darle dichos permisos a archivos que suben los usuarios

Hola Nemutagk, ok no te preocupes, de estas cosas se aprende tambien, lo tendre en cuenta.
Saludos.
  #11 (permalink)  
Antiguo 16/02/2012, 10:53
 
Fecha de Ingreso: febrero-2012
Mensajes: 5
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Enviar adjunto en formulario

Cita:
Iniciado por Arraymoon Ver Mensaje
Listo, muchas gracias por las respuestas, ya está todo funcionando OK. Lo de subir la imagen al servidor era una chorrada monumental, pero estaba bloqueado en aquel momento :P
Ahora ya está todo funcionando y enviando al mail con adjuntos.
Muchísimas gracias por vuestra ayuda ;)
Hola Arraymoon, al final como lo has solucionado?
Si quieres pásanos el código insertarlo (no con lo mismo que tu claro, je je), al mio, asi practico los ficheros adjuntos que no me acaba de salir.
Saludos y gracias.
  #12 (permalink)  
Antiguo 16/02/2012, 12:05
 
Fecha de Ingreso: febrero-2012
Mensajes: 49
Antigüedad: 12 años, 2 meses
Puntos: 3
Respuesta: Enviar adjunto en formulario

Qué es lo que quieres concretamente, adjuntar archivos para enviar por mail ?
  #13 (permalink)  
Antiguo 16/02/2012, 12:08
 
Fecha de Ingreso: febrero-2012
Mensajes: 49
Antigüedad: 12 años, 2 meses
Puntos: 3
Respuesta: Enviar adjunto en formulario

Copia y pega tal cual, Solo modifica arriba el campo $adjunto= y declara por algun lado el campo $de y $para. Suerte :)

function form_mail($para, $asunto, $mensaje, $de)
{
$ficheros = 0;
$cabecera = "";
$adjuntos = "";
$asunto = "ASUNTO EMAIL";

if ($de)$cabecera = "From:".$de."n";
else $cabeceras = "";
$cabeceras .= "MIME-version: 1.0\n";
foreach ($_POST as $nombre => $valor)
$mensaje = $mensaje."\n".$nombre." = ".$valor;

foreach ($_FILES as $adjunto)
{
if ($ficheros == 0)
{
$ficheros = 1;
$cabeceras .= "Content-type: multipart/mixed;";
$cabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";

$cabeceratexto = "----_Separador-de-mensajes_--\n";
$cabeceratexto .= "Content-type: text/plain;charset=iso-8859-1\n";
$cabeceratexto .= "Content-transfer-encoding: 7BIT\n";

$mensaje = $cabeceratexto.$mensaje;
}
if ($adjunto["size"] > 0)
{
$adjuntos .= "\n\n----_Separador-de-mensajes_--\n";
$adjuntos .= "Content-type: ".$adjunto["type"].";name=\"".$adjunto["name"]."\"\n";;
$adjuntos .= "Content-Transfer-Encoding: BASE64\n";
$adjuntos .= "Content-disposition: attachment;filename=\"".$adjunto["name"]."\"\n\n";

$fichero = fopen($adjunto["tmp_name"], 'r');
$contenido = fread($fichero, filesize($adjunto["tmp_name"]));
$adjuntos .= chunk_split(base64_encode($contenido));
fclose($fichero);
}
}
if ($ficheros)
$mensaje .= $adjuntos."\n\n----_Separador-de-mensajes_----\n";
return(mail($para, $asunto, $mensaje, $cabeceras));
}
  #14 (permalink)  
Antiguo 16/02/2012, 14:49
 
Fecha de Ingreso: febrero-2012
Mensajes: 5
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Enviar adjunto en formulario

Cita:
Iniciado por Arraymoon Ver Mensaje
Qué es lo que quieres concretamente, adjuntar archivos para enviar por mail ?
Asi es, pero lo que hay en tu post anterior es solo el php, y el html?
Saludos y gracias.

Última edición por redfalconland; 16/02/2012 a las 14:55
  #15 (permalink)  
Antiguo 17/02/2012, 02:14
 
Fecha de Ingreso: febrero-2012
Mensajes: 49
Antigüedad: 12 años, 2 meses
Puntos: 3
Respuesta: Enviar adjunto en formulario

ESTE ES EL FORMULARIO CREADO EN HTML, en el mensaje anterior te deje el php que procesa la información y envía el mail. FIjate que aqui en la etiqueta form tengo puesto ACTION=RECOGER_FORM1.PHP, eso quiere decir que el proceso php lo hago en ese archivo, si lo que quieres es hacer todo en el mismo quitale el action y pon el php y html en el mismo archivo. :) más no te puedo ayudar pq estoy pez con php aún XD
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="shortcut icon" href="http://www.soloiconos.net/archivos/profesiones/29.gif" type="image/png">
<title> Formulario </title>
</head>
<body>

<!-- FORMULARIO -->
<form id="formulario" name="formulario" onsubmit="return validar()" method="post" action="recoger_form1.php" enctype="multipart/form-data">
<h4>FORMULARIO DE ENVÍO DE EMAIL</h4>
<label for="nombre"> Nombre &nbsp;&nbsp;&nbsp;</label>
<input id="nombre" type="text" name="nombre" size="15" id="nombre"/>
<br>
<label for="apellidos"> Apellidos &nbsp;</label>
<input id="apellidos" type="text" name="apellidos" size="15" id="apellidos"/>
<br>
<label for="email"> @Email &nbsp;&nbsp;&nbsp;&nbsp;</label>
<input id="email" type="text" name="email" size="15" id="email"/>
<br>
------------------------------------------------------
<br>
<label for="sexo">Sexo</label>
<br>
<input type="radio" name="sexo" value="hombre" checked="checked">Hombre
<br>
<input type="radio" name="sexo" value="mujer">Mujer
<br>
<br>
<label for="edad">Edad</label>&nbsp;
<select id="edad" name="edad">
<?php
for ($i=1;$i<100;$i++)
{
echo "<option>$i</option>";
}
?>
</select>
<br>
------------------------------------------------------
<br>
<label for="adjunto">Adjuntar imagen</label><br>
<input type="file" name="adjunto" size=10/>
<br>
------------------------------------------------------
<br>
Quiero Recibir Notificaciones <input type="checkbox" name="notificacion" value=" Acepto recibir notificaciones"/>
<br>
------------------------------------------------------
<br>
<input type="submit" value="Enviar FORM"> &nbsp;&nbsp;||&nbsp;&nbsp;
<input type="reset" value="Limpiar FORM"/>
<br>
------------------------------------------------------
<!-- FIN DEL FORMULARIO -->
</form>
</body>
</html>
  #16 (permalink)  
Antiguo 17/02/2012, 09:00
 
Fecha de Ingreso: febrero-2012
Mensajes: 5
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Enviar adjunto en formulario

Muchas gracias Arraymoon, cuando tenga un ratito me pongo con ello.
Saludos.

Etiquetas: formulario, tabla, adjuntos, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:31.