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.

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!

reservation-send.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 

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

?>

Daarnaast moeten tag-properties tussen "dubbele quotes" en moeten querystring-scheidingstekens geschreven worden als &amp; en niet als &. Net zoals in normale HTML-documenten.


Krijg ik dit..
Moet nog altijd een foutje inzitten.
Dan echo je blijkbaar de headers, wat niet de bedoeling is?
De code


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

	$data = $_POST['reservation'];

	//Genereren email link
	
		//het opslaan van het mailadres van die dat de reservering maakte via de form
		$email_reservering =$data['email'];
		
		//maken van de hash code
		$hash = md5($email_reservering);
		
		//link maken met daarin de 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 .= 'MIME-Version: 1.0' . "\r\n";
	$message .= 'Content-type: text/html; charset=iso-8859-1' . "\r\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';
	}
}
?>


Zie jij de fout?
Oeps, ja, het is een mailheader, en valt dus niet onder $message, maar $headers.
Verkeerd geplaatst dus....
Zo dus of wat?:

$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

Ja, uit oogpunt van leesbaarheid zou ik de regel 46 dan even meteen even verspreiden over meerdere variabelen, net als je bij je $message doet.

Reageren