在PHP中创建联系表

无论您拥有或管理哪种类型的网站,您都可能需要联系表格。 联系表格可以帮助您的访问者在使用您的网站时要求报价,询问信息或分享他们面临的任何提示或问题。

在本教程中,我们的重点是从头到尾用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 &lt; y and y &lt; z then x &lt; 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值