PHP表单仍然在发送错误后发送

时间:2012-10-15 15:21:12

标签: php forms

我是一个PHP新手,所以请耐心等待这个相当简单的问题。

我有一个像这样的PHP表单设置>>

<?php
    if($_POST){
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $comments = $_POST['comments'];

        if($comments)
            $error = "There was an error, please give us a call at ### ###-####.";
        else{
            if($name=="Name" || $email=="Email" || $message=="Message"){
                $error = "All fields are required, please fill them out and try again.";
            }else
            $header = "From: $name <$email>";
                $message = "Name: $name\n\nEmail: $email\n\nMessage: $message";
                if(mail("email@domain.com", 'Form Submission', $message, $header))
                    $success = "Thanks for sending us your message, we'll get back to you shortly.";
                else
                    $error = "There was an error, please give us a call at ### ###-####.";
        }
        if($error)
            echo '<div class="msg error">'.$error.'</div>';
        elseif($success)
            echo '<div class="msg success">'.$success.'</div>';
    }
?>

基本思想是表单在每个字段中预先填充了描述性文本,但是当您单击它们时,它们将通过Javascript清除。我想阻止人们在没有填写表格的情况下按下发送,因此“if($ name ==”Name“|| $ email ==”Email“|| $ message ==”Message“){”bit 。但是,当该消息正在运行时,表单仍在提交。为什么是这样。另请注意,“评论”字段实际上是蜜罐。谢谢!

4 个答案:

答案 0 :(得分:5)

因为php是服务器端的。您需要查看javascript验证以获得所需内容。要使用php验证,您必须提交表单。

一个tutorial,但我推荐Jquery validation

答案 1 :(得分:0)

“我想阻止人们在不填写表格的情况下按下发送,因此”if($ name ==“Name”|| $ email ==“Email”|| $ message ==“Message” ){“

您需要做的就是禁用提交按钮客户端,直到满足正确的验证,然后验证服务器端。正如@Iznogood所说,这就是你犯错误的原因

答案 2 :(得分:0)

就像lznogood所说,PHP验证服务器上的表单,因此您需要在PHP处理它之前将信息发送到服务器。

如果您希望在将表单发送到服务器之前在用户端进行检查,您应该使用JavaScript来执行此操作(jQuery是一个很好的工具),在用户端检查后,您可以决定是否将表单发送到服务器。

答案 3 :(得分:0)

虽然这不是您问题的答案,但您可能会对新的html5功能placeholder感兴趣。阅读它here。您可以在here(愚蠢的Internet Explorer!)中查看它可以使用的浏览器。 5年前,我会把这些“提示”作为价值,这是一个痛苦的验证。 placeholder使得它变得容易太多了。您的代码如下:

<input type="text" name="email" placeholder="Enter Your Email Here" value="">

请注意,值为空。你可以省略value属性,我把它留下来显示它在这里不需要。

至于你原来的问题的答案,其他人都是正确的,javascript是要走的路。