1

My session variable only changes to the correct value once the page has been loaded for the second time. This behaviour exhibited is weird due to the fact that the other session variable (matchid) is set correctly the first time that the page is loaded. The variable that is not setting properly if (review number), it is set at the bottom of the code snippet.

The Code

I apologise for the long code snippet, however I have no idea where the error is:

if ($stmt = $dbc->prepare("SELECT matchid, user1, user2, user1_accept, 
user2_accept FROM matches WHERE user1_accept = ? or user2_accept = ?   
LIMIT 
1")) {
$stmt->bind_param('ii', $id, $id);  // Bind id to parameter.
$stmt->execute();    // Execute the prepared query.
$stmt->store_result();

 // get variables from result.
$stmt->bind_result($matchid, $user1, $user2, $user1_accept,
 $user2_accept);
$stmt->fetch();
$num_rows = mysqli_stmt_num_rows($stmt);
if ($num_rows == 0){header('Location: /nomatches.php');}    
$_SESSION['matchid'] = $matchid;
}
print_r($_SESSION);

if ($user1 != $id){
echo 'user 1 !=';     
$reviewnumber = 'user2_accept';   
echo $reviewnumber;     
if ($stmt = $dbc->prepare("SELECT aboutme, friend, picture FROM  
userprofile
WHERE id = ? LIMIT 1")) {
$stmt->bind_param('i', $user1);  // Bind id to parameter.
$stmt->execute();    // Execute the prepared query.
$stmt->store_result();

 // get variables from result.
$stmt->bind_result($aboutme, $friend, $picture);
$stmt->fetch(); 
$picture = implode('/', array_map('rawurlencode', explode('/',     
$picture)));
}


if ($stmt = $dbc->prepare("SELECT full_name FROM users WHERE id = ? 
LIMIT 1")) {
$stmt->bind_param('i', $user1);  // Bind id to parameter.
$stmt->execute();    // Execute the prepared query.
$stmt->store_result();

 // get variables from result.
$stmt->bind_result($full_name);
$stmt->fetch(); 
}

}

if ($user2 != $id){
echo 'user 2 !=';
$reviewnumber = 'user1_accept';   
echo $reviewnumber;     
if ($stmt = $dbc->prepare("SELECT aboutme, friend, picture FROM
userprofile WHERE id = ? LIMIT 1")) {
$stmt->bind_param('i', $user2);  // Bind id to parameter.
$stmt->execute();    // Execute the prepared query.
$stmt->store_result();

 // get variables from result.
$stmt->bind_result($aboutme, $friend, $picture);
$stmt->fetch(); 
$picture = implode('/', array_map('rawurlencode', explode('/',
 $picture)));
}


if ($stmt = $dbc->prepare("SELECT full_name FROM users WHERE id = ? 
LIMIT  1")) {
$stmt->bind_param('i', $user2);  // Bind id to parameter.
$stmt->execute();    // Execute the prepared query.
$stmt->store_result();

 // get variables from result.
$stmt->bind_result($full_name);
$stmt->fetch(); 
}


 }

$_SESSION["reviewnumber"] = $reviewnumber;   

The variable: reviewnumber, is correctly echoed on the first page load, which is why I don't understand why the session variable is not correctly set.

Alex Wetton
  • 199
  • 1
  • 1
  • 10
  • Is `session_start();` in there, and where is it located? Plus, is it inside all pages using sessions? – Funk Forty Niner Jan 22 '15 at 17:10
  • session start is located at the top of the page, it is also located on all pages. The weird aspect is that one of the session variables sets first time whereas the other doesn't. – Alex Wetton Jan 22 '15 at 17:15
  • Try defining it further up, even right below where you're starting the session. – Funk Forty Niner Jan 22 '15 at 17:15
  • if defined further up using a constant, it is set on the first page load. However this is not possible to accomplish as the value of the session variable is determined by the result of the SQL query. I have a line of code directly above where the session variable should be set, which echoes a line of code, so I know the program is reaching that point. – Alex Wetton Jan 22 '15 at 17:20

1 Answers1

0

The session values were being printed before the session value was being changed - therefore the new session value was only being shown on the next page load. If anybody else has a similar problem, this is definitely an important thing to check.

Alex Wetton
  • 199
  • 1
  • 1
  • 10