在会话中将ID添加为数组,并根据其中的ID返回产品

时间:2016-08-18 08:59:32

标签: php mysql session

我正在尝试将多个产品添加到会话中,然后在引用页面上显示该会话中的所有产品。

我是怎么做的:

链接到引用页面,该页面用它发送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();

1 个答案:

答案 0 :(得分:2)

只需检查$_SESSION['product']是否已存在。如果没有将其创建为ARRAY。然后将所有后续ID添加到$_SESSION['product']数组中,如下所示:$_SESSION['product'][] = $_GET['product'];。这样,当您尝试访问$_SESSION['product']

时,您肯定会拥有一系列ID
<?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