Comunidad de diseño web y desarrollo en internet online

PROBLEMA: formulario de contacto envía correo en blanco.

Citar            
MensajeEscrito el 09 Mar 2010 06:07 pm
Hola gente! :alabado:

Creé un formulario de contacto en php más un script de campos obligatorios, siguiendo cuando tutorial encontré, y todo funciona bien. PERO, al poner enviar, me llegan dos correos: uno llega correctamente con la información de los campos, mientras que el otro llega con todos los campos en blanco. De esta forma:

Correo 1:
Este mensaje fue enviado por: Nombre Blibli
Su e-mail es: [email protected]
Comentario: el comentario blablabla
Enviado el 08/03/2010

Correo 2:
Este mensaje fue enviado por
Su e-mail es:
Comentario:
Enviado el 08/03/2010

Y claro, el formulario es para la página de un cliente, y no es la idea dejarle la cosa funcionando de manera que se le dupliquen los correos en su bandeja.


Aquí pongo los códigos y de qué forma tengo estructurado el asunto.

El script para los campos obligatorios, colocado entre <head> y </head> de la página "formulario.html":

Código HTML :

<script>
function validar(form)
{
if(form.nombre.value==""){
alert("Por favor indique su nombre");
form.nombre.focus();
return false;
}

if(form.mail.value==""){
alert("Por favor indique su dirección de correo electrónico");
form.mail.focus();
return false;
}

}
</script>



El formulario en el <body> de la página "formulario.html", estructurado dentro de una tabla:

Código HTML :

<table width="385" border="0" cellpadding="0" cellspacing="0" bgcolor="#666666">
      <form id="form2" name="form2" method="post" action="enviado.php">
        <tr>
          <td width="140" height="30" align="left" scope="col"><span class="style18">NOMBRE</span></td>
          <td width="250" height="30" align="left" scope="col"><span class="style17">
            <label>
            <input name="nombre" type="text" id="nombre" size="30" />
            </label>
          </span></td>
        </tr>
        <tr>
          <td width="140" height="30" align="left" scope="row"><span class="style18">MAIL</span></td>
          <td width="250" height="30" align="left"><span class="style17">
            <label>
            <input name="mail" type="text" id="mail" size="30" />
            </label>
          </span></td>
        </tr>
        <tr>
          <td height="180" colspan="2" align="left" scope="row"><span class="style17"><span class="style18">COMENTARIO</span><br />
              <label>
              <textarea name="comentario" id="comentario" cols="40" rows="6"></textarea>
              </label>
          </span></td>
        </tr>
        
        <tr>
          <td height="30" colspan="2" align="left" scope="row"><span class="style17">
            <label>
            <input type="submit" name="Enviar" id="Enviar" value="Enviar" onClick="return validar(this.form)"/>
            </label>
          </span></td>
        </tr>
        </form>
      </table>



Y el código php de la página "enviado.php", también ubicado dentro del <head>:

Código PHP :

<?php

$nombre = $_POST['nombre'];
$mail = $_POST['mail'];

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Comentario: " . $_POST['comentario'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'Aplicación formulario de contacto XXX';

mail($para, $asunto, utf8_decode($mensaje), $header);

?> 



¿Alguna idea de cuál es el problema? ¿Será quizás el hosting?... Por ahí en forosdelweb me respondieron esto:

pateketrueke escribió:

bueno, en si.. la solución esta en colocar el script que envía el correo en otro archivo, y el formulario en uno distinto...

en el action del formulario escribes el nombre del script que envía el correo, así... solo se ejecuta dicho script al procesar el formulario... ;)

ya que en tu caso, el script se procesaba deliberadamente... ya que no haces control del flujo en tu aplicación...


pero no entendí mucho :wtf: , intenté hacer lo poco que entendí y nada, y el tema desapareció de la página principal. Más allá de un .js que se me adjunta por tener unos banners flash en las página, (éste: <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>) no entiendo mucho más.

Gracias de antemano cualquier orientación, y disculpadme si es una consulta muy newbie. Soy de las que navegan hasta el cansancio en busca de respuestas, pero al día de hoy ante esto me considero derrotada.

Por pubita

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Mar 2010 07:07 pm
Lo que te han dicho es que separes el formulario (con su validación en JS) por un lado (en un archivo aparte) y el script PHP que efectivamente envía el correo por otro (otro archivo aparte) y en el action del form apuntes al script PHP, cosa que pareces haber hecho.

Me parece que tu problema está en la función JS validar(), cuando detectas un problema haces un return false ¿pero si no hay ningún problema qué regresas en la función? ;). Como estás ejecutando eso en el onClick del botón que envía el formulario y no estás cancelando el evento me parece que tanto si el resultado de la función devuelve false o nada el formulario se envía igual.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

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