我正在尝试将多个产品添加到会话中,然后在引用页面上显示该会话中的所有产品。
我是怎么做的:
链接到引用页面,该页面用它发送productid:
<p><a class="offertelink" href="offerte.php?product='.$productcr[0]['id'].'">Request a quote</a></p>
然后在引用页面上我把它放在一个会话中:
$_SESSION['product'] = $_GET['product'];
但这只会记住一个产品,如果我回去添加另一个产品,那么只显示新产品而不是我添加的两个产品。
我想在会话中保存所有ID,然后在查询中使用id IN ('1', '2', '3')
将id作为通过点击链接发送的产品。
我尝试了一些事情,例如将会话转换为数组但仍然只记得一个产品ID。我将session_start放在我包含的文件的顶部。
$_SESSION['product'] = array();
答案 0 :(得分:2)
只需检查$_SESSION['product']
是否已存在。如果没有将其创建为ARRAY
。然后将所有后续ID添加到$_SESSION['product']
数组中,如下所示:$_SESSION['product'][] = $_GET['product'];
。这样,当您尝试访问$_SESSION['product']
<?php //<== NOTICE THAT THERE IS NO WHITE SPACE BEFORE "<?php"
// FIRST CHECK IF SESSION EXIST BEFORE STARTING IT.
// DO THIS AT THE VERY TOP OF EACH SCRIPT THAT NEEDS ACCESS TO $_SESSION DATA
if (session_status() == PHP_SESSION_NONE || session_id() == '') {
session_start();
}
// DO THIS ON THE PAGE WHERE YOU ARE SETTING THE IDs INTO THE $_SESSION
if( !isset($_SESSION['product'])){
$_SESSION['product'] = array();
}
$_SESSION['product'][] = $_GET['product'];
更新:获取在数据库中使用的字符串值
<?php
if( !isset($_SESSION['product'])){
$_SESSION['product'] = array();
}
// CHECK FIRST THAT $_GET['product'] IS SET BEFORE ADDING IT TO SESSION
if( isset($_GET['product']) ){
$_SESSION['product'][] = $_GET['product'];
}
// IN THE FILE THAT USES THE DATA FOR DATABASE TRANSACTIONS,
// YOU CAN DO THIS:
// THE $valuesForDB WOULD CONTAIN SOMETHING LIKE: '2','7','10','12','13'
$valuesForDB = "'" . implode("','", $_SESSION['product']) . "'";
var_dump($valuesForDB); //<== PRODUCES::: string ''2','7','10','12','13'' (length=22) [FOR EXAMPLE]
var_dump($_SESSION['product']);
// PRODUCES SOMETHING LIKE:::
array (size=5)
0 => int 2
1 => int 7
2 => int 10
3 => int 12
4 => int 13