PHP 更改不同链接的会话数据


PHP change session data for different links

我遇到了一个有趣的问题。我在一个页面上有 6 个不同的项目待售,而不是制作 6 个不同的页面来详细查看每个项目,我想使用 PHP 将所有 6 个项目链接从第一页重定向到单个详细视图页面,并根据单击的项目链接更新详细视图页面的图片、描述和标题

所以代码

<?php $merchandiseData = array('TITLE', 'DESCRIPTION', 'IMG_LINK'); 
      $_SESSION['merchandise'] = $merchandiseData; ?>
<button onClick="window.location='item.html';" class="button"type="button">Add to Cart</button>
<?php $merchandiseData = array('TITLE_2', 'DESCRIPTION_2', 'LINK_2');
      $_SESSION['merchandise'] = $merchandiseData; ?>
<button onClick="window.location='item.html';" class="button">Add to Cart</button>

所以基本上这段代码在 6 个不同的链接中持续 6 次,第二页只是从 $_SESSION['商品'] 中获取数据;然后回显

文档
<p class="item-name"><?php echo $_SESSION['merchandise'][0] ?></p>
<div class="picture" style="background-image: url(<?php echo $_SESSION['merchandise'][2] ?>)"></div>
<p class="description"><?php echo $_SESSION['merchandise'][1]; session_destroy(); ?></p>

所以我的问题是,当我单击链接时,$merchandiseData将正常工作,但我单击的 6 个链接中的每一个始终指向相同的图像链接、标题和描述,并且它是我传递给页面上会话的最后一个数据数组。所以在我上面给出的示例中,即使我单击第一个按钮,它仍然会输出第二个按钮的数据,我不知道为什么?

任何帮助将不胜感激!或者,如果有一种更简单的方法可以使用jquery或javascript id来做到这一点,那么就想知道!

您遇到此问题的原因是,您将商品值存储在同一个会话变量中,因此您将覆盖初始值并仅存储最后一个值。 如果你不介意试试这个:

<?php $merchandiseData = array('TITLE', 'DESCRIPTION', 'IMG_LINK'); 
      $_SESSION['m1'] = $merchandiseData; ?>
<button onClick="window.location='item.html?id=m1';" class="button"type="button">Add to Cart</button>
<?php $merchandiseData = array('TITLE_2', 'DESCRIPTION_2', 'LINK_2');
      $_SESSION['m2'] = $merchandiseData; ?>
<button onClick="window.location='item.html?id=m2';" class="button">Add to Cart</button>

然后在第二页上,您执行以下操作:

<?php   $id = $_GET['id']; ?>
<p class="item-name"><?php echo $_SESSION[$id][0] ?></p>
<div class="picture" style="background-image: url(<?php echo $_SESSION[$id][2] ?>)"></div>
<p class="description"><?php echo $_SESSION[$id][1]; session_destroy(); ?></p>

发生这种情况是因为您的 PHP 代码编译了 1 次。例如,如果您在文件中写入;

$_SESSION['test'] = 1;
$_SESSION['test'] = 2;

并尝试获得$_SESSION['test'],您将获得2。因为您将重写您的会话。我认为你需要做这个帮助PHP脚本,或者通过Ajax。