【问题标题】:How to put array into session?如何将数组放入会话?
【发布时间】:2012-01-05 17:54:28
【问题描述】:

这是一个任务,所以不要寻找任何完全安全可靠的东西,只是工作。我在 SQL 数据库中有表,我正在打印所有记录,所有记录都有唯一的参考号,对于我打印下来的数据库的每一行我给了带有行参考值的复选框。号,当我通过“POST”提交它们时,一切正常并打印出来:

if (!$_POST['checkbox']) {
    echo "Your basket is empty.";
} else {
    echo "<table border='0' id='games_table' cellspacing='1'>";
    echo "<tr id='basket_table_row'>";
    echo "<td colspan='3'>" . "Logged: " . $_SESSION['user'] . "</td>";
    echo "<td colspan ='2'>" . "OS used on this machine: " . "<script type='text/javascript'>document.write(yourOS())</script><noscript>Computers</noscript>" . "</td>";
    echo "</tr>";
    echo "<tr id='basket_table_row'>";
    echo "<td colspan='5'>" . "You put into the basket these games: " . "</td>";
    echo "</tr>";
    foreach ($_POST['checkbox'] as $value) {
        $_SESSION['basket']=array($value);

        $res=pg_query($conn,"select * from CSGames where refnumber='$value'");
        while ($a = pg_fetch_array ($res)) {
            echo "<tr id='games_table_row'>";
            echo "<td>" . $a["refnumber"] . "</td>";
            echo "<td>" . $a["title"] . "</td>";
            echo "<td>" . $a["platform"] . "</td>";
            echo "<td>" . $a["description"] . "</td>";
            echo "<td>" . $a["price"] . "</td>";
            echo "</tr>";   
        }
    }
    echo "</table>\n";
}

但只认为 $_SESSION['basket'] 中记录的值是最后一个复选框的值,但我需要所有这些值(60 或 70)。 我做错了什么?

【问题讨论】:

  • 您需要我们展示更多内容。您的要求没有任何意义。

标签: php sql arrays session


【解决方案1】:

您将在循环的每次迭代中覆盖 $_SESSION['basket'] 的值。

最后一个值是唯一存储的值。

【讨论】:

    【解决方案2】:

    目前,你只存储最后一个值,如果你想存储每个值,你应该像这样添加它:

    $_SESSION['basket'][] = $value;
    

    【讨论】:

      【解决方案3】:
      foreach($_POST['checkbox'] as $value){
      
          $_SESSION['basket']=array($value);
      
      }
      

      循环的每次迭代都会覆盖 $_SESSION['basket'] 中的值,因此您只能看到最后一个复选框值。

      【讨论】:

        【解决方案4】:

        在 foreach 的每一步中,您都会在 $_SESSION['basket'] 中创建一个新数组,其中只有一项,即 $value 的当前值。更正如下:

        // ...
        $_SESSION['basket'] = array();
        foreach ($_POST['checkbox'] as $value) {
            $_SESSION['basket'][] = $value;
            // ...
        }
        // ...
        

        【讨论】:

          【解决方案5】:

          你可以直接这样做

          $_SESSION['basket'] = $_POST['checkbox'];

          因为$_POST['checkbox'] 的数据无论如何都是一个数组。 您正在做的是循环 $_POST['checkbox'] 并将每个数据作为数组保存到会话中。

          这个$_SESSION['basket'] = $_POST['checkbox'];

           foreach ($_POST['checkbox'] as $value) {
                  $_SESSION['basket'][]=$value;
           }
          

          将具有相同的值。

          你所拥有的只是保存$_POST['checkbox']的最后一个值

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-04-24
            • 2019-05-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多