发送错误/电子邮件后,HTML表单消失(PHP)

时间:2013-10-04 04:35:11

标签: php html forms email

这里有一个奇怪的问题,当我点击发送按钮时,无论成功与否,我的html表单都会从页面中消失。

我会显示一个警告框,指示电子邮件是否已发送。

这是代码

<?php
$action = $_REQUEST['action'];
if ($action == "") /* display the contact form */ {
    ?> 
    <form  action="" method="POST" enctype="multipart/form-data"> 
        <input type="hidden" name="action" value="submit"> 

        <input class="champTextFormulaire" placeholder="Votre Nom" name="name" type="text" value="" size="30"/><br> 

        <input class="champTextFormulaire" placeholder="Votre email" name="email" type="text" value="" size="30"/><br> 

        <textarea id="champMessage" placeholder="Votre Message..." name="message" rows="7" cols="30"></textarea><br> 
        <input class="btnEnvoiFormulaire" type="submit" value="Envoi"/> 
    </form> 
    <?php
} else /* send the submitted data */ {
    $name = $_REQUEST['name'];
    $email = $_REQUEST['email'];
    $message = $_REQUEST['message'];
    if (($name == "") || ($email == "") || ($message == "")) {
        print '<script type="text/javascript">';
        print 'alert("Veuillez remplir tout les champs")';
        print '</script>';
    } else {
        $from = "From: $name<$email>\r\nReturn-path: $email";
        $subject = "Message sent using your contact form";
        mail(desiletsmathieu@gmail.com", $subject, $message, $from); 
        print '<script type="text/javascript">'; 
        print 'alert("Mail envoyé")'; 
        print '</script>'; 
        } 
    }   
    }
?> 

2 个答案:

答案 0 :(得分:0)

以这种方式试试。

首先,你忘记了mail(之后的双引号,如下所示:

mail(desiletsmathieu@gmail.com", $subject, $message, $from);

需要更改为:

mail("desiletsmathieu@gmail.com", $subject, $message, $from); 

Plus enctype="multipart/form-data"用于文件附件/上传,因此您不需要。

我也删除了这一行,不再需要:

<input type="hidden" name="action" value="submit"> 

这可以运行和测试:

注意:我在您的提交按钮中添加了一个名称,以便为其提供额外条件。此外,您基本上已经设置了条件,只需要重新设计/重新考虑并使用更少的代码来实现相同的结果。

<form action="" method="POST"> 
<input class="champTextFormulaire" placeholder="Votre Nom" name="name" type="text" value="" size="30"/><br> 

<input class="champTextFormulaire" placeholder="Votre email" name="email" type="text" value="" size="30"/><br> 

<textarea id="champMessage" placeholder="Votre Message..." name="message" rows="7" cols="30"></textarea><br> 
<input class="btnEnvoiFormulaire" type="submit" name="submit" value="Envoi"/> 
</form> 
<?php 

$name=$_REQUEST['name']; 
$email=$_REQUEST['email']; 
$message=$_REQUEST['message']; 

if (isset($_POST['submit'])) {
if (($name=="")||($email=="")||($message=="")) 
    { 
    print '<script type="text/javascript">'; 
    print 'alert("Veuillez remplir tout les champs")'; 
    print '</script>'; 
exit;
   } 

else
{         
    $from="From: $name<$email>\r\nReturn-path: $email"; 
    $subject="Message sent using your contact form"; 
    mail("desiletsmathieu@gmail.com", $subject, $message, $from); 
    print '<script type="text/javascript">'; 
    print 'alert("Mail envoyé")'; 
    print '</script>'; 
exit;
    } 
}   
?>

答案 1 :(得分:0)

这是因为您使用$_REQUEST['action']

提交表单后,您隐藏的字段action变为$_REQUEST['action'];

在您提交表单后,您会$action = $_REQUEST['action'];成为submit

您应该在$_REQUEST['action']显示表单的空白值。

解决方案:

1)修改if ($action == "submit")

2)或者,将空白值分配给action(隐藏)字段