2015-02-05 83 views
0

我想使用PHP做一个联系表格,并且有一些问题。我是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>

主要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 = "[email protected]"; 
$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"; 
     } 
    } 
} 
?> 

UPDATE 谢谢您回复家伙,我几乎忘了具有提交按钮的名称属性。这有助于展示一些结果。但是现在一些通知显示未定义变量为$formcontent$mailheader行的电子邮件,消息(如果我仅提供表单中的名称并点击提交按钮)。

+0

既然你”重新使用'!empty',你最好把这个代码取出来,并使表单域成为'required'添加该属性,尤其是在使用HTML5的情况下。 – 2015-02-05 16:04:57

+0

'if(isset($ _POST ['submit']))'您没有提交的名称属性来支持它,因此它内部没有任何用处。在使用[错误报告](http://php.net/manual/en/function.error-reporting.php)后,会抛出未定义索引提交警告/通知。 – 2015-02-05 16:05:40

+0

您的提交按钮没有'name ='submit'',所以'$ _POST ['submit']'可能是空的。邮件的东西都应该在其他地方,你有'回声'谢谢你''因为你不想邮件,如果有错误。你不需要检查'ifset($ _ POST ['submit'])'两次是多余的 – 2015-02-05 16:06:03

回答

2

你的代码有几个错误。

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

已经使用error reporting,会抛出“Undefined index submit ...”警告/通知。

所以,你需要添加一个:

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

然后你有你的mail()参数,是不是在正确的顺序。

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

这应该是:

  • 为:
  • 主题:
  • 消息:

将其更改为:

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

欲了解更多有关mail(),请访问PHP.net以下链接:

编辑:

您还需要将mail()功能不同地方,你有你的“谢谢”。否则,即使没有在表格中输入电子邮件地址,邮件仍会被发送出去,因此在From中显示为“未知发件人”。如果没有发现错误,则将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到您的文件(S)的顶部,这将有助于找到错误。

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

// rest of your code 

旁注:错误报告只应在分期完成,并且从不生产。

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 
}