Comunidad de diseño web y desarrollo en internet online

Formulario web con archivo adjunto

Citar            
MensajeEscrito el 10 Nov 2014 06:21 pm
Estuve buscando por la web como enviar archivos adjuntos en un formulario web, pero en la mayoría eran formularios mas complejos.
En este caso, simplemente tengo un formulario asi:

Código HTML :

<form action="php/enviarcv.php" method="post" enctype="multipart/form-data">
   <label for="cv">
      <input type="file" name="cv" required />
   </label>
   <label for="enviar">
      <input type="submit" name="enviar" id="btn" value="Enviar" />
   </label>
</form>


Me gustaría saber como tendría que ser el código php, para poner que solamente se puedan enviar .doc y .pdf, limitar el tamaño del archivo.

El cuerpo del mensaje y el asunto los voy a definir adentro del php... por lo que del formulario de contacto lo único que se toma es lo único que hay para introducir, el archivo.

Por LuKiTo

26 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Nov 2014 08:15 pm
Puedes recurrir al mime-type que viene en el array $_FILES, pero lo mejor es extraer la extensión del nombre del archivo. Para ello puedes valerte de la función pathinfo().

Puedes definir un array cuyos elementos son las extensiones permitidas y luego con in_array() determinar si la extensión del archivo subido está en el array.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 10 Nov 2014 11:53 pm
El codigo me ha quedado así. El email llega, pero no me aparece el contenido del mensaje ni el archivo adjunto.... podrias decirme que es lo que esta mal?

Código PHP :

<?php
    $asunto = "Ha llegado un CV";
    $mail = "www.direccionweb.com.ar";
 
    $header = 'From: ' . $mail . " \r\n";
    $header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
    $header .= "Mime-Version: 1.0 \r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; 
    $header .= "This is a multi-part message in MIME format.\r\n"; 
    $header .= "--".$uid."\r\n"; 
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n"; 
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
    $header .= $message."\r\n\r\n"; 
    $header .= "--".$uid."\r\n"; 
    $header .= "Content-Type: application/octet-stream; name=\"".$partes_ruta."\"\r\n"; // use different content types here 
    $header .= "Content-Transfer-Encoding: base64\r\n"; 
    $header .= "Content-Disposition: attachment; filename=\"".$partes_ruta."\"\r\n\r\n"; 
    $header .= $content."\r\n\r\n"; 
    $header .= "--".$uid."--"; 
 
    $mensaje="
      <strong>Alguien ha enviado su CV para que lo veas.</strong><br /><br />
      <strong>Enviado el:</strong> $fecha
   ";
 
    $para = '[email protected]';
 
    // Tomas la informacion del archivo subido.
    $partes_ruta = pathinfo($_FILES["cv"]["name"]);
    
    // obtenemos el tamaño del archivo subido
    $fsize = $_FILES["cv"]["size"];
 
    if($partes_ruta['extension'] == "doc" or $partes_ruta['extension'] == "docx" or $partes_ruta['extension'] == "pdf" and $fsize <= 1516165165 )
    {
 
        ini_set(sendmail_from, '[email protected]');
        mail($para, $asunto, utf8_decode($mensaje), $header);
 
        echo header("Location: http://www.direccionweb.com.ar/");
 
    }else {
 
    echo "ERROR";
 
}
 
?>

Por LuKiTo

26 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Nov 2014 12:10 pm
No uses la función mail(). Mejor usa PHPMailer.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Nov 2014 01:14 pm
Ahi estoy intentando con php mailer y me tira este error... no se porque pasa porque estoy usando la cuenta de gmail...

Código PHP :

<?php

$archivo = $_FILES['cv'];
$fecha = date('d/m/Y', time());
$Email = "www.dominio.com.ar";



    require("mailer/class.phpmailer.php");
    $mail = new PHPMailer();

    $mail->From     = $Email;
    $mail->FromName = $Email; 
    $mail->AddAddress("[email protected]"); // Dirección a la que llegaran los mensajes.
   
// Aquí van los datos que apareceran en el correo que reciba
    //adjuntamos un archivo 
        //adjuntamos un archivo
            
    $mail->WordWrap = 50; 
    $mail->IsHTML(true);     
    $mail->Subject  =  "Ha llegado un CV";
    $mail->Body     =  "<strong>Alguien ha enviado su CV para que lo veas.</strong> \n<br />".    
    "<strong>Enviado el:</strong> $fecha \n<br />";
    $mail->AddAttachment($archivo['tmp_name'], $archivo['name']);
    
    
    

// Datos del servidor SMTP

    $mail->IsSMTP(); 
    $mail->Host = "ssl://smtp.gmail.com:465";  // Servidor de Salida.
    $mail->SMTPAuth = true; 
    $mail->Username = "[email protected]";  // Correo Electrónico
    $mail->Password = "*******"; // Contraseña
    
    if ($mail->Send())
    echo "<script>alert('Formulario enviado exitosamente, le responderemos lo más pronto posible.');location.href ='javascript:history.back()';</script>";
    else
    echo "<script>alert('Error al enviar el formulario');location.href ='javascript:history.back()';</script>";


?>


SMTP Error: Could not authenticate.

Otra cosa: ¿Como tendria que hacer para que solo se puedan enviar PDF y DOC/DOCX ??

Por LuKiTo

26 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Nov 2014 03:56 pm
Si el servidor SMTP que quieres usar es GMail debes hacer unas cuantas modificaciones porque por empezar la conexión debe hacerse mediante TLS (conexión segura).

Aquí hay un ejemplo:
http://phpmailer.worxware.com/?pg=examplebgmail

A tu pregunta final ya respondí.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Nov 2014 06:32 pm
Y si quiero usar mi SMTP del hosting??? tengo que pedir ayuda al que me brinda el servicio?

Por LuKiTo

26 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Nov 2014 12:10 pm
Pues simplemente necesitas saber el nombre de host del servidor SMTP (o tal vez su IP, cada hosting tiene sus particularidades), el numero de puerto, tipo de autenticación, nombre de usuario y contraseña de la cuenta por la cual quieres enviar tus correos.

Nada más.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.