创建一个PHP电子邮件脚本和表单

网站上的表单除了可以联系网站管理员之外,还可以用于许多目的。 在之前的文章中,我介绍了如何在PHP中创建功能齐全的联系表,以及如何构建自己的验证码并将其集成到联系表中

在本教程中,我们的重点是在PHP中创建表单,这些表单可用于其他目的,例如收集有关求职者的信息,预订酒店房间或从客户那里获取有关婚姻事件的信息。

为您的表格选择正确的字段

在联系表单教程中,我们了解到,不同的组织和网站很可能希望从与之联系的人们那里获取特定信息,以便以最佳方式为他们提供帮助。 例如,学校网站上的联系表可能会要求父母提供有关其子女在该学校就读的信息。 同样,购物网站上的联系表可能会收集有关人们最后购买的产品的信息,以便为他们提供更好的服务。

如果联系表单在不同的网站和组织之间可能相差很大,则可以合理地假设应该用于完全不同目的的表单具有非常不同的领域。 例如,您很可能会问预订酒店房间的人是否将由其他成人或儿童陪同。 问求职者的同一件事是没有道理的。

遵循本教程时,这是要记住的重要事项。 创建表单,收集所有信息并通过电子邮件将其发送到某个地方的基本概念将保持不变,但是几乎可以肯定,需要修改代码才能适合您的情况。 您可能想要向表单添加不同的输入字段,并为这些字段分配不同的名称。 然后,这将影响后端的PHP代码。 如果您在表单中进行更改,请确保还更新了PHP代码。

创建一个HTML表单

在本教程中,我们将创建一个表单来预订酒店房间作为示例。 为简单起见,我们将不使用任何其他JavaScript或PHP库。

考虑到这一点,让我们编写表单的标记。 我们需要询问预订人员的姓名,电子邮件地址和电话号码。 之后,我们要求他们提供有关陪同他们的儿童和成人人数,入住和退房日期以及他们喜欢的房间类型的详细信息。 最后,我们将问他们在到达之前是否还有其他任何已知的信息。

<form action="reservation.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="phone">Your Phone</label>
    <input type="tel" id="phone" name="visitor_phone" placeholder="498-348-3872" pattern=(\d{3})-?\s?(\d{3})-?\s?(\d{4}) required>
  </div>
  <hr>
  <div class="elem-group inlined">
    <label for="adult">Adults</label>
    <input type="number" id="adult" name="total_adults" placeholder="2" min="1" required>
  </div>
  <div class="elem-group inlined">
    <label for="child">Children</label>
    <input type="number" id="child" name="total_children" placeholder="2" min="0" required>
  </div>
  <div class="elem-group inlined">
    <label for="checkin-date">Check-in Date</label>
    <input type="date" id="checkin-date" name="checkin" required>
  </div>
  <div class="elem-group inlined">
    <label for="checkout-date">Check-out Date</label>
    <input type="date" id="checkout-date" name="checkout" required>
  </div>
  <div class="elem-group">
    <label for="room-selection">Select Room Preference</label>
    <select id="room-selection" name="room_preference" required>
        <option value="">Choose a Room from the List</option>
        <option value="connecting">Connecting</option>
        <option value="adjoining">Adjoining</option>
        <option value="adjacent">Adjacent</option>
    </select>
  </div>
  <hr>
  <div class="elem-group">
    <label for="message">Anything Else?</label>
    <textarea id="message" name="visitor_message" placeholder="Tell us anything else that might be important." required></textarea>
  </div>
  <button type="submit">Book The Rooms</button>
</form>

我们使用了两种基本模式来检查所提供的姓名和电话号码是否有效。 电话号码遵循不同的格式,具体取决于区域设置。 这意味着您将必须相应地更新pattern属性的值。

我们还将成人和儿童的最小值分别设置为1和0。 这样,我们可以防止人们错误地添加负值。

您可以在此表单中为酒店提供的其他服务添加更多元素,例如接送,客房服务等。

现在,访客可以将入住和退房日期都设置为过去的值。 我们可以通过简单地在入住和退房日期上设置min属性的值来避免这种情况。 在我们的情况下,我们会将最低入住日期设置为当天。 退房日期的min属性的值将是入住日期。

下面JavaScript代码将为我们处理所有逻辑。 月份是从零开始的,因此我们将1添加到返回值中以获得实际月份。 返回的日期值可以是1到31之间的任何整数,具体取决于当前时间。

当日期和月份值均为一位数字时,将用额外的0填充它们,以便最终的字符串保持有效格式。

var currentDateTime = new Date();
var year = currentDateTime.getFullYear();
var month = (currentDateTime.getMonth() + 1);
var date = currentDateTime.getDate();

if(date < 10) {
  date = '0' + date;
}
if(month < 10) {
  month = '0' + month;
}

var dateTomorrow = year + "-" + month + "-" + date;
var checkinElem = document.querySelector("#checkin-date");
var checkoutElem = document.querySelector("#checkout-date");

checkinElem.setAttribute("min", dateTomorrow);

checkinElem.onchange = function () {
    checkoutElem.setAttribute("min", this.value);
}

以下CodePen演示向我们展示了添加上述标记和JavaScript功能后表单的行为。

使用PHP通过电子邮件发送表单数据

最后一步涉及从表单中收集所有数据,然后通过电子邮件将其发送给相关人员。 这实际上很容易做到。 首先,我们使用$_POST变量收集所有信息。 获得所需的信息后,我们将对其进行清理以清除任何恶意软件。 最后,我们创建HTML电子邮件的正文,然后使用PHP中的mail()函数将其发送。

以下代码将进入一个名为Reservation.php的文件。 如果您在上一节中更改了表单的action属性的值,则文件名将有所不同。

<?php

if($_POST) {
    $visitor_name = "";
    $visitor_email = "";
    $visitor_phone = "";
    $total_adults = "";
    $total_children = "";
    $checkin_date = "";
    $checkout_date = "";
    $room_type = "";
    $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['visitor_phone'])) {
        $visitor_phone = filter_var($_POST['visitor_phone'], FILTER_SANITIZE_NUMBER_INT);
    }
    
    if(isset($_POST['total_adults'])) {
        $total_adults = filter_var($_POST['total_adults'], FILTER_SANITIZE_NUMBER_INT);
    }

    if(isset($_POST['total_children'])) {
        $total_children = filter_var($_POST['total_children'], FILTER_SANITIZE_NUMBER_INT);
    }

    if(isset($_POST['checkin'])) {
        $checkin_date = filter_var($_POST['checkin'], FILTER_SANITIZE_NUMBER_INT);
    }

    if(isset($_POST['checkout'])) {
        $checkout_date = filter_var($_POST['checkout'], FILTER_SANITIZE_NUMBER_INT);
    }

    if(isset($_POST['room_preference'])) {
        $room_type = filter_var($_POST['room_preference'], FILTER_SANITIZE_STRING);
    }
    
    if(isset($_POST['visitor_message'])) {
        $visitor_message = htmlspecialchars($_POST['visitor_message']);
    }


    $recipient = "booking@demo.com";
    
    $headers  = 'MIME-Version: 1.0' . "\r\n"
    .'Content-type: text/html; charset=utf-8' . "\r\n"
    .'From: ' . $visitor_email . "\r\n";

    $email_content = "<html><body>";
    $email_content .= "<table style='font-family: Arial;'><tbody><tr><td style='background: #eee; padding: 10px;'>Visitor Name</td><td style='background: #fda; padding: 10px;'>$visitor_name</td></tr>";
    $email_content .= "<tr><td style='background: #eee; padding: 10px;'>Visitor Email</td><td style='background: #fda; padding: 10px;'>$visitor_email</td></tr>";
    $email_content .= "<tr><td style='background: #eee; padding: 10px;'>Visitor Phone</td><td style='background: #fda; padding: 10px;'>$visitor_phone</td></tr>";
    $email_content .= "<tr><td style='background: #eee; padding: 10px;'>Total Adults</td><td style='background: #fda; padding: 10px;'>$total_adults</td></tr>";
    $email_content .= "<tr><td style='background: #eee; padding: 10px;'>Total Children</td><td style='background: #fda; padding: 10px;'>$total_children</td></tr>";
    $email_content .= "<tr><td style='background: #eee; padding: 10px;'>Check-in Date</td><td style='background: #fda; padding: 10px;'>$checkin_date</td></tr>";
    $email_content .= "<tr><td style='background: #eee; padding: 10px;'>Check-out Date</td><td style='background: #fda; padding: 10px;'>$checkout_date</td></tr>";
    $email_content .= "<tr><td style='background: #eee; padding: 10px;'>Room Type</td><td style='background: #fda; padding: 10px;'>$room_type</td></tr></tbody></table>";

    $email_content .= "<p style='font-family: Arial; font-size: 1.25rem;'><strong>Special Request from $visitor_name &mdash;</strong><i> $visitor_message</i>.</p>";
    $email_content .= '</body></html>';

    echo $email_content;
    
    if(mail($recipient, "Hotel Room Reservation Confirmation", $email_content, $headers)) {
        echo '<p>Thank you for booking a hotel room with us. We hope you have a pleasant stay.</p>';
    } else {
        echo '<p>We are sorry but the booking confirmation email did not go through.</p>';
    }
    
} else {
    echo '<p>Something went wrong</p>';
}

?>

我们首先清理访问者的姓名和电子邮件地址。 之后,我们使用FILTER_SANITIZE_NUMBER_INT标志对入住日期,退房日期,成人数量和儿童数量进行消毒。 该标志从输入中删除所有字符,数字和+-符号除外。 它对日期消毒非常有用,因为我们希望它们的格式为YYYY-MM-DD,即数字和减号。 您应该浏览PHP文档,以了解所有清除验证标志。

清理完所有输入后,便开始准备标题。 通过在电子邮件标题中包含Content-type: text/html ,我们将能够在电子邮件中使用HTML标签。 在本教程中,我们保持简单,并在表中显示所有用户数据。 下表下方显示了预订酒店房间的人留下的任何特殊消息。

最后的想法

在本教程中,我们介绍了创建PHP电子邮件脚本的基本知识,该脚本可从人们填写的表单发送数据。 创建表单时,正确布置元素并确保仅询问实际需要的信息非常重要。 创建元素布局不正确的不必要的长表单会阻止用户填写表单。 您还应该确保每个元素都正确命名。 正确清理用户输入也很重要。

如果您对本教程有任何疑问,请在评论中让我知道。

翻译自: https://code.tutsplus.com/tutorials/create-a-php-email-script-and-form--cms-32487

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值