我正在尝试使用PHP和PostgreSQL为一家旅馆创建签到系统,但我遇到了很多问题。首先,用户将输入签入以及签出日期,姓名和电子邮件地址,此后,我设法发送了一封电子邮件,其中包含他需要进行签入的代码,但事实是,当他单击该链接时该页面为空白,应该显示一条消息,然后在另一个页面上使用该代码进行登机(例如,email_registration进行验证,例如,如果他选择要4个房间,则每个房间都要进行登机)。如何显示该消息并使用生成的代码在登录页面上启动签入过程?这是注册页面:
<?php
ob_start();
$success = false;
// Errors reporting, used if needed
error_reporting(E_ALL);
ini_set('display_errors', 'on');
// General configuration like base, used if needed
include_once ('include/config.inc.php');
// Mail functions
include_once ('include/mail.functions.php');
// Start session if needed
session_start();
// DBConn
include_once ('class/DB/DBConn.includeall.php');
$db = new DBConn(NULL);
// Includere clasa login
require_once ('class/class_login.php');
// Set up current language
$lang = "ro";
$_SESSION[PRE.'lang'] = $lang;
$access = 0;
// Check if the cookie for "remember me" exists
if(isset($cookie_name))
{
if(isset($_COOKIE[$cookie_name]))
{
parse_str($_COOKIE[$cookie_name]);
$login = new Login($db);
if ($login->_checkLogin($usr, $hash) == true)
{
$access = 1;
}
}
}
$nume = (isset($_POST['nume']) && !empty($_POST['nume'])) ? $_POST['nume'] : "" ;
$email = (isset($_POST['email']) && !empty($_POST['email'])) ? $_POST['email'] : "" ;
$nrCamere = (isset($_POST['nrCamere']) && !empty($_POST['nrCamere'])) ? $_POST['nrCamere'] : "" ;
$cod_activare = md5(rand());
$email_status= 0;
$checkin = (isset($_POST['checkin']) && !empty($_POST['checkin'])) ? $_POST['checkin'] : "" ;
$checkout = (isset($_POST['checkout']) && !empty($_POST['checkout'])) ? $_POST['checkout'] : "" ;
$nr_persoane = (isset($_POST['nr_persoane']) && !empty($_POST['nr_persoane'])) ? $_POST['nr_persoane'] : "" ;
$db = pg_connect("host= port=5432 dbname=login_robinson user=robinson password=");
$query = "INSERT INTO tregister(nume,email,cod_activare,email_status,nr_camere,data_checkin,data_checkout, nr_persoane) VALUES ('$nume','$email','$cod_activare','$email_status','$nrCamere','$checkin','$checkout','$nr_persoane')";
$result = pg_query($query);
if(isset($_POST['submit'])){
$base_url = "http://dev.incorom.local/login-robinson/www/";
$mail_body = "
Buna ziua ".$_POST['nume'].",\n
Multumim pentru inregistrare. Te rog deschide acest link pentru a incepe procesul de check-in pentru ".$nrCamere." camere si ".$nr_persoane." persoane - ".$base_url."email_verification.php?activation_code=".$cod_activare."
Cod de rezervare: ".$cod_activare."
Vei sta la noi incepand cu data de ".$checkin." pana la ".$checkout."
Cu stima,\n Hotel Amethyst
";
$from = 'Activare rezervare';
$subject = 'De pe site';
if (mail ($email, $subject, $mail_body, $from)){
}
else{
echo "<script>
alert('S-a produs o eroare! Te rog mai verifica odata formularul!');
</script>";
}
if($nume !=''&& $email !='')
{
$success=true;
}
}
?>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<!-- <base href="http://dev.incorom.local/ticketing/www/login.php" /> -->
<title>Inregistrare</title>
<?php
include('include/links.php');
include('include/scripts.php');
?>
</head>
<body style="display: block !important;" ng-cloak="" ng-class="{ 'layout-fixed' : app.layout.isFixed, 'layout-boxed' : app.layout.isBoxed, 'layout-dock' : app.layout.isDocked, 'layout-material': app.layout.isMaterial, 'aside-offscreen' : app.sidebar.isOffscreen, 'aside-mini' : app.sidebar.isMini, 'aside-right' : app.sidebar.isRight, 'footer-hidden': app.footer.hidden, 'in-app': !$state.includes('page')}">
<div class="animated fadeOutZoom">
<div class="container container-sm animated fadeInDown">
<div class="center-block mt-xl">
<img src="images/logo_iconlab.png" alt="Image" class="center-block img-rounded">
<div class="panel">
<div class="panel-body">
<p class="pv text-bold">Date necesare pentru a efectua inregistrarea in baza de date</p>
<form action="register.php" method="post">
<div class="row">
<div class="col-md-12 form-group">
<label for="nume">Nume</label>
<input type="text" id="nume" class="form-control " name="nume" required>
</div>
</div>
<div class="row">
<div class="col-sm-6 form-group">
<label for="">Data check-in</label>
<div style="position: relative;">
<span class="fa fa-calendar icon" style="position: absolute; right: 10px; top: 10px;"></span>
<input type='text' class="form-control" id='arrival_date' name="checkin" required/>
</div>
</div>
<div class="col-sm-6 form-group">
<label for="">Data check-out</label>
<div style="position: relative;">
<span class="fa fa-calendar icon" style="position: absolute; right: 10px; top: 10px;"></span>
<input type='text' class="form-control datepicker" id='departure_date' data-date-format="mm/dd/yyyy" name="checkout" required/>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 form-group">
<label for="camere">Numar camere</label>
<select name="nrCamere" id="nrCamere" class="form-control" required>
<option value="" selected disabled hidden>Alege numarul de camere</option>
<option value="1">1 camera</option>
<option value="2">2 camere</option>
<option value="3">3 camere</option>
<option value="4">4 camere</option>
<option value="5">5 camere</option>
</select>
</div>
<div class="col-md-6 form-group">
<label for="nrPersoane">Numar de persoane</label>
<select name="nr_persoane" id="nrPersoane" class="form-control" required>
<option value="" selected disabled hidden>Alege numarul de persoane</option>
<option value="1">1 persoana</option>
<option value="2">2 persoane</option>
<option value="3">3 persoane</option>
<option value="4">4 persoane</option>
<option value="5">5+ persoane</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label for="email">Email</label>
<input type="email" id="email" class="form-control" name="email" required>
</div>
</div>
<div class="row">
<div class="col-md-6 form-group">
<input type="submit" value="Rezerva acum" class="btn btn-primary name" name="submit">
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.min.js"></script>
<script>
$('#arrival_date, #departure_date').datepicker({format: 'yyyy/mm/dd'});
</script>
</body>
</html>
<?php
ob_end_flush();
?>
Email_verification.php:
<?php
ob_start();
$success = false;
// Errors reporting, used if needed
error_reporting(E_ALL);
ini_set('display_errors', 'on');
// General configuration like base, used if needed
include_once ('include/config.inc.php');
// Mail functions
include_once ('include/mail.functions.php');
// Start session if needed
session_start();
// DBConn
include_once ('class/DB/DBConn.includeall.php');
$db = new DBConn(NULL);
// Includere clasa login
require_once ('class/class_login.php');
// Set up current language
$lang = "ro";
$_SESSION[PRE.'lang'] = $lang;
$message = '';
if(isset($_GET['cod_activare']))
{
$query = "
SELECT * FROM tregister
WHERE cod_activare = :cod_activare
";
$statement = $connect->prepare($query);
$statement->execute(
array(
':cod_activare' => $_GET['cod_activare']
)
);
$no_of_row = $statement->rowCount();
if($no_of_row > 0)
{
$result = $statement->fetchAll();
foreach($result as $row)
{
if($row['email_status'] == '0')
{
$update_query = "
UPDATE tregister
SET email_status = '1'
WHERE id = '".$row['id']."'
";
$statement = $connect->prepare($update_query);
$statement->execute();
$sub_result = $statement->fetchAll();
if(isset($sub_result))
{
$message = '<label class="text-success">Email verificat cu success! <br />Poti efectua checkin-ul aici - <a href="login.php">Efectueaza check-in</a></label>';
}
}
else
{
$message = '<label class="text-info">Adresa de mail deja verificata</label>';
}
}
}
else
{
$message = '<label class="text-danger">Link invalid</label>';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Hotel Amethyst</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<h3><?php echo $message; ?></h3>
</div>
</body>
</html>
<?php
ob_end_flush();
?>