我正在尝试使用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;
主要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
行的电子邮件,消息(如果我只提供表单中的名称和点击提交按钮)。
答案 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
}