Foros del Web » Programando para Internet » PHP »

Formulario que se resiste

Estas en el tema de Formulario que se resiste en el foro de PHP en Foros del Web. Hola buenos días, tengo un formulario en mi web que funciona pero no llega el contenido correctamente al email de destino, nada más que se ...
  #1 (permalink)  
Antiguo 01/10/2015, 05:27
 
Fecha de Ingreso: diciembre-2007
Mensajes: 15
Antigüedad: 16 años, 3 meses
Puntos: 0
Formulario que se resiste

Hola buenos días,

tengo un formulario en mi web que funciona pero no llega el contenido correctamente al email de destino, nada más que se el mensaje, ni el asunto ni el nombre ni el email de la persona que escribe, os lo veo a dejar a vosotros aquí por favor a ver si encontráis el detalle porque me estoy volviendo loco y no avanzo y mira que lo he hecho veces.

Un saludo y gracias con antelación

Código PHP:
<?php

    
if(isset($_POST['boton'])){
        if(
$_POST['nombre'] == ''){
            
$error1 '<span class="error">Ingrese su nombre</span>';
        }else if(
$_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
            
$error2 '<span class="error">Ingrese un email correcto</span>';
        }else if(
$_POST['asunto'] == ''){
            
$error3 '<span class="error">Ingrese un asunto</span>';
        }else if(
$_POST['mensaje'] == ''){
            
$error4 '<span class="error">Ingrese un mensaje</span>';
        }else{
            
$dest "[email protected]"//Email de destino
            
$nombre $_POST['nombre'];
            
$email $_POST['email'];
            
$asunto $_POST['asunto']; //Asunto
            
$cuerpo $_POST['mensaje']; //Cuerpo del mensaje
            //Cabeceras del correo
            
$headers "From: $nombre <$email>\r\n"//Quien envia?
            
$headers .= "X-Mailer: PHP5\n";
            
$headers .= 'MIME-Version: 1.0' "\n";
            
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n"//
 
            
if(mail($dest,$asunto,$cuerpo,$headers)){
 
                
//foreach($_POST AS $key => $value) {
                //    $_POST[$key] = mysql_real_escape_string($value);
                //} 
 
                //$sql = "INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) VALUES ('{$_POST['nombre']}','{$_POST['email']}','{$_POST['asunto']}','{$_POST['mensaje']}')";
                //mysql_query($sql) or die(mysql_error()); 
 
                
$result '<div class="result_ok">Email enviado correctamente <img src="http://web.tursos.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley"> </div>';
                
// si el envio fue exitoso reseteamos lo que el usuario escribio:
                
$_POST['nombre'] = '';
                
$_POST['email'] = '';
                
$_POST['asunto'] = '';
                
$_POST['mensaje'] = '';
                
                
mail($nombre,$email,$asunto,$cuerpo)
 
            }else{
                
$result '<div class="result_fail">Hubo un error al enviar el mensaje <img src="http://web.tursos.com/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley"> </div>';
            }
        }
    }
?>
Código HTML:
<html>
    <head>
        <title>Contacto</title>
        <link rel='stylesheet' href='estilos.css'>
        <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
        <script src='funciones.js'></script>
    </head>
    <body>
        <form class='contacto' method='POST' action=''>
            <div><label>Tu Nombre:</label><input type='text' class='nombre' name='nombre' value='<?php if(isset($_POST['nombre'])){ echo $_POST['nombre']; } ?>'><?php if(isset($errors)){ echo $errors[1]; } ?></div>
            <div><label>Tu Email:</label><input type='text' class='email' name='email' value='<?php if(isset($_POST['email'])){ $_POST['email']; } ?>'><?php if(isset($errors)){ echo $errors[2]; } ?></div>
            <div><label>Asunto:</label><input type='text' class='asunto' name='asunto' value='<?php if(isset($_POST['asunto'])){ $_POST['asunto']; } ?>'><?php if(isset($errors)){ echo $errors[3]; } ?></div>
            <div><label>Mensaje:</label><textarea rows='6' class='mensaje' name='mensaje'><?php if(isset($_POST['mensaje'])){ $_POST['mensaje']; } ?></textarea><?php if(isset($errors)){ echo $errors[4]; } ?></div>
            <div><input type='submit' value='Envia Mensaje' class='boton' name='boton'></div>
            <?php if(isset($result)) { echo $result; } ?>
        </form>
    </body>
</html> 
  #2 (permalink)  
Antiguo 01/10/2015, 06:23
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 2 meses
Puntos: 15
Respuesta: Formulario que se resiste

De esta manera debería funcionar siempre y cuando tu servidor este configurado correctamente para enviar correo.

Código PHP:
Ver original
  1. $headers = "MIME-Version: 1.0\r\n";
  2. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
  3.  
  4. //dirección del remitente
  5. $headers .= "From: tudirecció[email protected] \r\n";
  6.  
  7. mail($email,$asunto,$cuerpo,$headers);
  8.  
  9. //$email es el correo de destino, $asunto es asunto de mensaje, $cuerpo sería el contenido y el $headers.

Luego quiero comentar una cosa de tu código
Código PHP:
Ver original
  1. $headers = "From: $nombre <$email>\r\n"; //Quien envia?

Debes cerrar comillas para escribir el valor de una variable, luego un punto delante de la variable y otro detras y volver a abrir comillas. Busca en google concatenar en php.

Quedaría algo así.
Código PHP:
Ver original
  1. $headers = "From: ".$nombre." <".$email.">\r\n"; //Quien envia?
  #3 (permalink)  
Antiguo 05/10/2015, 00:28
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Formulario que se resiste

<saludo>

Pues que raro que no de error,
pues en el segundo llamado a la función mail falta el ; final

Quitando ese segundo llamado,
yo creo que envía el mail sin problema.

Lo digo porque copié el código, y lo pegué tal cual
en un archivo (quitando la línea del segundo mail())
y funciona sin problema, el correo llega a su destino.

Sin embargo, si llega a darse el caso que haciendo el cambio
no le funcione, sería tema de revisar con el proveedor
de hosting para ver sí soporta el envío de mails solo con la función mail,
o sí necesita una configuración más robusta (en cuyo caso PhpMailer podría ser la opción)

</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: formulario, html, mysql, sql
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 18:56.