SitePoint Sponsor

User Tag List

Results 1 to 2 of 2
  1. #1
    SitePoint Member
    Join Date
    Jun 2007
    Posts
    2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question PHP: Session 2-Dimensional Array - Track Viewed Products

    I'm trying to create an array to display the last 5 products a customer has viewed.

    The array is a 2 dimensional array like below...
    $RView= array(
    array( ID => "1001", RefCode => "Ref_01", Name => "Name_01" ),
    ...
    array( ID => "1005", RefCode => "Ref_05", Name => "Name_05" )
    );

    The array values are retrieved from the products recordset and is designed to function as follows when a customer visits a product page.

    1. Page will check if a Session Array exists.
    2a. If yes, an array variable is created from existing Session.
    2b. If no, a new array is created.
    3. Array will add the new product details.
    4. Array will count if there are more than 5 existing products in the array.
    5a. If yes, it will remove the oldest.
    5b. If no, moves to step 6.
    6. A Session is created/updated from the revised Array.

    My current effort is attached below...
    Many thanks for any help.

    Code:
    <?php 
        session_start() 
        // Get or Create Array
        IF (isset($_SESSION['sessRView'])) {
        $RView = ($_SESSION['sessRView']); } 
        ELSE {
        $RView = array(array()); 
        }
    
        // Append currently viewed Product to Array
        array(array_unshift($RView, $row_rsPrd['PrdID'], $row_rsPrd['RefCode'], $row_rsPrd['Name']));
    
        // Check if more than 5 products exist in Array, if so delete.
        IF (sizeof($RView) > 5) {
        array(array_pop($RView)); }
    
        // Update Session for next page
        $_SESSION['sessRView'] = $RView;
    
        // Display Array
        for ($row = 0; $row < 5; $row++)
        {
        echo "<ul>";
            echo "<li><a href='?PrdID=".$RView[$row]["PrdID"]."'>".$RView[$row]["RefCode"]."</a> : ".$RView[$row]["Name"]."</li>";
        echo "</ul>";
        }
    ?>

  2. #2
    SitePoint Member
    Join Date
    Jun 2007
    Posts
    2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    My problem was solved with the following function used instead of my original code.
    Thanks to "kkeith29" over at daniweb

    Here's the code if it helps anyone in future.

    Code:
    <?php
    
    session_start();
    
    function addProductToSession( $id,$code,$name ) {
    	$recView =& $_SESSION['recently_viewed'];
    	if ( count( $recView ) == 5 ) {
    		array_shift( $recView );
    	}
    	$recView[] = array( $id,$code,$name );
    }
    
    function getRecentlyViewedProducts() {
    	$ul = "<ul>\n";
    	foreach( $_SESSION['recently_viewed'] as $data ) {
    		list( $id,$code,$name ) = array_values( $data );
    		$ul .= "\t<li><a href=\"?PrdID={$id}\">{$code}</a> : {$name}</li>\n";
    	}
    	$ul .= "</ul>";
    	echo $ul;
    }
    
    //Query database for product info
    //The $row_rsPrd is from the database result
    
    addProductToSession( $row_rsPrd['PrdID'], $row_rsPrd['RefCode'], $row_rsPrd['Name'] );
    
    getRecentlyViewedProducts();
    
    ?>


Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •