我正在尝试为我正在构建的网站制作表单。我对编码很新,但我之前已经完成了一些简单的网站,并且对网络编码有非常基本的了解。我有两个问题。 1)我正在尝试对此表单进行编码,以便如果两个电子邮件字段不匹配,则会以某种方式显示一条消息,通知查看者。 2)发送按钮将在电子邮件中发送信息但两个部分不起作用:复选框数组不起作用(它只说“数组”,我希望它用逗号分隔的值),我不知道如何将其重定向到单独的成功页面(即contact_success.html)。单独给我答案很好,但是如果你能告诉我为什么你使用特定代码那就太棒了。
以下是整个表单的HTML代码:
<form name="contact" action="contactProcess.php" method="post" onSubmit="return validateForm()">
<table width="100%" cellspacing="6">
<tr>
<th width="30%" class="th_contact">*Name:</th>
<td width="70%"><input type="text" size="50" name="name"></td>
</tr>
<tr>
<th class="th_contact">*Your email address:</th>
<td><input type="text" size="50" name="email"></td>
</tr>
<tr>
<th class="th_contact">*Confirm email address:</th>
<td><input type="text" size="50" name="email2"></td>
</tr>
<tr>
<th class="th_contact">How did you hear about us?</th>
<td><input type="radio" name="referral" value="friend or family">Friend or Family<br />
<input type="radio" name="referral" value="veterinarian">Veterinarian<br />
<input type="radio" name="referral" value="flyer or mailer">Flyer or Mailer<br />
<input type="radio" name="referral" value="humane society or similar facility">Humane Society or Similar Facility<br />
<input type="radio" name="referral" value="walked or drove by">Walked or Drove By<br />
<input type="radio" name="referral" value="other">Other<br />
</td>
</tr>
<tr>
<th valign="top"><h5>What type of pet do you have?</h5></th>
<td><input type="checkbox" name="pet[]" value="dog">Dog<br />
<input type="checkbox" name="pet[]" value="cat">Cat<br />
<input type="checkbox" name="pet[]" value="bird">Bird<br />
<input type="checkbox" name="pet[]" value="fish">Fish<br />
<input type="checkbox" name="pet[]" value="reptile">Reptile<br />
<input type="checkbox" name="pet[]" value="small animal">Small Animal<br />
</td>
</tr>
<td align="left"><input type="submit" class="button" value="submit">
*Required Fields</td>
</tr>
</table>
</form>
这是PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Contact PHP</title>
<link href="A4P.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php {
//Set up message body
$message = "Form Submitted on: " . date("m/d/y") . "\n";
$message .= "\n";
$message .= "Name: " . $_POST['name'] . "\n";
$message .= "Email Address: " . $_POST['email'] . "\n\n";
$message .= "Referred by: " . stripslashes($_POST['referral']) . "\n";
$message .= "Pets: " . $_POST['pet'];
//Set up email
$to = "example@example.com, <" . $_POST['email'] . ">";
$subject = "New Email Club Entry";
$headers = "From: " . "All 4 Pets Website";
//Send email
mail($to,$subject,$message,$headers);
}
?>
</body>
</html>
以下是电子邮件的重要性:
表格提交日期:11/18/13
姓名:布拉德摩尔
电子邮件地址:123@yahoo.com
提及者:走路或开车
宠物:数组
答案 0 :(得分:1)
if ($_POST['email'] != $_POST['email2'])
{
//alert user
}
不能像字符串一样转出数组。复选框的HTML应该是name =“pets”而不是“pets []”我相信。
$str = implode(" , " , $_POST['pets']);
//now it's a string
答案 1 :(得分:0)
您正在寻找的是验证您的代码。此链接将提供验证代码所需的详细信息,无论您选择在同一页面上验证还是在不同页面上验证都取决于您。如果您对此有更多疑问,请评论此答案。
http://www.w3schools.com/php/php_form_validation.asp
在同一页面上进行验证意味着您需要检查是否首次按下提交按钮,即
if(isset($_POST['button'])) {
//your code here
}
然后你想检查帖子中的电子邮件是否相同:
if(isset($_POST['button'])) {
if($_POST['email1'] != $_POST['email2']{
//do yourself a favor and use an array to store the errors in
}
else{
//you can choose to let the user know that it was a success or nothing at all.
}
}
验证您的PHP代码可以让您检查以确保用户正在执行您最终希望他们执行的操作。如果你没有验证,从技术上讲,提交按钮是“发布”但实际上没有做任何事情,而不是事后要求的功能。将验证代码放在标签上方的新标签集中,或者简单地放在您已编写的所有代码之下。除此之外,如果您在同一页面上进行验证,则需要将标记更改为:
<form action="" method="post">
通过这种方式,它知道在同一页面上进行验证,而您不会选择在另一个页面上进行验证。
答案 2 :(得分:0)
要检查两个变量是否匹配,只需使用if
语句:
if($_POST['email1']==$_POST['email2']) {
//emails match, continue with form submission
} else {
//emails do not match, show error
}
要显示选中的复选框,请使用此代码将值放入单个字符串中。
$checked = implode(" , ", $_POST['pets']);
//$checked would be values of selected checkboxes, each separated by a comma
要在成功提交后重定向到页面,请使用以下代码:
header("Location: success.html");
您应该进行验证并清理您的输入,但这是您要求的。 :)
答案 3 :(得分:0)
<强> 1)强>
由于您已在表单中进行validateForm()
调用,因此我假设您要使用JavaScript检查邮件地址。
首先你应该改变你的形式:
onsubmit="return validateForm(email.value, email2.value);"
在JavaScript代码中,您可以简单地创建一个这样的函数:
function validateForm(email1, email2) {
return 0 == email1.localeCompare(email2);
}
也许您还想检查电子邮件字段是否为空或者您的宠物是否正确选择 - 所有这些检查也可以在该功能中实施。
(另见Optimum way to compare strings in Javascript?)
<强> 2)强>
A)
要有逗号分隔的宠物列表,请尝试PHP内爆方法:
$message .= "Pets: " . implode(", ", $_POST['pet']);
这里的问题是你直接打印数组,而不是它的值。使用implode,您可以获取所有值,在它们之间添加,
并从中形成一个字符串。
如何打印所有值并不是那么重要,但是数组之间的概念和它的值之间的概念很重要。也许你应该尝试print($_POST['pet']);
和print_r($_POST['pet'])
来看看差异。并阅读有关这些功能的PHP文档。
b)中
重定向有点棘手。您可以使用这样的html-redirect:
<meta http-equiv="refresh" content="0; url=http://example.com/" />
0
是重新连接http://example.com/
之前的时间(以秒为单位)。
(另见Redirect from an HTML page)
但是您可能要先检查表单并确保在重定向之前发送电子邮件。这应该通过发送新标题来完成。
header("Location: http://example.com/");
这里的问题是必须在发生任何输出之前发送标题信息。
(另见How to fix "Headers already sent" error in PHP)
要在您的示例中实现此目的,您只需删除邮件创建周围的HTML部分即可。然后,您只需将表单提交至contactProcess.php,然后从该页面提交至contact_success.html。
<?php
//Set up message body
$message = "Form Submitted on: " . date("m/d/y") . "\n";
$message .= "\n";
$message .= "Name: " . $_POST['name'] . "\n";
$message .= "Email Address: " . $_POST['email'] . "\n\n";
$message .= "Referred by: " . stripslashes($_POST['referral']) . "\n";
$message .= "Pets: " . implode(", ", $_POST['pet']);
//Set up email
$to = "\"Some person\" <example@example.com>, \"" . $_POST['name'] . "\" <" . $_POST['email'] . ">";
$subject = "New Email Club Entry";
$headers = "From: " . "\"All 4 Pets Website\" <all4pets@example.com>";
//Send email
mail($to, $subject, $message, $headers);
// Redirect to contact_success.html
header("Location: contact_success.html");
// maybe you have to adjust the path
?>
此时还有两个提示:
1:你应该决定你的文件名的设计模式,并使用单词之间的下划线或用camel case区分它们(在你的情况下你使用带有下划线的contact_success.html和camel case中的contactProcess.php) 。你决定哪个并不重要,但你应该努力保持一致。这使您和其他人更容易阅读代码,组织文件等。
2:电子邮件中的“发件人:”信息应格式为"All 4 Pets Website" <noreply@example.com>
或类似内容。如果您保留All 4 Pets Website
All@host.com, 4@host.com, Pets@host.com, Website@host.com
,您(以及您的客户)可能会收到“来自”"Name" <mail@example.com>
的电子邮件。因此,请尝试使用格式header("Location: http://example.com/");
。我在上面的代码中包含了你,你也可以看到如何逃避那里的引号。只需根据您的需要更新地址和名称。
第3)强> 为什么这些代码?
JavaScript,因为您已经为它提供了模板。我当然会添加更多检查,但我更喜欢在PHP脚本中进行评估 - 因为在互联网上存在没有JavaScript的用户。
内爆?因为在我写这篇文章时xd6_已经提供了答案,所以我只是坚持这一点。我可能会想出一些像for-loop这样复杂的东西。
<?php
if(isset($_POST['submit'])) echo "<p>Form submitted!</p>";
if(isset($_POST['arr'])) {
echo "<p>Received an array: <br /><br />";
echo implode(", ", $_POST['arr']);
echo "<br /><br />";
print_r($_POST['arr']);
echo "</p>";
}
?>
<form method="post" action="">
<input type="checkbox" value="checkbox1" name="arr[]" />
<input type="checkbox" value="checkbox2" name="arr[]" />
<input type="checkbox" value="checkbox3" name="arr[]" />
<input type="checkbox" value="checkbox4" name="arr[]" />
<input type="submit" value="submit" name="submit" />
</form>
只是因为我总是将其用于重定向。
<强> 4)强>
email.value
这个简单的示例显示了一个带有几个复选框的表单。只需将代码复制到PHP文件中即可试用。
<强> 5)强>
如评论中所述,我在JS中犯了一个错误:当然你必须使用<script type="text/javascript">
function validateForm(str1, str2) {
/* this if statement is just for demonstration purposes */
if(0 != str1.localeCompare(str2))
document.getElementById('error').innerHTML = "Text fields are not the same!";
return 0 == str1.localeCompare(str2);
}
</script>
<?php
if(isset($_POST['submit'])) echo "<p>Form submitted!</p>";
if(isset($_POST['arr'])) {
echo "<p>Received an array: <br /><br />";
echo implode(", ", $_POST['arr']);
echo "<br /><br />";
print_r($_POST['arr']);
echo "</p>";
}
?>
<div id="error"></div>
<form method="post" action="" onsubmit="return validateForm(str1.value, str2.value);">
<input type="checkbox" value="checkbox1" name="arr[]" />
<input type="checkbox" value="checkbox2" name="arr[]" />
<input type="checkbox" value="checkbox3" name="arr[]" />
<input type="checkbox" value="checkbox4" name="arr[]" />
<input type="text" name="str1" />
<input type="text" name="str2" />
<input type="submit" value="submit" name="submit" />
</form>
,而不是字段本身进行简单的比较。我改变了上面的代码。下面我将示例从4)扩展到也提供了一些表单检查。再一次,只需将其复制到PHP文件即可。
"Name" <mail@example.com>
<强> 6)强>
更新了我的2)b)2。声明。 {{1}}是要走的路。