I have a project that I am working on where subscribers will receive an update via email containing links to notices. These notices can only be viewed by registered members, so in order to do that I have a login page and script. I am using
$ticket = clean($_GET['ticket']);
to pull the value from the url. This shows up fine and when the script checks for authorization and they are not logged in, it sends them to the log in page where the "ticket" shows up no problem in the url. After they input their info, I run the script:
<?php
//Start session
session_start();
//Include database connection details
require_once('config.php');
//Array to store validation errors
$errmsg_arr = array();
//Validation error flag
$errflag = false;
//Connect to mysql server
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('Failed to connect to server: ' . mysql_error());
}
//Select database
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("Unable to select database");
}
//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
//Sanitize the POST values
$login = clean($_POST['login']);
$password = clean($_POST['password']);
//Input Validations
if($login == '') {
$errmsg_arr[] = 'Login ID missing';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = 'Password missing';
$errflag = true;
}
//If there are input validations, redirect back to the login form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: login-form.php?ticket=$ticket");
exit();
}
//Create query
$qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
$result=mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result) == 1) {
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
$_SESSION['SESS_LAST_NAME'] = $member['lastname'];
$_SESSION['SESS_ADMIN_LEVEL'] = $member['adminLevel'];
session_write_close();
header("location: read_notices.php?ticket=$ticket");
exit();
}else {
//Login failed
header("location: login-failed.php?ticket=$ticket");
exit();
}
}else {
die("Query failed");
}
?>
Problem is that when it redirects to either read_notices.php?ticket=$ticket
or login-failed.php?ticket=$ticket
the "ticket" is no longer there.
I am using $ticket = clean($_GET['ticket']);
on the login page which uses a form and executes the above file.
Maybe there is an easier way to store the "ticket" until the user is at the viewing page. Other than that, the ticket seems to get "lost" along the way. This is not my complete code because it is quite long, but if you need more then let me know. Thanks in advance!