我的php联系表单有些问题

时间:2015-02-05 15:59:52

标签: php html forms contact

我正在尝试使用PHP创建一个联系表单,并且存在一些问题。我是PHP的新手,所以无法理解它。如果没有应用验证代码,则表单有效,但是当我应用验证代码以便可以使某些字段成为必要时,表单不能正常工作。此外,当我将任何必填字段留空时,它们表单不会显示任何错误消息。有人可以告诉我们问题是什么。

HTML表单



<form action="mail.php" method="POST" >
Name: <input type="text" name="name"><br/><br/> 
Email: <input type="email" name="email"><br/><br/> 
Phone Number: <input type="text" name="phone_number"><br/><br/>
Website: <input type="text" name="website"><br/><br/>
Message: <textarea name="message" rows="6" cols="25"></textarea><br/><br/> 
<input type="submit" value="Submit">
</form>
&#13;
&#13;
&#13;

主要PHP脚本文件

<?php
if(isset ($_POST['submit'])) {
    $errors = array();

    if(!empty ($_POST ['name'])) {
        $name = $_POST ['name'];
        } else {
            $errors[] = "You forgot to enter your Name.";
        }

    if(!empty ($_POST ['email'])) {
        $email = $_POST ['email'];
        } else {
            $errors[] = "You forgot to enter your Email.";
        }

    if(!empty ($_POST ['message'])) {
        $message = $_POST ['message'];
        } else {
            $errors[] = "You forgot to enter your Message.";
        }

$phone_number = $_POST['phone_number'];
$website = $_POST['website'];
$formcontent = "From: $name \n Email: $email \n Phone Number: $phone_number \n Website: $website \n Message: $message";
$recipient = "yourmail@emial.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($formcontent, $recipient, $subject, $mailheader);
    if(isset($_POST['submit'])) {
        if(!empty($errors)) {
            foreach ($errors as $msg) 
                { 
                    echo '<li>'. $msg . '</li>';
                }
        } else {
            echo "Thank You";
        }
    }
}
?>

更新 感谢您的回复人员,我真的忘了提交按钮的名称属性。这有助于显示一些结果。但是现在有些通知显示未定义的变量,如$formcontent$mailheader行的电子邮件,消息(如果我只提供表单中的名称和点击提交按钮)。

2 个答案:

答案 0 :(得分:2)

您的代码存在一些问题。

if(isset ($_POST['submit']))你没有提交输入的name属性来支持它,因此该条件语句中的任何内容都不会被执行。

使用error reporting后,会抛出“未定义的索引提交...”警告/通知。

所以你需要添加一个:

<input type="submit" value="Submit" name="submit">
                                    ^^^^^^^^^^^^^

然后您的mail()参数的顺序不正确。

mail($formcontent, $recipient, $subject, $mailheader);

应该是:

  • 要:
  • 主题:
  • 消息:
  • 接头

将其更改为:

mail($recipient, $subject, $formcontent, $mailheader);

有关mail()的更多信息,请访问PHP.net上的以下链接:

修改

您还需要将mail()功能放在不同的地方,在那里您有“谢谢”。否则,即使未在表单中输入电子邮件地址,邮件仍会被发送出去,因此在“发件人”中显示为“未知发件人”。如果没有找到错误,请在mail()中放置else

if(isset($_POST['submit'])) {
    if(!empty($errors)) {
        foreach ($errors as $msg) 
            { 
                echo '<li>'. $msg . '</li>';
            }
    } else {

mail($recipient, $subject, $formcontent, $mailheader);

        echo "Thank You";
    }
}

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

答案 1 :(得分:0)

您还可以向表单添加反垃圾邮件

$q1 = mt_rand(1,10);
$q2 = mt_rand(1,10);
$answer = $q1 + $q2;

<form action="mail.php" method="POST" >
Name: <input type="text" name="name"><br/><br/> 
Email: <input type="email" name="email"><br/><br/> 
Phone Number: <input type="text" name="phone_number"><br/><br/>
Website: <input type="text" name="website"><br/><br/>
Message: <textarea name="message" rows="6" cols="25"></textarea><br/><br/> 
*What is <?php echo $q1 ." + ". $q2;?>? (Anti-spam):
         <input type="number" required name="Human" ><br>
 <!--question-->
          <input name="answer" id="subject" type="hidden" value="<?php echo "$answer"; ?>">
<input type="submit" value="Submit">
</form>

在您的表单中,您可以检查答案是否正确

<?php
 $answer = $_POST['answer'];
 if(isset ($_POST['submit']) && $_POST['human'] == answer) {
     your mail procesing here
 }