【问题标题】:Reservation system with confirmation mail in PHPPHP 中带有确认邮件的预订系统
【发布时间】:2015-09-18 11:00:55
【问题描述】:

就像标题显示的那样,我正在使用 HTML/PHP 制作预订系统。首先需要填写一个 (HTML) 表单,并将这些值传递给 reservation-send.php 文件。该 .php 文件会生成一封电子邮件,其中包含表单中的几个值和一个确认链接(包括哈希码),该链接将发送给将要确认的人。当链接被按下时,它将触发另一个 .php 文件,bevestiging.php。该文件检查哈希码和电子邮件,如果正确,则发送另一封电子邮件以确认已完成。

但总是得到“错误!”。我认为我的 url 确认链接的输出是问题..(见图)

PHP - reservation-send.php

<?php
require_once 'inc/securimage/securimage.php';

/////////////////////////////////////
// Change this email address ////////
$email = "test@test.be"; //make this test@test.be on purpose ;)

/////////////////////////////////////

$required = array('day', 'month', 'year', 'hour', 'minutes', 'ampm', 'name', 'email', 'captcha', 'phone', 'amount');
$response = array('status' => 'failed', 'errors'=>array());

if(isset($_POST['reservation'])) {
    foreach($_POST['reservation'] as $field => $value) {
        //check required field if empty
        if($value == '' && in_array($field, $required)) {
            $response['errors'][$field] = $field;
        }
    }

    //validate email
    if(!isset($response['errors']['email'])) {
        if(!filter_var($_POST['reservation']['email'], FILTER_VALIDATE_EMAIL)) {
            $response['errors']['email'] = 'email';
        }
    }

    //validate captcha
    if(!isset($response['errors']['captcha'])) {
        $securimage = new Securimage();
        if ($securimage->check($_POST['reservation']['captcha']) == false) {
            $response['errors']['captcha'] = 'captcha';
        }
    }

}

if(empty($response['errors'])) {
    $response['status'] = 'success';

    $data = $_POST['reservation'];

    //Generate email link

        //save mail of who made the reservation - get from form
        $email_reservering =$data['email'];

        //generate hash code
        $hash = md5($email_reservering);

        //generate link with hash code
        $link = "http://lanes.be/baronie/bevestiging.php?email=”.urlencode($email_reservering).”&hash=$hash";

    $headers = "";
    $message .= "Dag Lode en Eva, via de website kregen jullie een nieuwe reservatie, gelieve de persoon zo snel mogelijk een bevestigingsmail te sturen!";
    $message .= "\n\n";
    $message = $data['message'];
    $message .= "\n\n";

    $message .= " Telefoon: " . $data['phone'];
    $message .= "\n\n";
    $message .= " Lunch/Diner: " . $data['booking-type'];
    $message .= "\n\n";
    $message .= " Aantal personen: " . $data['amount'];
    $message .= "\n\n";
    $message .= " Email: " . $data['email'];

    $message .= "\n\n";
    $message .= " Datum: " . $data['day'];
    $message .= "\n\n";
    $message .= " Maand: " . $data['month'];
    $message .= " " . $data['year'];
    $message .= "\n\n";
    $message .= " Tijdstip: " . $data['hour'] . " " . $data['minutes'] . " " . $data['ampm'];
    $message .= "\n\n\n\n";
    $message .= "<a href='".$link."'>Bevestig</a>";

    $subject = 'Nieuwe reservatie via de website';
    $headers = 'From: '. $data['email']. "\r\n" .'Reply-To: '. $data['email']. "\r\n" .'X-Mailer: PHP/' . phpversion();

    if (mail($email, $subject, $message, $headers)) {

    } else {
        $response['status'] = 'failed';
    }
}

echo json_encode($response);

PHP - bevestiging.php

<?php

//retrieve email and hash code from link
$email_reservering = urldecode($_GET['email_reservering']);
$hash = $_GET['hash'];

//check if hash code matches

if (md5($email_reservering) == $hash)
{
    //succes    
    $headers = "";
    $message .= "reservering bevestigd!";
    $message .= "\n\n";

    $subject = 'Bevestiging reservering';

    if (mail($email, $subject, $message, $headers)) {

    } else {
        $response['status'] = 'failed';
    }
}
else
{
    //error
    echo "error!";
}

?>

输出

错误原因(我认为)

$link = "http://lanes.be/baronie/bevestiging.php?email=”.urlencode($email_reservering).”&hash=$hash";

$message .= "<a href='".$link."'>Bevestig</a>";

【问题讨论】:

    标签: php html email


    【解决方案1】:

    $link 的构建方式错误。看看我替换的引号。 改成这样:

    $link = "http://lanes.be/baronie/bevestiging.php?email=".urlencode($email_reservering)."&hash=".$hash;
    

    另外,你不需要对$_GET变量进行urldecode

    【讨论】:

    • 将其更改为您所说的:lanes.be/baronie/…> 现在看起来他也在对电​​子邮件进行 idd 编码,但仍然收到“错误!”点击它时。
    • 您有任何调试信息吗?很难说没有它是什么。顺便说一句,如果它是您自己的错误输出,那么它是因为 if (md5($email_reservering) == $hash) 失败...它将落入 else,您回显错误!
    • 我至少可以将它邮寄到与需要确认预订的人相同的电子邮件地址。我需要找到一种方法从表单中检索电子邮件并将其保存在 bevestiging.php 文件中并将其发送到该地址。
    • 这实际上是正确的!在搜索了这么多只是更改几个引号后,您会无法直截了当地思考! :p 谢谢你的评论!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多