PHPology is a collective of highly skilled, award winning, web gurus.
Contact Raj on 07985 467 213 or email [email protected]

Handling cookies and arrays with PHP

Working on my latest baby www.twitterknitter.co.uk one of the features was to add in a "like" tweet button. Catch - to prevent the user from liking if they had already liked.

Normally I would have used a db and sessions and closing down the browser and reopening would allow the user to like again.

This time I went for a cookie option so everytime a tweet was liked I would append that to the cookie so that the user was not able to vote unless they deleted that cookie.

The code segment is below (not the cleanest code):

<?php
$twitter_likes_ = array();
if(isset($_COOKIE['twitter_likes']))
{
    //get the content from it
    $already_voted_str = $_COOKIE['twitter_likes'];
    //echo $already_voted_str . "
";
   
    //get the string and convert into an array so that I can check to see if this entry_id is in there already
    $already_voted_array = explode(",", $already_voted_str);
    //print_r($already_voted_array);

    //check that entry_id is not already in array
    if(!in_array($entry_id, $already_voted_array))
    {
        //increment like count
        $et->Update_likes();
       
        //send back the total likes
        $total_likes = ($et->Likes+1);
        echo $total_likes;

        //append the new entry_id to $already_voted_str
        $already_voted_str = $already_voted_str . ",".$entry_id;
    }
    else
    {
        echo $et->Likes;
    }
    setcookie("twitter_likes", $already_voted_str, time()+(2592000));  /* expires in 1 month */
    //echo "
Already votes string: ".$already_voted_str;
}
else
{
    //increment like
    $et->Update_likes();
   
    //send back the total likes
    $total_likes = ($et->Likes+1);
    echo $total_likes;
   
    setcookie("twitter_likes", $entry_id, time()+(2592000));  /* expires in 1 month */
}
?>