Foros del Web » Programando para Internet » Javascript »

Formulario que no envía todos los campos por correo

Estas en el tema de Formulario que no envía todos los campos por correo en el foro de Javascript en Foros del Web. Hola, tengo un formulario web, pero por algún motivo hay dos campos ( Asunto y Empresa ) que no me los envía por correo, y ...
  #1 (permalink)  
Antiguo 08/09/2011, 08:57
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 20 años, 9 meses
Puntos: 1
Exclamación Formulario que no envía todos los campos por correo

Hola, tengo un formulario web, pero por algún motivo hay dos campos (Asunto y Empresa) que no me los envía por correo, y creo que el problema está en que cuando le doy a enviar lo que hago es invocar una función JavaScript para validar el formulario, y casualmente, esos dos campos que no me envía, no los valido, ya que son opcionales, y no sé si por eso será el que no me lo envía.

No paro de darle vueltas pero no soy capaz de encontrar el dichoso fallo.

Os dejo tanto la parte del código HTML del formulario, como el JavaScript de validación, como el código PHP de envío por correo.

Código:
<script language="javascript" type="text/javascript">
<!--
function Validar() {
if (document.contacto.Nombre.value == "") {
alert ('Necesitamos conocer su "Nombre"'); document.contacto.Nombre.focus(); return (false);
} else if (document.contacto.eMail.value == "") {
alert ('Debe especificar una direccion de "Correo"'); document.contacto.eMail.focus(); return (false);
} else if (document.contacto.Mensaje.value == "") {
alert ('Debe especificar un "Mensaje"'); document.contacto.Mensaje.focus(); return (false);
} document.contacto.submit();
}
--> </script>
Código HTML:
<form name="contacto" method="post" onsubmit="return Validar();" action="enviar.php">
<p align="left">
<label><span class="Estilo1">Nombre</span><br />
<input name="Nombre" class="campo" type="text" size="50" />
</label>
</p>
<p align="left">
<label><span class="Estilo1">E-mail</span><br />
<input name="eMail" class="campo" type="text" size="50" />
</label>
</p>
<p align="left">
<label><span class="Estilo1">Empresa</span><br />
<input name="Empresa" class="campo" type="text" size="50" />
</label>
</p>
<p align="left">
<label> <span class="Estilo1">Asunto</span><br />
<input name="Asunto" class="campo" type="text" size="50" />
</label>
</p>
<p align="left">
<label><span class="Estilo1">Mensaje</span><br />
<textarea name="Mensaje" class="campo" cols="48" rows="8"></textarea>
</label>
</p>
<input type="submit" name="Enviar" value="Enviar" />
<label>
<input type="reset" name="Borrar" value="Borrar" />
</label>
</form> 
Código PHP:
<?php
    ob_start
(); // Buffering de salida. Para que no haya problemas luego con la funcion "header()"
    
$correo $_POST['eMail']; // guardamos el campo email en una variable ya que lo utilizaremos en varias ocasiones en el script
    
$cuerpo "<h1><u>Formulario de contacto</u></h1>";
    
$cuerpo .= "Nombre: <strong>" $_POST['Nombre'] . "</strong><br />";
    
$cuerpo .= "E-mail: <strong>" $correo "</strong><br />";
    
$cuerpo .= "Empresa: <strong" $_POST['Empresa'] . "</strong><br />";
    
$cuerpo .= "Asunto: <strong" $_POST['Asunto'] . "</strong><br />";
    
$cuerpo .= "Mensaje: <strong>" $_POST['Mensaje'] . "</strong>";

    
// para el envio en formato HTML

    
$cabeceras  'MIME-Version: 1.0' "\r\n";

    
$cabeceras .= 'Content-type: text/html; charset=utf-8' "\r\n";

/* direccion del remitente que la cogemos del formulario, en su programa de correo, en la línea De o From, le saldrá la dirección que se ha 

puesto en el formulario */

    
$cabeceras .= "From: " $correo "\r\n";

/* direccion de respuesta, la cogemos del formulario, si le damos desde nuestro programa de correo, a Responder o Reply, directamente responderá 

a la dirección que se ha puesto en el formulario */

    
$cabeceras .= "Reply-To: " $correo "\r\n";

// ruta del mensaje desde origen a destino

    
$cabeceras .= "Return-path: " $correo "\r\n";

            
// mando el correo... con la función mail()
    
if (mail("micorreo","Formulario de contacto",$cuerpo,$cabeceras)) {
// lo pongo dentro de un if para saber si hay problemas durante el envio

        // Redirijo a la pagina de formulario recibido correctamente

            
header("location:enviado.html");

    } else {

        
// Redirijo a la pagina de formulario enviado erroneamente

            
header("location:error.html");

    } 
// cierro el 'else' del 'if' la funcion 'mail()'
?>
  #2 (permalink)  
Antiguo 08/09/2011, 18:40
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Formulario que no envía todos los campos por correo

Hola:

No parece ser problema javascript ya que parece estar bien (aunque el submit forzado es redundante)...

Ya que estás con php, prueba mostrando todo lo que llega al destino con print_r($_POST);//...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 09/09/2011, 02:01
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 20 años, 9 meses
Puntos: 1
De acuerdo Respuesta: Formulario que no envía todos los campos por correo

Gracias por la aclaración, he vuelto a revisar el código PHP, y había un '>' sin cerrar cuando recoge los datos de los dos campos esos, por eso estaban vacíos.

¿A qué te refieres con que el submit del Javascript es redudante?.
  #4 (permalink)  
Antiguo 09/09/2011, 02:38
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Formulario que no envía todos los campos por correo

Cita:
Iniciado por rvelezb Ver Mensaje
...

¿A qué te refieres con que el submit del Javascript es redudante?.
Cuando se usan botones del tipo submit, y validas desde el evento submit (onsubmit), solo debes cancelar la validación para que el formulario no se envíe (que justamente es lo que haces), y cuando no existe ningún return false en el flujo de datos, al pulsar sobre el botón submit el formulario se enviará; así que la línea:

document.contacto.submit();

... es redundante.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 09/09/2011, 02:47
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 20 años, 9 meses
Puntos: 1
Respuesta: Formulario que no envía todos los campos por correo

Ok, entonces con no poder nada, o poner en su lugar "return (true);", sin las comillas, sería suficiente, ¿no?. Aclarado.

De todos modos, tal como está funciona bien, pero, ¿podría dar algún problema?.
  #6 (permalink)  
Antiguo 09/09/2011, 02:54
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Formulario que no envía todos los campos por correo

Hola:

Es que tampoco es necesario enviar true (los paréntesis también redundan). Si no se recibe false o algo equivalente el flujo de datos será normal... es más, sin nada es óptimo ya que hay una instrucción menos que evaluar (aunque sea intrascendente)...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 09/09/2011, 02:56
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 20 años, 9 meses
Puntos: 1
Respuesta: Formulario que no envía todos los campos por correo

Vale, aclarado entonces.

Etiquetas: campos, correo, html, php, 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 15:26.