Bluehost.com Web Hosting $6.95

Session/Cookie--To Create a "My Favorites" list

This is a discussion on Session/Cookie--To Create a "My Favorites" list within the alt.comp.lang.php forums, part of the PHP Programming Forums category; What I am trying to do is this: I want to have a link on each of several pages and ...


Go Back   Usenet Forums > PHP Programming Forums > alt.comp.lang.php

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 12-22-2005
Mark ??;-\)
 
Posts: n/a
Default Session/Cookie--To Create a "My Favorites" list

What I am trying to do is this:
I want to have a link on each of several pages and a "My Favorites" section
that displays on all of these pages so that if someone clicks on the "add to
my favorites" link the current page will get added to the "My Favorites"
section.

I want this list to be persistent so that each time the same person comes
back (of course from the same computer) that their favorites list remains
there. I don't want to require users to have to log in first.

How do I set something like this up? Should I use cookies only, cookies
with session id's connected to a database, something else?

Maybe it's just the end of the year wearing me out, but my brain is just not
working around this problem at all. I started working with using just
cookies, but then I had problems dealing with the additional links; say
someone can keep 5 favorites, how do you deal with the 6th? Do you offer an
interface to choose which to replace, or just bump the first one off of the
list?

Any help would be appreciated.

-Mark


Reply With Quote
  #2 (permalink)  
Old 12-22-2005
Hilarion
 
Posts: n/a
Default Re: Session/Cookie--To Create a "My Favorites" list

> What I am trying to do is this:
> I want to have a link on each of several pages and a "My Favorites" section
> that displays on all of these pages so that if someone clicks on the "add to
> my favorites" link the current page will get added to the "My Favorites"
> section.
>
> I want this list to be persistent so that each time the same person comes
> back (of course from the same computer) that their favorites list remains
> there. I don't want to require users to have to log in first.
>
> How do I set something like this up? Should I use cookies only, cookies
> with session id's connected to a database, something else?
>
> Maybe it's just the end of the year wearing me out, but my brain is just not
> working around this problem at all. I started working with using just
> cookies, but then I had problems dealing with the additional links; say
> someone can keep 5 favorites, how do you deal with the 6th? Do you offer an
> interface to choose which to replace, or just bump the first one off of the
> list?



I'd not use session and store anything on the server side when you do not
even know if the user is going to come back. I'd go for cookies.
You do not have to limit the links count - use array (which means multiple
cookies, but that's not a problem).

<?php
// read all favorites from cookies
if (isset( $_COOKIE['favorites'] ) && is_array( $_COOKIE['favorites'] ))
$favorites = $_COOKIE['favorites'];
else
$favorites = array();

// Function which sets cookie for specified favorite.
function set_favorite( $favorites, $id, $remove = false )
{
if ($remove)
$expires = time() - 60*60*24*365*2; // expired 2 years ago
else
$expires = time() + 60*60*24*30; // expires in 30 days
$favorite = $favorites[$id];
setcookie(
'favorites['.$id.'][name]', // this makes it work as array on PHP side
strval( $favorite['name'] ), // store name
$expires,
'/', // accesible for all pages in the domain
'.domain.com', // include subdomains like 'www.domain.com' or 'my.domain.com'
0 // works not only with HTTPS but also HTTP
);
setcookie(
'favorites['.$id.'][address]',
$favorite['address'], // store address
$expires,
'/',
'.domain.com',
0
);
}

// Refresh cookies each time the user acceses your webpage
// and remove favorites selected for removal.
$num = 0;
foreach( $favorites as $id => $favorite )
{
if (isset( $_REQUEST['remove_favorite'][$id] ))
{
set_favorite( $favorites, $id, true );
unset( $favorites[ $id ] );
}
else
{
if (intval($id) > $num )
$num = intval($id);
set_favorite( $favorites, $id );
}
}
unset( $i );
unset( $favorite );

// add new favorite
if (isset( $_REQUEST['add_to_favorites'] ))
{
$num++;
$favorites[$num] = $_REQUEST['add_to_favorites'];
set_favorite( $favorites, $num );
}
unset( $num );

?>
<html>
<head>
<title>Your favorites</title>
</head>
<body>
<form
action="<?php echo htmlspecialchars( $_SERVER['REQUEST_URI'] ); ?>"
method="post"
>

<table>
<tbody>
<?php
foreach( $favorites as $id => $favorite )
{
?>
<tr>
<td>
<a
href="<?php echo htmlspecialchars( $favorite['address'] ); ?>"
>

<?php echo htmlspecialchars( $favorite['name'] ); ?>
</a>
<td>
<td>
<input
type="checkbox"
name="remove_favorite[<?php echo htmlspecialchars( $id ); ?>]"
value="Remove"
/>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
<input type="submit" value="Remove selected favorites" />
</form>
<form
action="<?php echo htmlspecialchars( $_SERVER['REQUEST_URI'] ); ?>"
method="post"
>

Add current page to favorites as
<input type="text" name="add_to_favorites[name]" value="" />.
<input type="hidden" name="add_to_favorites[address]"
value="<?php echo htmlspecialchars( $_SERVER['REQUEST_URI'] ); ?>" />
<input type="submit" />
</form>
</body>
</html>


The above code is a page that displays stored favorites and allows to add
current page to favorites (which may not be a good idea).
The code which is before <html> and the code which is in second <form> should
be on each page (probably in some separate files included on each page,
first one at the very start of the script - before any output is sent,
and the second one in some visually appropriate place).
The code in first <form> should be where you want to show the
saved favorites (maybe on each page too, but in that case you should
only show first few entries and without the "remove favorites" mechanisms,
but with some link to "favorites management page"), maybe followed
by the code from the second <form>.
You could replace "action" attribute value for both <form> tags to
some specific page ("favorites management page"). I used 'REQUEST_URI'
to keep the user on the same page (it'll not work if the page got some
important data by "post" request and did not store it somewhere).


Hilarion
Reply With Quote
  #3 (permalink)  
Old 12-22-2005
Mark ??;-\)
 
Posts: n/a
Default Re: Session/Cookie--To Create a "My Favorites" list

Thank you for your post. I will give it a try probably after the Holidays
and will follow-up with how it worked for me.

You are awesome.

-Mark


Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT +1. The time now is 03:22 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0