Jump to content


Photo

Problem unserializing / displaying an array from cookie


  • Please log in to reply
5 replies to this topic

#1 MrL8Knight

MrL8Knight
  • New Members
  • Pip
  • Newbie
  • 6 posts

Posted 06 March 2006 - 01:38 AM

Hello,
I am trying to build a simple php form based shopping cart using a cookie with arrays. I need to use 1 cookie because each order will have over 20 items. With that said, I realize I need to serialize the data to put the array into the cookie. That part of my code is working just fine and displaying fine. The problem I’m having is when I try to unserialize and display; the data does not appear. If I remove my unserialize command line (see page 3) the data displays just fine with the serialization.

So basically I need help unserializing and displaying the data so I can display it in my shopping cart nice and clean.

Here is page 1(index2.php) which is a form that asks for opening name, width and height.
<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
echo "$count";

echo "<form action='add.php?id=$count' method='post'>
<input name='name' type='hidden' value='$count'>
Opening name<br>
<input name='name' type='text' size='30'>
</b></p>
<p><b> Width<br>
<input name='w' type='text' size='30'>
</b></p>
<p><b> Height<br>
<input name='h' type='text' size='30'>
</b></p>
<p>
<input type='image' src='../images/Start-Order.gif' name='submit' alt='Start Order'>
<br>
</p>
</form>";
?>



The second page(add.php) receives the data, creates a serialized array and adds it to the cookie just fine.


<?php
$count= $_GET['id'];
$name= $_POST['name'];
$w= $_POST['w'];
$h= $_POST['h'];

$serialized_data = serialize (array ($count, $name, $w, $h));

setcookie("mycookie[$count]", $serialized_data, time()+13600);

echo "Opening was Added<br><br>";
echo "$count";
echo "<br><br>";
echo "$name";
echo "$w";
echo "$h";
echo "<br><br>";

echo "<a href='index2.php'>Add another opening!</a><br>";
echo "<a href='show.php'>Show!</a><br>";

?>

Where the problem is when you click show (show.php) you see the serialized data.

I am trying to restore the data with an unserialize (see below line 8), but when I add that line of code, my data disappears instead of being stripped of the serialization. When I remove line 8, the data displays serialized.

So something is wrong, I guess with my unserialize method.


<?php

if($_COOKIE["mycookie"]) {

foreach( $_COOKIE[mycookie] as $key => $value)
{

$value2 = unserialize ($value);

echo "Number $key : Description $value2";

}
echo "<a href='index2.php'>Add Opening</a><br><br>";

}
else {
print "No Items in your cart<br><br>";
echo "<a href='index2.php'>Add Opening</a><br><br>";
}

?>



I have tried all weekend long and could use some help! Thanks - Late Nighter


#2 Hooker

Hooker
  • Members
  • PipPipPip
  • Advanced Member
  • 193 posts
  • LocationWales, UK

Posted 06 March 2006 - 06:22 AM

try something like:

<?php

if($_COOKIE["mycookie"]) {

foreach( $_COOKIE[mycookie] as $key => $value)
{

$value2 = unserialize ($value);
print_r($value2, true); //$value2 now contains output from print_r

echo "Number $key : Description $value2";

}
echo "<a href='index2.php'>Add Opening</a><br><br>";

}
else {
print "No Items in your cart<br><br>";
echo "<a href='index2.php'>Add Opening</a><br><br>";
}

?>


#3 MrL8Knight

MrL8Knight
  • New Members
  • Pip
  • Newbie
  • 6 posts

Posted 06 March 2006 - 11:05 PM

Hey Hooker,

Thanks for your response!

I tried your code for the page 3 and still no data displaying. It will display the key data but still doesn't display the "value" data, if I remove the unserialize command it displays the data fine, but of course serialized. One other thing to note your code did work fine without any errors, just still can't see the data.

Any other ideas?

Thank you for your help!

MrL8Knight

#4 MrL8Knight

MrL8Knight
  • New Members
  • Pip
  • Newbie
  • 6 posts

Posted 07 March 2006 - 01:44 AM



I added a print_r($_COOKIE); at the beginning of the page Hooker provided me to display all my cookie values for diagnosis. Here is what my output looks like, I'm still missing the unserialized values, I'm wondering am I storing the values wrong on page 2?, or am I retreiving them wrong on page 3?....


Array ( [Cart3] => [mycookie] => Array ( [1] => a:4:{i:0;s:1:\"1\";i:1;s:6:\"tester\";i:2;s:2:\"12\";i:3;s:2:\"12\";} [2] => a:4:{i:0;s:1:\"2\";i:1;s:7:\"tester2\";i:2;s:2:\"48\";i:3;s:2:\"48\";} [4] => a:4:{i:0;s:1:\"4\";i:1;s:5:\"test4\";i:2;s:2:\"23\";i:3;s:2:\"23\";} ) [count] => 4 [phpbb2mysql_data] => a:2:{s:11:\"autologinid\";s:0:\"\";s:6:\"userid\";s:1:\"2\";} [PHPSESSID] => 5c7ba3baf248de93aaf9ff3c7cc32702 )

Number 1 : Description Number 2 : Description Number 4 : Description Add Opening


#5 kenrbnsn

kenrbnsn
  • Staff Alumni
  • Advanced Member
  • 8,235 posts
  • LocationHillsborough, NJ, USA

Posted 07 March 2006 - 02:20 AM

Use stripslashes on the serailized data before unserializing it.

<?php $value2 = unserialize(stripslashes($value)); ?>

Ken

#6 MrL8Knight

MrL8Knight
  • New Members
  • Pip
  • Newbie
  • 6 posts

Posted 07 March 2006 - 05:41 AM

Ok I finally figured this one out, first thank you to all that have helped me with this problem; I can’t express how much it is appreciated.

Here are the 3 working pages, hope someone else finds this simple, PHP form based shopping cart usefull!

Page 1 (index2.php)(the Form, which starts a cookie to keep an incremental count (Key) for each opening)

<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time()+13600);
echo "$count";

echo "<form action='add.php?id=$count' method='post'>
<input name='name' type='hidden' value='$count'>
Opening name<br>
<input name='name' type='text' size='30'>
</b></p>
<p><b> Width<br>
<input name='w' type='text' size='30'>
</b></p>
<p><b> Height<br>
<input name='h' type='text' size='30'>
</b></p>
<p>
<input type='image' src='../images/Start-Order.gif' name='submit' alt='Start Order'>
<br>
</p>
</form>";
?>


Page 2 (add.php)(the script to get and serialize data typed in the form and add it to the cookie)


<?php
$count= $_GET['id'];
$name= $_POST['name'];
$w= $_POST['w'];
$h= $_POST['h'];

$serialized_data = serialize (array ($count,$name,$w,$h));

setcookie("mycookie[$count]", $serialized_data, time()+13600);

echo "Opening was Added<br><br>";
echo "$count";
echo "<br><br>";
echo "$name";
echo "$w";
echo "$h";
echo "<br><br>";

echo "<a href='index2.php'>Add another opening!</a><br>";
echo "<a href='show.php'>Show Cart!</a><br>";

?>


Page 3 (show.php)(the show cart page that checks to see if items are in the cart (or cookie) and if so, shows the unserialized data)

<?php

if($_COOKIE["mycookie"]) {

foreach( $_COOKIE[mycookie] as $key => $value)
{

$value2 = unserialize(stripslashes($value));
echo "<br>";
print_r($value2[0]);
print_r($value2[1]);
print_r($value2[2]);
print_r($value2[3]);

}
echo "<br><br>";
echo "<a href='index2.php'>Add Opening</a><br><br>";

}
else {
print "No Items in your cart<br><br>";
echo "<a href='index2.php'>Add Opening</a><br><br>";
}

?>

Thanks again everyone… Cheers!

-MrL8Knight




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users