Jump to content

Archived

This topic is now archived and is closed to further replies.

MrL8Knight

Problem unserializing / displaying an array from cookie

Recommended Posts

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.

[b]Here is page 1(index2.php) which is a form that asks for opening name, width and height.[/b]
<?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>";
?>



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


<?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>";

?>

[b]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.[/b]

<?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

Share this post


Link to post
Share on other sites
try something like:

[code]<?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>";
}

?>[/code]

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites


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

Share this post


Link to post
Share on other sites
Use stripslashes on the serailized data before unserializing it.

[code]<?php $value2 = unserialize(stripslashes($value)); ?>[/code]

Ken

Share this post


Link to post
Share on other sites
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!

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

<?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>";
?>


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


<?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>";

?>


[b]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)[/b]

<?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>";
}

?>

[b]Thanks again everyone… Cheers![/b]

-MrL8Knight

Share this post


Link to post
Share on other sites

×

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.