无论您拥有或管理哪种类型的网站,您都可能需要联系表格。 联系表格可以帮助您的访问者在使用您的网站时要求报价,询问信息或分享他们面临的任何提示或问题。
在本教程中,我们的重点是从头到尾用PHP创建功能齐全的联系表单。 我们将从需要添加的所有字段的标记以及联系表格的基本样式开始。 之后,我们将继续使用PHP代码来实现其功能。
但是,如果您想了解联系表的创建方式,请继续阅读! 这可能比您想象的要容易。
我们HTML联系人表格的标记
创建我们自己的联系表单的第一步是对标记进行编码。 一旦有了我们想要在表单中包含的所有元素的列表,我们将开始这样做。 我们需要一个输入字段作为与我们联系的人的姓名,我们需要一个字段作为他们的电子邮件地址,以便在需要时可以将回复发送给他们。 由于人们与您联系的原因,我们还需要一个输入字段,以及一个供用户键入消息的textarea
。
如果您管理的网站非常受欢迎,那么您将通过联系表收到很多电子邮件。 为了确保合适的人能够阅读这些电子邮件并快速做出响应,您需要更多字段。 例如,您可以添加一个字段,该字段可以确定访客希望联系哪个部门,例如市场营销,支持或计费。 以后可以使用此信息适当地路由电子邮件。 最终,这可以帮助您更快地答复并更有效地分类电子邮件。
您添加到联系表单中的字段数取决于您所运行的网站的类型,但请确保不要过度使用它。 强迫访问者填写过多的详细信息可能会阻止他们完全与您联系。
让我们编写HTML代码,以将我刚才提到的所有字段添加到联系表单中。
<form action="contact.php" method="post">
<div class="elem-group">
<label for="name">Your Name</label>
<input type="text" id="name" name="visitor_name" placeholder="John Doe" pattern=[A-Z\sa-z]{3,20} required>
</div>
<div class="elem-group">
<label for="email">Your E-mail</label>
<input type="email" id="email" name="visitor_email" placeholder="john.doe@email.com" required>
</div>
<div class="elem-group">
<label for="department-selection">Choose Concerned Department</label>
<select id="department-selection" name="concerned_department" required>
<option value="">Select a Department</option>
<option value="billing">Billing</option>
<option value="marketing">Marketing</option>
<option value="technical support">Technical Support</option>
</select>
</div>
<div class="elem-group">
<label for="title">Reason For Contacting Us</label>
<input type="text" id="title" name="email_title" required placeholder="Unable to Reset my Password" pattern=[A-Za-z0-9\s]{8,60}>
</div>
<div class="elem-group">
<label for="message">Write your message</label>
<textarea id="message" name="visitor_message" placeholder="Say whatever you want." required></textarea>
</div>
<button type="submit">Send Message</button>
</form>
在继续进行下一步之前,我想快速总结一下上面标记中一些重要属性的含义。 表单中的action
属性确定了表单数据需要发送到的位置。 如果您没有action
属性,则数据将发送回相同的URL。 在这里,我们使用contact.php ,因此表单数据将发送到该脚本。
表单中不同输入元素的name
属性用于访问服务器端的元素值。 例如,在上述表单中,您可以使用contact.php中的 $_POST['visitor_name']
获得与您联系的访问者的姓名。
我们使用placeholder
属性为用户提供表单中每个字段的预期输入的基本概念。 required
属性可确保在用户单击表单上的“提交”按钮之前,不会将任何重要字段留为空白。
pattern
属性用于对某些字段中可以使用的值类型实施一些规则。 在我们的情况下,我们仅允许用户在提交的名称中使用字母和空格字符。 我们还将可接受的字符总数限制为3到20(含3和20)之间。 您使用的模式将取决于您希望用户输入的类型。
以下CodePen演示通过上述标记和一点CSS向我们展示了我们的联系表单。
使用PHP使我们HTML联系人表单起作用
目前,我们的表单没有任何用处。 访客可以填写它并单击“发送消息”按钮,但是我们不会收到任何东西,因为没有服务器端代码可以处理表单提供的信息。 在本节中,我们将使用PHP使联系表单起作用。
首先创建一个contact.php文件,并将以下代码放入其中。
<?php
if($_POST) {
$visitor_name = "";
$visitor_email = "";
$email_title = "";
$concerned_department = "";
$visitor_message = "";
if(isset($_POST['visitor_name'])) {
$visitor_name = filter_var($_POST['visitor_name'], FILTER_SANITIZE_STRING);
}
if(isset($_POST['visitor_email'])) {
$visitor_email = str_replace(array("\r", "\n", "%0a", "%0d"), '', $_POST['visitor_email']);
$visitor_email = filter_var($visitor_email, FILTER_VALIDATE_EMAIL);
}
if(isset($_POST['email_title'])) {
$email_title = filter_var($_POST['email_title'], FILTER_SANITIZE_STRING);
}
if(isset($_POST['concerned_department'])) {
$concerned_department = filter_var($_POST['concerned_department'], FILTER_SANITIZE_STRING);
}
if(isset($_POST['visitor_message'])) {
$visitor_message = htmlspecialchars($_POST['visitor_message']);
}
if($concerned_department == "billing") {
$recipient = "billing@domain.com";
}
else if($concerned_department == "marketing") {
$recipient = "marketing@domain.com";
}
else if($concerned_department == "technical support") {
$recipient = "tech.support@domain.com";
}
else {
$recipient = "contact@domain.com";
}
$headers = 'MIME-Version: 1.0' . "\r\n"
.'Content-type: text/html; charset=utf-8' . "\r\n"
.'From: ' . $visitor_email . "\r\n";
if(mail($recipient, $email_title, $visitor_message, $headers)) {
echo "<p>Thank you for contacting us, $visitor_name. You will get a reply within 24 hours.</p>";
} else {
echo '<p>We are sorry but the email did not go through.</p>';
}
} else {
echo '<p>Something went wrong</p>';
}
?>
我们已经对用户输入进行了一些客户端验证。 但是,进行服务器端验证也总是更安全。 我们使用filter_var()
函数来清理用户提供的名称。 以类似的方式,我们还清理了$email_title
和$concerned_department
的值。 您可以使用 filter_var()
函数来验证或清除所有类型的用户输入。 我们还使用htmlspecialchars()
函数对发送给我们的访客消息中的所有特殊HTML字符进行编码 。
$recipient
的值基于变量$concerned_department
的值。 这样,我们确保只有真正应该调查此事的人才能收到该电子邮件。
最后,我们使用mail()
函数发送一封电子邮件 ,其中包含访问者希望我们知道的信息。 成功发送电子邮件后,我们会让访问者知道我们已经收到了他们的电子邮件,并将很快与他们联系。
处理用户数据或输入时,安全性至关重要。 您是否应该验证或清除用户输入取决于输入是什么以及如何使用它。 验证只是检查用户输入是否遵循某些规则。 例如,验证可以检查一个人的名字不包含任何数字。 清理用于删除构成安全风险的任何令人反感的字符。 例如,试图通过表单与您联系的恶意用户可能会在textarea
添加script
标签,以使您下载有害脚本。 当您的网站有每个人都可以访问的公共论坛时,这尤其令人担忧。
但是,在删除用户输入中不需要的字符时必须非常小心。 例如,您可能决定使用filter_var($user_input, FILTER_SANITIZE_STRING);
在某些输入上剥离所有标签并编码特殊字符 。 但是,此标志还会剥夺合法用户输入的无害字符。 这是一个例子:
<?php
$string = 'One of your posts about inequalities mentioned that when x < y and y < z then x < z.';
// Output: One of your posts about inequalities mentioned that when x
echo filter_var($string, FILTER_SANITIZE_STRING);
// Output: One of your posts about inequalities mentioned that when x < y and y < z then x < z.
echo htmlspecialchars($string);
?>
如果您的网站上有很多与数学相关的主题,则用户在联系表格或论坛帖子中写<或>相对来说比较普遍。 在这种情况下,将FILTER_SANITIZE_STRING
标志与filter_var()
函数一起使用将删除消息中的必要信息。
我要说明的一点是,即使您应该始终验证或清理用户数据,也要确保在此过程中不要剥离重要信息。
最后的想法
熟悉基础知识后,使用PHP创建基本联系表单相对简单。 首先,编写用于创建用于输入信息(例如用户名,电子邮件地址,电话号码等)的输入元素所需HTML。下一步是编写CSS,以确保联系表单与网站的其余部分完美融合。 最后一步涉及编写PHP代码,该代码将从联系表中获取信息并将其安全地邮寄给您。
目的是确保在将不同的表单元素进行布局时不会使人们感到困惑,并且在将您的输入发送给相关方之前,会对用户的输入进行清理和验证。 如果这一切对您来说都是新手,或者您不想花费大量时间创建具有专业外观的联系表单,则一定要查看这些顶级的联系表单PHP脚本 。
如果您有任何疑问,请随时在评论中让我知道。 我的下一个教程将向您展示如何实现自己的验证码,以帮助检查联系表单垃圾邮件。
翻译自: https://code.tutsplus.com/tutorials/create-a-contact-form-in-php--cms-32314