Foros del Web » Programando para Internet » PHP »

Una soga porfavor. Enviando adjuntos en mi formulario.

Estas en el tema de Una soga porfavor. Enviando adjuntos en mi formulario. en el foro de PHP en Foros del Web. Buenas tardes a todos. Estuve PARTIÉNDOME la cabeza intentando "agregar" un apartado para adjuntar un archivo y que éste me llegue a la casilla de ...
  #1 (permalink)  
Antiguo 11/05/2011, 13:35
 
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años, 1 mes
Puntos: 0
Una soga porfavor. Enviando adjuntos en mi formulario.

Buenas tardes a todos.

Estuve PARTIÉNDOME la cabeza intentando "agregar" un apartado para adjuntar un archivo y que éste me llegue a la casilla de correo donde llega el mensaje como un archivo adjunto.

La idea es que una persona cualquiera pueda contactar con mi empresa. Vendemos muchos productos con características muy particulares (que no vienen al caso) y por lo general antes de comprarnos tienen que saber con demasiada exactitud qué es lo que necesitan, entonces cree este apartado de contacto para evacuar sus dudas y nos sería de gran utilidad que nuestros clientes puedan enviarnos archivos de word o imágenes que les facilite tanto a ellos como a nosotros saber qué es lo que necesitan para poder brindarles el producto mas adecuado.

Intente de 4 millones de formas y no pude lograr "añadirle" ese lugarcito para poner un adjunto (en realidad dentro del formulario logre que aparezca el cuadro para incluir un archivo y se puede seleccionar perfectamente cualquier tipo de archivo, pero cuando me auto envío un mail de prueba es como si nunca hubiese puesto nada en ese cuadro para adjuntos .. osea no me llega el adjunto)

Les dejo el código que uso para mi formulario:


Código:
<?php
			session_start();
                 $error    = ''; // mensaje de error
                 $name     = ''; // nombre del remitente
                 $email    = ''; // direccion de correo del remitente
				 $empresa    = ''; // empresa del remitente
				 $telefono    = ''; // teléfono del remitente
                 $subject  = ''; // asunto
                 $message  = ''; // mensaje
				
            if(isset($_POST['send']))
            {
                 $name     = $_POST['name'];
                 $email    = $_POST['email'];
				 $empresa  = $_POST['empresa'];
				 $telefono  = $_POST['telefono'];
                 $subject  = $_POST['subject'];
                 $message  = $_POST['message'];

                if(trim($name) == '')
                {
                    $error = '<div class="errormsg">Ingrese su nombre.</div>';
                }
            	    else if(trim($email) == '')
                {
                    $error = '<div class="errormsg">Ingrese su dirección de correo</div>';
                }
                else if(!isEmail($email))
                {
                    $error = '<div class="errormsg">La dirección de correo ingresada no es válida.</div>';
                }
            	    if(trim($subject) == '')
                {
                    $error = '<div class="errormsg">Ingrese un asunto.</div>';
                }
            	else if(trim($message) == '')
                {
                    $error = '<div class="errormsg">Ingrese un mensaje</div>';
				}
				if(empty($_SESSION['6_letters_code'] ) ||
    strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0)
  {
      //Note: the captcha code is compared case insensitively.
      //if you want case sensitive match, update the check above to
      // strcmp()
    $error = '<div class="errormsg">El código de verificación no es correcto</div>';
  }
                
                if($error == '')
                {
                    if(get_magic_quotes_gpc())
                    {
                        $message = stripslashes($message);
                    }


                    $to      = "aca tengo el mail donde me llega el formulario";



                    $subject = 'Desde [www.miweb.com xD] : ' . $subject;

                    $msg     = "Emisor : $name \r\ne-Mail : $email \r\nEmpresa : $empresa \r\nTeléfono : $telefono \r\nAsunto : $subject \r\n\n" . "Mensaje : \r\n$message";

                    mail($to, $subject, $msg, "Emisor: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n");
            ?>
Ahora les dejo el formulario:

Código:
<form  method="post" name="contFrm" id="contFrm" action="">


                      <p>
                        <label><span class="required">*</span> Nombre:</label>
                        <input name="name" type="text" class="box" id="name" size="30" value="<?=$name;?>" />
                        
                        <label><span class="required">*</span> E-mail: </label>
                        <input name="email" type="text" class="box" id="email" size="30" value="<?=$email;?>" />
                        <label>&nbsp;&nbsp;Empresa: </label>
                        <input name="empresa" type="text" class="box" id="empresa" size="30" value="<?=$empresa;?>" />
                        <label>&nbsp;&nbsp;Teléfono: </label>
                        <input name="telefono" type="text" class="box" id="telefono" size="30" value="<?=$telefono;?>" />
                        
                        <label><span class="required">*</span> Asunto: </label>
                        <input name="subject" type="text" class="box" id="subject" size="30" value="<?=$subject;?>" />
                        
                        <label><span class="required">*</span> Mensaje: </label>
              <textarea name="message" cols="40" rows="3"  id="message"><?=$message;?></textarea>
                      <p>
                      <img src="captcha_code_file.php?rand=<?php echo rand(); ?>" id='captchaimg' ><br>
<label for='message'><span class="required">*</span>Ingrese el código:</label>
<input id="6_letters_code" name="6_letters_code" type="text" />
<br><br>
No puede ver bien la imagen? Haga clic <a href='javascript: refreshCaptcha();'>AQUÍ</a>      
                        para mostrar una nueva              </p>
                      <p>
                        <!-- Submit Button-->
                        
                        <input name="send" type="submit" class="button" id="send" value="" /> 
                      </p>
              </p>
              <p>&nbsp;</p>
            <p style="text-align:center;">&nbsp;</p></form>
Teniendo un formulario de este estilo puedo "añadirle" la sección para adjuntar un archivo ?.

Lo que probé es poner donde dice "form method ..... agrege el enctype="multiform......."

Después debajo del cuadro donde se coloca el mensaje agregue otro label con input type = file

Ahi logre que aparezca el cuadro .. y despues buscando por google hice las mil y una .. probe con phpmailer y no tuve resultados y con otros metodos que lei x ahi .. pero no pude adaptar mi formulario por mas que lo intente de 1000 formas ...

Alguno tiene alguna sugerencia o idea de porque no me llega el adjunto ?.

Saludos.
  #2 (permalink)  
Antiguo 11/05/2011, 14:01
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Una soga porfavor. Enviando adjuntos en mi formulario.

Primero estas enviando con mail(); de php y esta funcion no envía adjuntos o al menos yo nunca he podido, lo que puedes hacer es enviar un link con la referencia del archivo que se aloja en tu servidor por ejemplo http://www.tudominio.com/archivo.php?archivo=2345.docx por decir algo no se si me explique, ahora bien para lograr enviar un adjunto directo al correo tendrias que usar una clase como phpmailer que esta si permite enviar datos adjuntos ya que esta autenticada con una cuenta real de mail.
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 11/05/2011, 14:08
 
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Una soga porfavor. Enviando adjuntos en mi formulario.

Cita:
Iniciado por kaninox Ver Mensaje
Primero estas enviando con mail(); de php y esta funcion no envía adjuntos o al menos yo nunca he podido, lo que puedes hacer es enviar un link con la referencia del archivo que se aloja en tu servidor por ejemplo [url]http://www.tudominio.com/archivo.php?archivo=2345.docx[/url] por decir algo no se si me explique, ahora bien para lograr enviar un adjunto directo al correo tendrias que usar una clase como phpmailer que esta si permite enviar datos adjuntos ya que esta autenticada con una cuenta real de mail.
Leyendo tus consejos entonces lo que debería hacer es... descargarme la librería

class.phpmailer.php y hacer un $mail = new phpmailer ?

Pero qué hago con la función mail(); ? No soy 100% experto en el tema puesto

que todo lo que aprendí fue solo desde internet mirando ejemplos de otros xD

pero yo quisiera saber si yo elimino la función mail y empiezo a usar phpmailer

puedo a la vez validar los campos como tengo hecho ? Osea que si dejan en

blanco uno o más campos obligatorios o si introducen erróneamente el código

captcha aparezca el mensaje de error.

Yo quiero mantener el aspecto actual del formulario y que se validen todos los

campos que ingresan los posibles clientes y en caso de ser un campo obligatorio

no permita el envío de mail si se deja en blanco.

Perdona por la ignorancia y gracias por darte 5 minutos para responderme.
  #4 (permalink)  
Antiguo 11/05/2011, 14:22
Avatar de _-ZeuS-_  
Fecha de Ingreso: junio-2007
Ubicación: Quito, Ecuador! ;)
Mensajes: 100
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: Una soga porfavor. Enviando adjuntos en mi formulario.

Tú problema es bastante simple agrega esto en la etiqueta form:
Código:
ENCTYPE="multipart/form-data
pones la etiqueta <input type="file" name="archivo">

así envías el archivo al servidor

en el servidor debes tratarlo con la variable global $_FILES
  #5 (permalink)  
Antiguo 11/05/2011, 17:09
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: Una soga porfavor. Enviando adjuntos en mi formulario.

La Clase PHPMailer únicamente sirve para enviar correos y poder agregarle archivos adjuntos, las validaciones siempre van por tu cuenta

Para la cuestión de archivos adjuntos primero debes subir los archivos al servidor, lo cual es realmente sencillo

en tu formulario agrega la información que ah publicado @_-ZeuS-_, agrega el enctype al formulario un un campo tipo file
Código HTML:
Ver original
  1. <form method="post" action="subir.php" enctype="multipart/form-data">
  2. <input type="file" name="archivo"/>
  3. <input type="submit" value="Subir" />
  4. </form>

En en el archivo (en este caso) subir.php agregas lo siguiente:
Código PHP:
Ver original
  1. <?php
  2.  
  3. if (isset($_POST)) {
  4. if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
  5. $urlFile = 'ulr/final/del/archivo/'.$_FILES['archivo']['name'];
  6. if (move_uploaded_file($_FILES['archivo']['tmp_name'],$urlFile) {
  7. echo 'El archivo se subio correctamente';
  8. }else {
  9. echo 'El archivo no se pudo guardar';
  10. }
  11. }else {
  12. echo 'El archivo no se pudo subir';
  13. }
  14. }

Ya solo utiliza la variable $urlFile para agregarla como adjunto en la clase PHPMailer
__________________
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 =)
  #6 (permalink)  
Antiguo 12/05/2011, 12:03
 
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Una soga porfavor. Enviando adjuntos en mi formulario.

Me siguen apareciendo inconvenientes ...

El código me quedo así, está bien ?.

Código:
<?php
			require("class.phpmailer.php");
			session_start();
                 $error    = ''; // mensaje de error
                 $name     = ''; // nombre del remitente
                 $email    = ''; // direccion de correo del remitente
				 $empresa    = ''; // empresa del remitente
				 $telefono    = ''; // teléfono del remitente
                 $subject  = ''; // asunto
                 $message  = ''; // mensaje
				
            if(isset($_POST['send']))
            {
                 $name     = $_POST['name'];
                 $email    = $_POST['email'];
				 $empresa  = $_POST['empresa'];
				 $telefono  = $_POST['telefono'];
                 $subject  = $_POST['subject'];
                 $message  = $_POST['message'];

                if(trim($name) == '')
                {
                    $error = '<div class="errormsg">Ingrese su nombre.</div>';
                }
            	    else if(trim($email) == '')
                {
                    $error = '<div class="errormsg">Ingrese su dirección de correo</div>';
                }
                else if(!isEmail($email))
                {
                    $error = '<div class="errormsg">La dirección de correo ingresada no es válida.</div>';
                }
            	    if(trim($subject) == '')
                {
                    $error = '<div class="errormsg">Ingrese un asunto.</div>';
                }
            	else if(trim($message) == '')
                {
                    $error = '<div class="errormsg">Ingrese un mensaje</div>';
				}
				if(empty($_SESSION['6_letters_code'] ) ||
    strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0)
  {

    $error = '<div class="errormsg">El código de verificación no es correcto</div>';
  }
                
                if($error == '')
                {
                    if(get_magic_quotes_gpc())
                    {
                        $message = stripslashes($message);
                    }

                    $to      = "[email protected]";

                    $subject = 'Desde [www.miweb.com.ar] : ' . $subject;

                    // the mail message ( add any additional information if you want )
                    $msg     = "Emisor : $name \r\ne-Mail : $email \r\nEmpresa : $empresa \r\nTeléfono : $telefono \r\nAsunto : $subject \r\n\n" . "Mensaje : \r\n$message";
					
		           $mail = new phpmailer ();
                           $mail -> From = $email;
      			   $mail -> FromName = $name;
     			   $mail -> AddAddress("$to"); 
      			   $mail -> Subject = $subject;
      			   $mail -> Body = $msg;
      			   $mail -> IsHTML (true); 
                           $mail -> AddAttachment ($urlFile)
            ?>

Formulario:

Código:
<form  method="post" name="contFrm" id="contFrm" action="" enctype="multipart/form-data">


                      <p>
                        <label><span class="required">*</span> Nombre:</label>
                        <input name="name" type="text" class="box" id="name" size="30" value="<?=$name;?>" />
                        
                        <label><span class="required">*</span> E-mail: </label>
                        <input name="email" type="text" class="box" id="email" size="30" value="<?=$email;?>" />
                        <label>&nbsp;&nbsp;Empresa: </label>
                        <input name="empresa" type="text" class="box" id="empresa" size="30" value="<?=$empresa;?>" />
                        <label>&nbsp;&nbsp;Teléfono: </label>
                        <input name="telefono" type="text" class="box" id="telefono" size="30" value="<?=$telefono;?>" />
                        
                        <label><span class="required">*</span> Asunto: </label>
                        <input name="subject" type="text" class="box" id="subject" size="30" value="<?=$subject;?>" />
                        
                        <label><span class="required">*</span> Mensaje: </label>
              <textarea name="message" cols="40" rows="3"  id="message"><?=$message;?></textarea>
                      <p>
                      <label>&nbsp;&nbsp;Adjuntar archivo: </label>
                      <input type="file" name="archivo" />
                      <input type="submit" value="Adjuntar" />
                      <br />
                      <br />
                      <br />
                      <img src="captcha_code_file.php?rand=<?php echo rand(); ?>" id='captchaimg' ><br>
<label for='message'><span class="required">*</span>Ingrese el código:</label>
<input id="6_letters_code" name="6_letters_code" type="text" />
<br><br>
No puede ver bien la imagen? Haga clic <a href='javascript: refreshCaptcha();'>AQUÍ</a>      
                        para mostrar una nueva              </p>
                      <p>
                        <!-- Submit Button-->
                        
                        <input name="send" type="submit" class="button" id="send" value="" /> 
                      </p>
              </p>
              <p>&nbsp;</p>
            <p style="text-align:center;">&nbsp;</p></form>
Dentro del archivo adjuntar.php incluí el código que me brindaste.

No logro que me envíe el mail xD

¿Qué estoy haciendo mal?

Última edición por Snowball; 12/05/2011 a las 13:01
  #7 (permalink)  
Antiguo 12/05/2011, 14:18
 
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Una soga porfavor. Enviando adjuntos en mi formulario.

Leyendo detenidamente el codigo

<?php

if (isset($_POST)) {
if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
$urlFile = 'ulr/final/del/archivo/'.$_FILES['archivo']['name'];
if (move_uploaded_file($_FILES['archivo']['tmp_name'],$urlFile) {
echo 'El archivo se subio correctamente';
}else {
echo 'El archivo no se pudo guardar';
}
}else {
echo 'El archivo no se pudo subir';
}
}

Me di cuenta que faltaba un paréntesis ...

Al corregir el parentesis solucione el tema de subir el archivo .. pero

de todas formas al enviarlo no me llega nunca el mail ..

Hay algo que está mal en el código que tengo y no puedo detectarlo.

Algun iluminado que sepa saber donde me equivoque ? XD

Muchas gracias
  #8 (permalink)  
Antiguo 12/05/2011, 14:34
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: Una soga porfavor. Enviando adjuntos en mi formulario.

Sin que te molestes, como quieres que se envié el correo si no lo estas enviando, te falta la parte mas importante...
Código PHP:
Ver original
  1. if ($mail->send()) {
  2. echo 'El mensaje se envio correctamente';
  3. }else {
  4. echo 'No se pudo enviar el mensaje, error:'.$mail->ErrorInfo;
  5. }
__________________
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 13/05/2011, 09:31
 
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Una soga porfavor. Enviando adjuntos en mi formulario.

GROSO !

jajaja .. gracias por la ayuda (:

Etiquetas: formulario
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 12:15.