El correo que llega del formulario esta vacio!

Iniciado por elpirata15hd, 25 Abril 2011, 00:47 AM

0 Miembros y 1 Visitante están viendo este tema.

elpirata15hd

Estoy utilizando este php para enviar el formulario al correo,y llega,el problema esque llega en blanco,sale la fecha,hora en que se envio,y los campos nombre,email,asunto y mensaje,que son los del formulario,pero en blanco,no se que esta mal,os lo dejo aqui,haber si sabeis cual es el fallo,gracias. Y ademas,al pinchar enviar y activar el php,la pagina se queda en blanco y a la vez llega el correo


<?php
$dia=date("m.d.Y");
$hora=date("H:i:s");
$destinatario="MICORREO@gmail.com";
$subject= " Mensaje";
$desde = 'From: ' .$_POST[email];
$contingut = "
El mensaje se a enviado el dia $dia a las $hora\n\n
----------------------------------------------------------------------------\n
Nombre: $_POST[name]\n
Email: $_POST[email]\n
Asunto: $_POST[subject]\n
Mensaje: $_POST[message]\n
----------------------------------------------------------------------------\n
";
mail($destinatario, $subject, $contingut, $desde);
?>


Formulario html


<form id="form-contact" class="validation" method="post" action="enviar.php" enctype="text/plain">

<p class="input-text pngfix">
<label class="overlay" for="name">Nombre</label>
<input type="text" class="required" name="name" id="name" />
</p>
<p class="input-text pngfix">
<label class="overlay" for="email">E-Mail</label>
<input type="text" class="required email" name="email" id="email" />
</p>
<p class="input-text pngfix">
<label class="overlay" for="subject">Asunto</label>
<input type="text" class="required" name="subject" id="subject" />
</p>

<p class="textarea pngfix">
<label class="overlay" for="message">Mensaje</label>
<textarea class="required" name="message" id="message" rows="5" cols="5"></textarea>
</p>


<p><button type="submit" class="submit pngfix">Enviar!</button></p>

WHK

$desde = 'From: ' .$_POST[email];

estás enviando "email" sin comillas, por lo tanto estás dando una constante y la constante email no existe.

encierra todos los valores en comillas dobles o simples y si vas a poner una variable dentro de las comilas dobles debes encerrarlas en corchetes porque no va a tomar el argumento.

{$_POST[name]}

mejor cierra comillas y las concatenas con puntos:

Código (php) [Seleccionar]
$contingut = '
El mensaje se a enviado el dia '.$dia.' a las '.$hora.'

----------------------------------------------------------------------------
Nombre: '.$_POST['name'].'
Email: '.$_POST['email'].'
Asunto: '.$_POST['subject'].'
Mensaje: '.$_POST['message'].'
----------------------------------------------------------------------------
';


Además si ya haces saltos de linea no tienes para que escribir \n.

También recuerda que debes cerrar </form>

elpirata15hd

#2
ates que nada,muchisimas gracias por ayudarme. Bueno,pues e realizado los cambios que me has dicho, a $desde = 'From: ' .$_POST['email']; le puse las comillas y tambien cambie lo del codigo que escribiste,pero sigue apareciendo en blanco,puede que haya un error de que no concuerden los datos del formulario y el php? y cuando se activa el enviar.php la pagina se queda en blanco a la vez que llega el correo,cual es la forma de que el php regrese al index.html?

y el form del html estaba cerrado lo unico que se me olvido copiarlo aqui

Gracias

elpirata15hd

puede que haya error en alguna linea del formulario?

Feedeex

Probá así:

<?php
$dia
=date("m.d.Y");
$hora=date("H:i:s");
$destinatario="MICORREO@gmail.com";
$subject"Mensaje";
$desde_quien $_POST['email'];
$desde "From: $desde_quien";
$contingut "
El mensaje se a enviado el dia 
$dia a las $hora\n\n
----------------------------------------------------------------------------\n
Nombre: 
$_POST['name']\n
Email: 
$_POST['email']\n
Asunto: 
$_POST['subject']\n
Mensaje: 
$_POST['message']\n
----------------------------------------------------------------------------\n
"
;
mail($destinatario$subject$contingut$desde);
?>


Corregí un par de errores. Ya verás. Y para redireccionar al index.html nuevamente utiliza header(); de la siguiente forma:

header("Location: index.html");

Suponiendo que está en el mismo directorio que enviar.php, claro.

elpirata15hd

#5
Ok,voy a probar,en el dreamweaver,me da error en la linea 11

Si,da error en la linea 11,da este error:

syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/a5419835/public_html/prueba.php on line 11

El header funciona perfectamente!!

Como se pondria que cuando regrese al index.html saliera una ventanita de que se envio correctamente?

PD: asi es como me estan llegando los correos que envia el formulario:


elpirata15hd

Ya funciona,muchas gracias,me dijeorn que tenia que quitar enctype="text/plain" y ya funciona.

Ahora me gustaria saber como hacer que cuando envie el correo y regrese al html salga un cuadrito o algo asi que diga que se envio correctamente?

Veis la posibilidad de añadir al formulario un exmainar para adjuntar con el correo una foto?

Gracias

Feedeex

Y... depende.

• Puede regresar al index y saltar un cartel que diga que se envio.
• Puede aparecer en el index.html el mensaje que se envió, aparte del formulario.

Para el primer método podés usar alert de javascript. Y para el segundo utilizarás variables por URL combinadas con GET. Un ejemplo:

index.php (si, cambiale la extensión a .php)


<?php
if (isset($_GET['opc'])) {
 
$opc $_GET['opc'];
  if (
$opc == "1") {
?>

  <p align="Center">El mensaje fue enviado</p>
<?php
} else {
?>

  <p align="Center">Opcion incorrecta</p>
<?php
}
}
?>

<form id="form-contact" class="validation" method="post" action="enviar.php" enctype="text/plain">

<p class="input-text pngfix">
<label class="overlay" for="name">Nombre</label>
<input type="text" class="required" name="name" id="name" />
</p>
<p class="input-text pngfix">
<label class="overlay" for="email">E-Mail</label>
<input type="text" class="required email" name="email" id="email" />
</p>
<p class="input-text pngfix">
<label class="overlay" for="subject">Asunto</label>
<input type="text" class="required" name="subject" id="subject" />
</p>

<p class="textarea pngfix">
<label class="overlay" for="message">Mensaje</label>
<textarea class="required" name="message" id="message" rows="5" cols="5"></textarea>
</p>
<p><button type="submit" class="submit pngfix">Enviar!</button></p>


Lo que haría el código es verificar si existe en la URL la variable "opc". Si existe, toma el valor que tiene y lo guarda en una variable. Si es 1 muestra que se envió el mensaje, de lo contrario dice que es incorrecto. El header para mostrar el mensaje sería:

header("Location: index.php?opc=1");

Lo que haría es decirle a index.php que muestre la parte donde le indicamos que existe la variable opcion con un 1. Es decir:

if ($opc == "1") {
?>
  <p align="Center">El mensaje fue enviado</p>
<?php
}


Para info más detallada lee sobre $_GET

Cualquier duda no dudes en consultar. Un abrazo.

elpirata15hd

#8
funciono perfecto,pero tiene un fallo,que como el texto "se evnio correctamente" sale encima del formulario y al regresar al index empieza desde arriva,no aparece la parte de abajo de la web,tienes que bajar hasta el formulario para saber si se envio ok,asi que pienso que a lo mejor,seria mejor,que saliese una pequeña venta diciendo que se envio correctamente y que desaparezca automaticamente ¿no crees? eso si,no tengo ni ide ade por donde empezar con esa ventana,si me pudieras ayudar una vez mas,me harias un favor

Del tema de añadir al fomrulario un boton examinar para djuntar una foto y que llegue la foto adjuntada al correo,tienes idea de cmo se hace?

Gracias una vez mas

Mira,encontre este script para cuando entras a la web,pero como se configura para que se active al regresar al index despues de que se enviase?

<script language="javascript" type="text/javascript">
alert("Enviado Correctamente");
</script>

             

Feedeex

Hace así:

enviar.php
<?php
$dia
=date("m.d.Y");
$hora=date("H:i:s");
$destinatario="MICORREO@gmail.com";
$subject"Mensaje";
$desde_quien $_POST['email'];
$desde "From: $desde_quien";
$contingut "
El mensaje se a enviado el dia 
$dia a las $hora\n\n
----------------------------------------------------------------------------\n
Nombre: 
$_POST['name']\n
Email: 
$_POST['email']\n
Asunto: 
$_POST['subject']\n
Mensaje: 
$_POST['message']\n
----------------------------------------------------------------------------\n
"
;
mail($destinatario$subject$contingut$desde);
header("Location: index.php?opc=1");
?>


index.php
<?php
if (isset($_GET['opc'])) {
 
$opc $_GET['opc'];
  if (
$opc == "1") {
?>

  <script language="javascript" type="text/javascript">
   alert("Enviado Correctamente");
</script>
<?php
} else {
?>

  <script language="javascript" type="text/javascript">
   alert("Parametro incorrecto");
</script>
<?php
}
}
?>

<form id="form-contact" class="validation" method="post" action="enviar.php" enctype="text/plain">

<p class="input-text pngfix">
<label class="overlay" for="name">Nombre</label>
<input type="text" class="required" name="name" id="name" />
</p>
<p class="input-text pngfix">
<label class="overlay" for="email">E-Mail</label>
<input type="text" class="required email" name="email" id="email" />
</p>
<p class="input-text pngfix">
<label class="overlay" for="subject">Asunto</label>
<input type="text" class="required" name="subject" id="subject" />
</p>

<p class="textarea pngfix">
<label class="overlay" for="message">Mensaje</label>
<textarea class="required" name="message" id="message" rows="5" cols="5"></textarea>
</p>
<p><button type="submit" class="submit pngfix">Enviar!</button></p>


Por cierto, la proxima vez intenta leer un poco más y recopilar información, no de tener todo en bandeja.