Archief - reservatiesysteem met bevestigingsmail

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Boeckske

Legacy Member
Hallo iedereen!

Zoals de titel een beetje aantoont maak ik een reservatie systeem in HTML/PHP.
Er wordt een HTML form ingevuld en die waarden worden doorgegeven naar de eerste .php file (reservation-send.php).
Die .php file maakt een emailbericht waarin enkele waarden van de form inkomen en de url link om te bevestigen (incl. hash code).
De mail en link wordt verstuurd naar iemand van het restaurant om te bevestigen (klikken op de url link).
Wanneer die link wordt geklikt, wordt er een 2de .php file aangesproken (bevestiging.php).
Die file controleert of de hash code en email correct zijn, indien dit zo is wordt er opnieuw een mail verzonden naar degene die de reservatie maakte met de bevestiging van de reservatie.

reservation-send.php

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

/////////////////////////////////////
// Change this email address ////////
$email = "[email protected]"; //dit express zo gemaakt voor deze post

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

$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://mijndomein.be/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);

Bevestiging.php

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!";
}

?>

Output URL

Volgens mij loopt het mis door een fout in het aanmaken van de url link.
Ik krijg steeds "fout!" als er wordt op geklikt.
Zie output link voor de output van de mail.

Alvast bedankt!

Voor verdere vragen shoot maar eh!

Boeckske

Legacy Member
dat is geen parameter eh maar gewoon tekst die een URL wordt..
volgens mij klopt dat hoor.

Heb al 2 dingen aangepast:

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

- $email_reservering = urldecode(['email_reservering']);
=> Daarnaast is een urldecode() op $_GET niet nodig, urldecode() wordt al automatisch toegepast op superglobals als $_GET en $_POST.

CrushTheButton

Legacy Member
Je snapt het niet helemaal denk ik.

Je maakt je URL aan met de email en hash parameter.

voorbeeld.com/bevestiging.php?email=waarde&hash=waarde

Vervolgens wil je in je bevestigingsbestand de parameter email_reservering ophalen, maar die bestaat niet in je URL hierboven.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan