Jump to content

[SOLVED] Session Variables


perrij3

Recommended Posts

I am having some issues with session variables. I want to pass the ID # from one page to the next. I have a from where people can enter a message. What the user enters is placed into a database. I want to be on the next page (the one that is displayed once a user submits the message) to display other information from the database and to be a link to different pages using the ID #.

 

The issue is the ID # isn't being passed to the next page as far as I can tell.

 

In the form on the first page, I use a hidden input box to record the ID # as such:

<input name="O_ID" type="hidden" value="<?php echo $row['OB_ID']; ?>"> 

 

On the next page, I am trying to call that value (O_ID") using the following code:

session_start();
//Check to see if the form has been submitted and that Obituary ID is not empty
if ($_POST && !empty($_POST['O_ID'])) {
//Set session variable
$_SESSION['O_ID'] = $_POST['O_ID'];
$O_ID = $_SESSION['O_ID'];

//create database connection
$conn = dbConnect('');
include('includes/connect.php');


 $sql = "SELECT * FROM obituaries WHERE OB_ID = $O_ID";
 $result = mysql_query($sql) or die (mysql_error());
 $row = mysql_fetch_assoc($result);
}

 

Could someone please help me figure out where my error is at? Thanks for your help in advance.

Link to comment
Share on other sites

First check I'd make is to see if the hidden input field is being populated

<?php echo 'Temp check, OB_ID  = ' .$row['OB_ID']; ?>
<input name="O_ID" type="hidden" value="<?php echo $row['OB_ID']; ?>">

Is it populated?

 

If the field is populated. Is the $_POST populated correctly in the page the form gets submitted to

<?php echo '<pre>'.print_r($_POST, true).'</pre>'; ?>

Link to comment
Share on other sites

This is not a SESSION variable error. You are not using the session variable in the code - only setting it.

 

1. Are you getting any errors?

2. Have you checked the generated HTML of the form to ensure the hidden field does have a value

3. Verify the POST values on the processing page by adding this before the if statement:

echo "<pre>";
echo print_r($_POST);
echo "</pre>";

 

EDIT:

The hidden input field is being populated with the correct ID number and all the data that is being collected from the form is posting correctly to the database.

So, what IS the problem? If all the POST data is available on the processing page, then the ID number is there, right?

Link to comment
Share on other sites

I do not get any error messages when I run the code.

 

I entered the print_r($_POST); code before my if statement and got this

Array
(
)
1

 

So the problem has to be with posting the data. Do I have to add something in the ACTION part of the FORM to POST the data to the next page?

 

Here is my PHP code and the FORM code for the page people enter the data on:

 

<?php
    include('includes/connection.inc.php');
include('includes/corefuncs.php');
//Remove backslashes
nukeMagicQuotes();

//initialize flag
$done = false;

//prepare an array of expected items
$expected = array('Obituary_ID', 'FullName', 'EmailAddress', 'AddressField1', 'AddressField2', 'YourCity', 'YourState', 'YourZip', 'Comment', 'DateEntered');

//create database connection
$conn = dbConnect('');

//get details of selected record
if ($_GET && !$_POST) {
if (isset($_GET['Obituary_ID']) && is_numeric($_GET['Obituary_ID'])) {
	$Obituary_ID = $_GET['Obituary_ID'];
}
else {
	$Obituary_ID = NULL;
}
if ($Obituary_ID) {
	  $sql = "SELECT * FROM obituaries WHERE OB_ID = $Obituary_ID";
	$result = mysql_query($sql) or die (mysql_error());
	$row = mysql_fetch_assoc($result);
	}
}
//if form has been submitted, add record to guestbook
if (array_key_exists('sign', $_POST)) {
//prepare expected items for insertion into database
foreach ($_POST as $key => $value) {
	if (in_array($key, $expected)) {
		${$key} = mysql_real_escape_string($value);
		}
	}
//abandon the process if primary key invalid
if (!is_numeric($Obituary_ID)) {
	die('Invalid Request');
	}

//prepare the SQL query
$sql = "INSERT INTO guestbook (`FK_OB_ID`, `Name`, `Email`, `Address1`, `Address2`, `City`, `State`, `Zip`, `Condolence`, `DateEntered`) VALUES ('$Obituary_ID', '$FullName', '$EmailAddress', '$AddressField1', '$AddressField2', '$YourCity', '$YourState', '$YourZip', '$Comment', NOW())"; 

//Submit the query
$done = mysql_query($sql) or die(mysql_error());

//redirect page of $Obituary_ID is invalid
if ($done || !isset($Obituary_ID)) {
header('Location: /throops/thanks_guestbook.php');
exit;
}
}
?>

</head>

<body>
<!-- Start Main Content -->

<!-- Form to add a new entry to the guestbook -->
<form id="guestbook" name="guestbook" method="POST" action="">
<table>
<tr>
	<td class="tablefield"><label for="FullName"><strong>Name:</strong></label></td>
        <td class="tabledata"><input type="text" maxlength="100" size="30" type="text" name="FullName" tabindex="1" id="FullName"></td>
</tr>
<tr>
	<td class="tablefield"><label for="EmailAddress"><strong>Email:</strong></label></td>
        <td class="tabledata"><input type="text" maxlength="100" size="30" type="text" name="EmailAddress" tabindex="1" id="EmailAddress"></td>
</tr>
<tr>
	<td class="tablefield"><label for="AddressField1">Address 1:</label></td>
        <td class="tabledata"><input type="text" maxlength="100" size="30" type="text" name="AddressField1" tabindex="2" id="AddressField1"></td>
</tr>
<tr>
	<td class="tablefield"><label for="AddressField2">Address 2:</label></td>
        <td class="tabledata"><input type="text" maxlength="100" size="30" type="text" name="AddressField2" tabindex="3" id="AddressField2"></td>
</tr>
<tr>
	<td class="tablefield"><label for="YourCity">City:</label></td>
        <td class="tabledata"><input type="text" maxlength="50" size="30" type="text" name="YourCity" tabindex="4" id="YourCity"></td>
</tr>
<tr>
	<td class="tablefield"><label for="YourState">State:</label></td>
        <td class="tabledata"><select name="YourState" id="YourState" tabindex="5">
        	<option value="WY">Wyoming</option>
</select>
        </td>
</tr>
<tr>
	<td class="tablefield"><label for="YourZip">Zip:</label></td>
        <td class="tabledata"><input type="text" maxlength="10" size="15" type="text" name="YourZip" tabindex="6" id="YourZip"></td>
</tr>
    	<tr>
	<td class="tablefield"><label for="Comment">Condolence Message:</label></td>
        <td class="tabledata"><textarea name="Comment" cols="40" rows="12" id="Comment" tabindex="11"></textarea></td>
</tr>

<tr>
	<td><input name="Obituary_ID" type="hidden" value="<?php echo $row['OB_ID']; ?>"></td>
        <td align="right"><input type="submit" name="sign" Value="Sign Guestbook">
</td>
</tr>


</table>
</form>

Link to comment
Share on other sites

Do I have to add something in the ACTION part of the FORM to POST the data to the next page?

if you dont set the action the form will submit to itself. You only need to set the action if you're submitting the form to different page.

 

I entered the print_r($_POST); code before my if statement and got this

Array
(
)
1

Is that before or after you submit the form? $_POST will be empty if you don't submit the form. You show add in the code I suggested, fill in your form and submit it. It should print the contents of the $_POST array.

Link to comment
Share on other sites

Oh hang on I just saw these lines in your code

//redirect page of $Obituary_ID is invalid
if ($done || !isset($Obituary_ID)) {
   header('Location: /throops/thanks_guestbook.php');
   exit;
   }
}

You wont be able to access your $_POST variables in thanks_guestbook.php. $_POST will be only available to the page you submit the form to. If you want to use the $_POST data in that page you'll have to save the variables you want to carry using sessions. Change this line

    include('includes/connection.inc.php');

to

session_start(); // must be called whenever you use $_SESSION's
   include('includes/connection.inc.php');

 

Now change

   header('Location: /throops/thanks_guestbook.php');

 

to

   $_SESSION['post'] = $_POST;
   header('Location: /throops/thanks_guestbook.php');

 

Now in thanks_guestbook.php make sure you call session_start() at the top of script. Use $_SESSION['post'] to access the $_POST data

Link to comment
Share on other sites

I changed the lines of code, but still nothing. Here is the new code, maybe that will help. I took out some coding that deals with SQL as well to make it shorter and easier to read.

 

<?php
   session_start(); // must be called whenever you use $_SESSION's
   require('includes/connection.inc.php');
require('includes/corefuncs.php');

//Remove backslashes
nukeMagicQuotes();

//initialize flag
$done = false;

//get details of selected record
if ($_GET && !$_POST) {
if (isset($_GET['Obituary_ID']) && is_numeric($_GET['Obituary_ID'])) {
	$Obituary_ID = $_GET['Obituary_ID'];
}
else {
	$Obituary_ID = NULL;
}
if ($Obituary_ID) {
	  $sql = "SELECT * FROM obituaries WHERE OB_ID = $Obituary_ID";
	$result = mysql_query($sql) or die (mysql_error());
	$row = mysql_fetch_assoc($result);
	}
}
//if form has been submitted, add record to guestbook
if (array_key_exists('sign', $_POST)) {
//prepare expected items for insertion into database
foreach ($_POST as $key => $value) {
	if (in_array($key, $expected)) {
		${$key} = mysql_real_escape_string($value);
		}
	}
//abandon the process if primary key invalid
if (!is_numeric($Obituary_ID)) {
	die('Invalid Request');
	}


//redirect page of $Obituary_ID is invalid
if ($done || !isset($Obituary_ID)) {
$_SESSION['post'] = $_POST;
   header('Location: /throops/thanks_guestbook.php');	exit;
}
}
?>

 

 

The next page starts like this:


<?php echo '<pre>'.print_r($_POST, true).'</pre>'; ?>

<?php 
//Start a session to be able to post name of whom the obituary is for on the thank you page
session_start();
//Check to see if the form has been submitted and that Obituary ID is not empty

if ($_POST && !empty($_POST['Obituary_ID'])) {
//Set session variable
$_SESSION['Obituary_ID'] = $_POST['Obituary_ID'];
$Obituary_ID = $_SESSION['Obituary_ID'];

Link to comment
Share on other sites

I would first like to thank everyone for all the help they have provide me so far.

 

I am still not getting any data passed to the second page.

 

This is still what I am getting when I am using <?php echo '<pre>'.print_r($_POST, true).'</pre>'; ?> at the top of the second page.

 

 

Array

(

)

 

 

I do make the changes to the second page to look like this:

 

<?php 
//Start a session to be able to post name of whom the obituary is for on the thank you page
session_start();
//Check to see if the form has been submitted and that Obituary ID is not empty

include('includes/connection.inc.php');

if ($_POST && !empty($_SESSION['post']['Obituary_ID'])) {
//Set session variable
$_SESSION['post']['Obituary_ID'] = $_SESSION['post']['Obituary_ID'];
$Obituary_ID = $_SESSION['post']['Obituary_ID'];

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.