如何使用会话存储收藏夹?

时间:2014-03-24 21:51:39

标签: php session

有没有人可以帮我解决这个问题? 我正在尝试在我的网页上创建“收藏夹”功能。访问者可以看到不同的产品页面,并选择一个产品作为收藏。在页面顶部是一个图像。当访问者单击此图像时,将使用以下代码行加载页面:

<?php 
session_start();

ini_set('display_errors', 1);
error_reporting(E_ALL);

define("PRODUCTNAME", 1);
define("inURL", 1);

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['productname']))
{
  AddToCart();
}
} 


function AddToCart()
{
$cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : '';
$itemcount = isset($_SESSION['itemcount']) ? $_SESSION['itemcount'] : 0;
$event = $_POST['productname'];
$savelink = $_POST['url'];

$cart[PRODUCTNAME][$itemcount] = array('eventnaam' => $event, 'savelink' => $savelink, 'favSRC' => 'favJA');
$itemcount = $itemcount + 1;

$_SESSION['cart'] = $cart;
$_SESSION['itemcount'] = $itemcount;
header('Location: ' . $_POST['url']);
exit;
} 
?>

此代码创建不同的会话值,因为在产品页面上我需要显示一些内容。

在产品页面的顶部有标题。标题旁边会显示一个星形(带有src=favNEE.png的图像,一个没有颜色的星形)。在页面的右侧,在另一个div中显示标记产品列表。可以单击此文本(产品名称),以便访问者再次访问产品页面。产品页面的代码:

<?php 
session_start();

ini_set('display_errors', 1);
error_reporting(E_ALL);

define("PRODUCTNAME", 1);

$cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : '';
$itemcount = isset($_SESSION['itemcount']) ? $_SESSION['itemcount'] : 0;
$strHTML = "";

if ($itemcount == 0)
{
$strHTML = "<font class='bewaardeItems'>U heeft nog geen evenementen aangeklikt.    </font>";
$imageSRC = 'favNEE';
}
else
{
$strHTML = "<div style=\"overflow:auto; height=358px;\">"."\n";
$strHTML .= "<table border=\"0\" cellpadding=\"3\" cellspacing=\"2\"   width=\"100%\">"."\n";

for ($i=0; $i<$itemcount; $i++)
{
  $strHTML .= "<tr>"."\n";
  $strHTML .= "<td><a href='".$cart[PRODUCTNAME][$i]['savelink']."'    class='bewaardeItems'>".$cart[PRODUCTNAME][$i]['eventnaam']."</a></td>"."\n";
  $strHTML .= "</tr>"."\n";
  if ($cart[PRODUCTNAME][$i]['favSRC'] == "favJA" && $cart[PRODUCTNAME][$i]  ['eventnaam'] == "Blackout") {
        $imageSRC = 'favJA';
  }
  else {
        $imageSRC = 'favNEE';
  }
 }

 $strHTML .= "</table>"."\n";
 $strHTML .= "</div>"."\n";
};
?>

以上代码有效,我可以将多个产品标记为收藏,所有唯一名称在页面右侧显示为文本,图像src完全更改为favJA(同一颗星但颜色为,所以访问者知道它被标记了)。但是,只要我点击另一个产品并将其标记为favit,它就会根据需要更改图像src,但会忘记之前标记的其他产品。右侧的列表包含所有唯一名称,它会记住所有标记的产品,但图像不会。图像仅识别最后一个产品。一旦新产品被标记,它就会标记所有其他图像。

我在这里缺少什么?无论标记的产品数量是多少,我如何保持图像标记?

2 个答案:

答案 0 :(得分:0)

当您使用标签时,您需要制作一系列图像,并将所有图像添加到其中。并将它们显示在循环函数(foreach或任何你想要的东西)

答案 1 :(得分:0)

所以我创建了一个解决方法。我已在代码中添加了新的SESSION值,其中包含产品页面的名称和图片的值。

<?php 
session_start();

ini_set('display_errors', 1);
error_reporting(E_ALL);

 define("PRODUCTNAME", 1);
define("inURL", 1);

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
   if (isset($_POST['productname']))
   {
      AddToCart();
   }
} 


function AddToCart()
{
   $cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : '';
   $itemcount = isset($_SESSION['itemcount']) ? $_SESSION['itemcount'] : 0;
   $event = $_POST['productname'];
   $savelink = $_POST['url'];
   $longeventname = $_POST['longeventname'];
   $favIMGsrc = 'favJA';

   $cart[PRODUCTNAME][$itemcount] = array('eventnaam' => $event, 'savelink' =>     $savelink);
   $itemcount = $itemcount + 1;

   $_SESSION['cart'] = $cart;
   $_SESSION['event_url_'.$longeventname] = $favIMGsrc;
   $_SESSION['itemcount'] = $itemcount;
   header('Location: ' . $_POST['url']);
exit;
} 
?>

在产品页面上,只需调用session,然后让php比较它的值即可。如果值与YES匹配,则img src设置为YES。如果该值返回NO,则img src设置为NO。

<?php 
session_start();

ini_set('display_errors', 1);
error_reporting(E_ALL);

define("PRODUCTNAME", 1);

$cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : '';
$eventURL = isset($_SESSION['event_url_blackout']) ? $_SESSION['event_url_blackout'] : '';
$itemcount = isset($_SESSION['itemcount']) ? $_SESSION['itemcount'] : 0;
$strHTML = "";

if ($itemcount == 0)
{
   $strHTML = "<font class='bewaardeItems'>U heeft nog geen evenementen aangeklikt.    </font>";
   $imageSRC = 'favNEE';
}
else
{
   $strHTML = "<div style=\"overflow:auto; height=358px;\">"."\n";
   $strHTML .= "<table border=\"0\" cellpadding=\"3\" cellspacing=\"2\"     width=\"100%\">"."\n";

   for ($i=0; $i<$itemcount; $i++)
   {
      $strHTML .= "<tr>"."\n";
      $strHTML .= "<td><a href='".$cart[PRODUCTNAME][$i]['savelink']."'     class='bewaardeItems'>".$cart[PRODUCTNAME][$i]['eventnaam']."</a></td>"."\n";
      $strHTML .= "</tr>"."\n";
   }

   $strHTML .= "</table>"."\n";
   $strHTML .= "</div>"."\n";
};

if ($eventURL == "favJA"){
    $imageSRC = 'favJA';
} else {
            $imageSRC = 'favNEE';
      }
?>

解决了这个问题!