为什么unexpectedReserveError.html
会被触发?如代码所示,这是否意味着会话令牌不匹配?我在PHP上非常糟糕......
修改
添加问题说明。正如此代码所代表的那样,它可以正常工作,即有一个htm格式(第二个代码集),并将其变量传输到后端页面(第一个代码集)。让我感到困惑的是,错误页面随机发生。并且很多人抱怨错误页面弹出,从而放弃了页面。
我只能触发错误页面一次,而且只能触发一次,即便如此,也没有明显的线索,为什么会发生这种情况。因此我最重要的问题是..因为如果你查看代码,你可以看到有一个会话令牌匹配,如果它不起作用,它会触发unexpectedReserveError.html
页面? (有两个错误页面,header('location: URL/reserveError.html');
& header('location: URL/unexpectedReserveError.html');
最重要的是,我试图弄清楚在什么情况下,unexpectedReserveError页面会被触发,因为它会导致问题。
BackendPage
<?php
session_start();
if ($_POST['token'] == $_SESSION['token']) {
foreach($_POST as $key => $value) {
if(ini_get('magic_quotes_gpc'))
$_POST[$key] = stripslashes($_POST[$key]);
$_POST[$key] = htmlspecialchars(strip_tags($_POST[$key]));
}
$nights = $_POST['nights'];
$arrivals = $_POST['arrivals'];
$male = $_POST['male'];
$female = $_POST['female'];
$rooms = $_POST['rooms'];
$type = $_POST['type'];
$name = $_POST['name'];
$address = $_POST['address'];
$zip = $_POST['zip'];
$telephone = $_POST['telephone'];
$email = $_POST['email_again'];
$cell = $_POST['cell'];
$message = $_POST['message'];
$date = $_POST['date'];
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
$mail->isSMTP();
//$mail->SMTPDebug = 4; // debugging: 1 = errors and messages, 2 = messages only
$mail->Host = 'tls://smtp.gmail.com:587'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = ''; // SMTP username
$mail->Password = '';
$mail->addReplyTo( '', 'Hotel' );
$mail->AddCC('', 'Hotel');
$mail->addAddress( $email, $first_name );
$mail->SetFrom('', '');
$mail->isHTML(true);
// Set email format to HTML
$mail->Subject = 'Hotel Room Request';
$mail->Body = "<table width='600'><tr><td colspan='2' height='20'><p style='text-align:center; font-size:20px; color:#ddd; padding:0px; margin:0px;'>Copy of Your Reserve Form</p></td></tr>"
."<tr><td colspan='2' height='80' width='600'><p style='color:#d1502d;font-size:50px;text-align:center;padding:0px; margin:0px;'>Hotel</p></td></tr>"
."<tr><td colspan='2' height='60' width='600' style='text-align:center; color:#606060;font-size:20px;padding:0px; margin:0px;'>Los Angeles, CA </td></tr>"
."<tr><td colspan='2' height='30' width='600' style='text-align:center;'><h3 style='color:#d1502d; '>Come and Explore Los Angeles</h3></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Number of Nights: </p></td><td height='20' width='300'> <p style='font-size:20px; color:gray; padding:10px; margin:0px;'>$nights</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Arrival Time: </p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px;'>$arrivals</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Date:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $date</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Number of Guests - (Gender: male): </p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px;'>$male</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Number of Guests - (Gender: female):</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $female</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Number of Rooms:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $rooms</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Type of Room:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $type</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Name:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $name</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Address:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $address</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Zip:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $zip</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Telephone:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $telephone</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Cell:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $cell</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Email:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $email</p></td></tr>"
."<tr><td height='20' width='300'><p style='font-size:20px; color:gray; padding:10px; margin:0px; text-align:right;'>Your Message:</p></td><td height='20' width='300'><p style='font-size:20px; color:gray; padding:0px; margin:10px;'> $message</p></td></tr>"
."<tr><td colspan='2' height='15' width='600'><p style=' text-align:center;padding:0px; margin:0px;'><a style='color:#d1502d;font-size:15px;text-align:center;padding:0px; margin:0px;text-decoration:none;'href='url'>Visit Our Site</a></p></td></tr></table>";
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
if(!$mail->send()) {
header('location: URL/reserveError.html');
} else {
header('location: URL/reserveResult.html');
}
}
else {
header('location: URL/unexpectedReserveError.html');
}
这是html表单页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<title>Hotel</title>
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/default.date.css">
<link href="css/bootstrap.min.css" rel="stylesheet" />
<link href="css/style.css" rel="stylesheet" />
<style type="text/css">
.error {
color:red;
}
body {
padding-top: 146px;
padding-top:175px;
}
.language_choice_english {
padding-right: 1%
}
.language_choice_japanese {
padding-right: 3%;
}
</style>
</head>
<body>
<script src="js/jquery-1.11.2.min.js"></script>
<script src="js/jquery.validate.js"></script>
<script src="js/additional-methods.js"></script>
<script>
$(document).ready(function () {
$('#reserveForm').validate({
rules: {
name: {
required: true
},
address: {
required: true
},
zip: {
required: true
},
telephone: {
required: true
},
email: {
required: true
},
email_again: {
equalTo: "#cemail"
},
nights: {
required: true
},
arrivals: {
required: true
},
male: {
required: true
},
female: {
required: true
},
rooms: {
required: true
},
type: {
required: true
},
date: {
required: true
}
}
});
});
</script>
</head>
<body>
<?php
session_start(); //allows use of session variables
if (!isset($_SESSION['token']) && $_SESSION['token'] == $_POST['token']) {
$token = base64_encode(openssl_random_pseudo_bytes(32));
$_SESSION['token'] = $token;
}
else {
$token = base64_encode(openssl_random_pseudo_bytes(32));
$_SESSION['token'] = $token;
}
?>
<nav class="navbar navbar-default navbar-fixed-top">
<a class="brand pull-left" href="index.html">
<img id="Logo" src="./images/logo.gif" alt="Hotel">
</a>
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html"><span id="overall_title">Hotel</span><small id="description_of_city">Los Angeles</small></a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li><a href="about.html">About</a></li>
<li><a href="rooms.html">Rooms & information</a></li>
<li><a href="reserve.php">Book to Reserve</a></li>
<li><a href="location.html">Location Info</a></li>
<li><a href="additional.html">Additional Info</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</div><!-- /.navbar-collapse -->
<ul class="nav navbar-nav navbar-right">
<p class="pull-right language_choice_english"><a href="reserve.php">English</a></p>
<p class="pull-right language_choice_japanese"><a href="reserve-ja.php"><span lang="ja">日本語</span></a></p>
</ul>
</div><!-- /.container-fluid -->
</nav>
<div id="main-container" class="col-xs-12">
<form class="form-horizontal" method="POST" action="bookInformation.php" id="reserveForm" autocomplete="off">
<p><a href="rules.html" target="_blank">Rules and Regulations of Hotel</a></p>
<div>
<label>* Required fields</label>
</div>
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<div class="form-group">
<label for="cnights" class="col-sm-2 control-label">* Number of Nights</label>
<div class="col-sm-10">
<select id="cnights" class="form-control" name="nights">
<option value="">Number of Nights</option>
<option <?php if ($nights == 1 ) echo 'selected' ; ?> value="1">1</option>
<option <?php if ($nights == 2 ) echo 'selected' ; ?> value="2">2</option>
<option <?php if ($nights == 3 ) echo 'selected' ; ?> value="3">3</option>
<option <?php if ($nights == 4 ) echo 'selected' ; ?> value="4">4</option>
<option <?php if ($nights == 5 ) echo 'selected' ; ?> value="5">5</option>
<option <?php if ($nights == 6 ) echo 'selected' ; ?> value="6">6</option>
<option <?php if ($nights == 7 ) echo 'selected' ; ?> value="7">7</option>
<option <?php if ($nights == 8 ) echo 'selected' ; ?> value="8">8</option>
<option <?php if ($nights == 9 ) echo 'selected' ; ?> value="9">9</option>
<option <?php if ($nights == 10 ) echo 'selected' ; ?> value="10">10</option>
</select>
</div>
</div>
<div class="form-group">
<label for="carrivals" class="col-sm-2 control-label">* Time of Arrival</label>
<div class="col-sm-10">
<select id="carrivals" class="form-control" name="arrivals">
<option value="">Time of Arrival</option>
<option <?php if ($arrivals == 14 ) echo 'selected' ; ?> value="14">14</option>
<option <?php if ($arrivals == 15 ) echo 'selected' ; ?> value="15">15</option>
<option <?php if ($arrivals == 16 ) echo 'selected' ; ?> value="16">16</option>
<option <?php if ($arrivals == 17 ) echo 'selected' ; ?> value="17">17</option>
<option <?php if ($arrivals == 18 ) echo 'selected' ; ?> value="18">18</option>
<option <?php if ($arrivals == 19 ) echo 'selected' ; ?> value="19">19</option>
<option <?php if ($arrivals == 20 ) echo 'selected' ; ?> value="20">20</option>
<option <?php if ($arrivals == 21 ) echo 'selected' ; ?> value="20">21</option>
</select>
</div>
</div>
<div class="form-group">
<label for="cdate" class="col-sm-2 control-label">* Check-In Date</label>
<div class="col-sm-10">
<input class="datepicker" type="text" placeholder="Please pick a date" id="cdate" name="date">
</div>
</div>
<div class="form-group">
<label for="cmale" class="col-sm-2 control-label">* Number of People</label>
<div class="col-sm-10">
<select id="cmale" class="form-control" name="male">
<option value="">Gender Male</option>
<option <?php if ($male === 0 ) echo 'selected' ; ?> value="0">0</option>
<option <?php if ($male == 1 ) echo 'selected' ; ?> value="1">1</option>
<option <?php if ($male == 2 ) echo 'selected' ; ?> value="2">2</option>
<option <?php if ($male == 3 ) echo 'selected' ; ?> value="3">3</option>
<option <?php if ($male == 4 ) echo 'selected' ; ?> value="4">4</option>
<option <?php if ($male == 5 ) echo 'selected' ; ?> value="5">5</option>
<option <?php if ($male == 6 ) echo 'selected' ; ?> value="6">6</option>
<option <?php if ($male == 7 ) echo 'selected' ; ?> value="7">7</option>
<option <?php if ($male == 8 ) echo 'selected' ; ?> value="8">8</option>
<option <?php if ($male == 9 ) echo 'selected' ; ?> value="9">9</option>
<option <?php if ($male == 10 ) echo 'selected' ; ?> value="10">10</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">* Number of People</label>
<div class="col-sm-10">
<select class="form-control" name="female">
<option value="">Gender Female</option>
<option <?php if ($female === 0 ) echo 'selected' ; ?> value="0">0</option>
<option <?php if ($female == 1 ) echo 'selected' ; ?> value="1">1</option>
<option <?php if ($female == 2 ) echo 'selected' ; ?> value="2">2</option>
<option <?php if ($female == 3 ) echo 'selected' ; ?> value="3">3</option>
<option <?php if ($female == 4 ) echo 'selected' ; ?> value="4">4</option>
<option <?php if ($female == 5 ) echo 'selected' ; ?> value="5">5</option>
<option <?php if ($female == 6 ) echo 'selected' ; ?> value="6">6</option>
<option <?php if ($female == 7 ) echo 'selected' ; ?> value="7">7</option>
<option <?php if ($female == 8 ) echo 'selected' ; ?> value="8">8</option>
<option <?php if ($female == 9 ) echo 'selected' ; ?> value="9">9</option>
<option <?php if ($female == 10 ) echo 'selected' ; ?> value="10">10</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">* Number of Rooms</label>
<div class="col-sm-10">
<select class="form-control" name="rooms">
<option value="">Number of Rooms</option>
<option <?php if ($rooms == 1 ) echo 'selected' ; ?> value="1">1</option>
<option <?php if ($rooms == 2 ) echo 'selected' ; ?> value="2">2</option>
<option <?php if ($rooms == 3 ) echo 'selected' ; ?> value="3">3</option>
<option <?php if ($rooms == 4 ) echo 'selected' ; ?> value="4">4</option>
<option <?php if ($rooms == 5 ) echo 'selected' ; ?> value="5">5</option>
<option <?php if ($rooms == 6 ) echo 'selected' ; ?> value="6">6</option>
<option <?php if ($rooms == 7 ) echo 'selected' ; ?> value="7">7</option>
<option <?php if ($rooms == 8 ) echo 'selected' ; ?> value="8">8</option>
<option <?php if ($rooms == 9 ) echo 'selected' ; ?> value="9">9</option>
<option <?php if ($rooms == 10 ) echo 'selected' ; ?> value="10">10</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">* Type of Room</label>
<div class="col-sm-10">
<select class="form-control" name="type">
<option value="">Type of Room</option>
<option <?php if ($type == B ) echo 'selected' ; ?> value="B">B</option>
<option <?php if ($type == C ) echo 'selected' ; ?> value="C">C</option>
<option <?php if ($type == D ) echo 'selected' ; ?> value="D">D</option>
<option <?php if ($type == E ) echo 'selected' ; ?> value="E">E</option>
<option <?php if ($type == F ) echo 'selected' ; ?> value="F">F</option>
<option <?php if ($type == G ) echo 'selected' ; ?> value="G">G</option>
<option <?php if ($type == H ) echo 'selected' ; ?> value="H">H</option>
<option <?php if ($type == I ) echo 'selected' ; ?> value="I">I</option>
<option <?php if ($type == J ) echo 'selected' ; ?> value="J">J</option>
<option <?php if ($type == K ) echo 'selected' ; ?> value="K">K</option>
</select>
</div>
</div>
<div class="form-group">
<label for="cname" class="col-sm-2 control-label">* Name</label>
<div class="col-sm-10">
<input class="form-control" placeholder="Name" id="cname" type="text" name="name" value="<?php if(isset($name)) { echo $name; }?>">
</div>
</div>
<div class="form-group">
<label for="caddress" class="col-sm-2 control-label">* Address</label>
<div class="col-sm-10">
<input class="form-control" id="caddress" placeholder="Address" type="text" name="address" value="<?php if(isset($address)) { echo $address; }?>">
</div>
</div>
<div class="form-group">
<label for="czip" class="col-sm-2 control-label">* Zip</label>
<div class="col-sm-10">
<input id="czip" class="form-control" placeholder="Zip" type="text" name="zip" value="<?php if(isset($zip)) { echo $zip; }?>">
</div>
</div>
<div class="form-group">
<label for="ctelephone" class="col-sm-2 control-label">* Telephone Number</label>
<div class="col-sm-10">
<input id="ctelephone" class="form-control" placeholder="Telephone Number" type="text" name="telephone" value="<?php if(isset($zip)) { echo $zip; }?>">
</div>
</div>
<div class="form-group">
<label for="ccellphonenumber" class="col-sm-2 control-label">Cell Phone Number</label>
<div class="col-sm-10">
<input id="ccellphonenumber" class="form-control" placeholder="Cell Phone Number" type="text" name="cell" value="<?php if(isset($cell)) { echo $cell; }?>">
</div>
</div>
<div class="form-group">
<label for="cemail" class="col-sm-2 control-label">* Email</label>
<div class="col-sm-10">
<input id="cemail" class="form-control" placeholder="Email" type="text" name="email">
</div>
</div>
<div class="form-group">
<label for="cemail" class="col-sm-2 control-label">* Email Address Confirmation</label>
<div class="col-sm-10">
<input id="cemail2" class="form-control" placeholder="Email" type="text" name="email_again">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Message</label>
<div class="col-sm-10">
<textarea class="form-control" rows="3" name="message" value="<?php if(isset($message)) { echo $message; }?>"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>
</div>
<footer class="col-xs-12 roomsFooter">
<div class="row">
<div class="col-md-4">2015 Hotel -- All rights reserved</div>
<div class="col-md-4">Terms of Use</div>
<div class="col-md-4">Facebook / Twitter / Instagram </div>
</div>
</footer>
<script src="js/picker.js"></script>
<script src="js/picker.date.js"></script>
<script>
$(document).ready(function(){
$('.datepicker').pickadate();
});
</script>
<script src="js/bootstrap.min.js"></script>
<script src="js/scripts.js"></script>
</body>
</html>
修改
上面第二个代码集的会话令牌资料
<?php
session_start(); //allows use of session variables
if (!isset($_SESSION['token']) && $_SESSION['token'] == $_POST['token']) {
$token = base64_encode(openssl_random_pseudo_bytes(32));
$_SESSION['token'] = $token;
}
else {
$token = base64_encode(openssl_random_pseudo_bytes(32));
$_SESSION['token'] = $token;
}
?>
而且:<input type="hidden" name="token" value="<?php echo $token; ?>" />