【问题标题】:php array stored in sessionphp数组存储在会话中
【发布时间】:2014-01-20 04:06:51
【问题描述】:

这个问题仍然没有解决方案

所以这就是我想要做的:

在购物车中有一个带有选项的产品。选项将通过<input type="checkbox/> 进行选择,并且产品基于 php 会话中的 id 存储。

现在我将糖果作为数组提交(如下所示),但我不确定如何在会话中将其添加到特定产品中。

我的选项输入是这样的:

<?php foreach($options as $option): ?>
   <input type="checkbox" name="candies[]" value="<?php echo $option['candy_name']; ?>" /><?php echo $option['candy_name']; ?><br/>
<?php endforeach; ?>

我当前将产品添加到会话的代码是这样的:

...
case "add":
 $_SESSION['cart'][$product_id]++;
 header('location: ../../cart.html');
break;
...

我还在上述代码上方放置了$candies = $_GET["candies"]; 以获取选项。

如何才能将选项数组存储在每个单独产品的会话中?

在下面的这张图片中,您可以看到我在说什么...我想在特定产品的选项列下显示每个选定的选项。

【问题讨论】:

  • $product_id 中有什么内容?你的 PHP sn-p 没有说
  • 很简单:$product_id = $_GET['id']; 所以,product id 存储在数据库中。

标签: php session


【解决方案1】:

这可能不是您正在寻找的确切代码,但这应该作为您想要实现的目标的指南。

假设您想从数据库的 productOptions 中获取产品选项值。

$resultSet = mysql_query("SELECT * FROM productOptions");

现在我们根据查询结果在您的表单中显示复选框。

while($row = mysql_fetch_assoc($resultSet)){
     echo "<input type='checkbox' name='options[]' value='{$row['optionsID']}' />";
}

在我们的表单显示复选框后,我们从那些选中的复选框中获取选中的值。

if(isset($_POST['yourSubmitButtonName'])){
     $productSelected = array();
     if(!empty($_POST['options'])){
          foreach($_POST['options'] as $options){
               $optionsSelected[] = $options;
          }
     }
}

现在,将选项数组设置为 $_SESSION 变量。

$_SESSION['yourProductID'] = $optionsSelected;

然后我们以这种方式显示产品的选项

foreach($_SESSION['yourProductID'] as $productOptions){
     echo $productOptions;
}

【讨论】:

  • 好的,所以我将第二个代码块放在一个文件中(处理提交),然后将最后两个块放在另一个文件中(显示购物车)当我把它们放在一个文件中时(处理文件)效果很好。但是当我按照他们必须的方式将它们分开时,我在购物车页面上收到此错误:Warning: Invalid argument supplied for foreach() in /home/www/---/config/templates/shopping-cart.php on line 47 会话在此页面中开始,我可以回显$product_id,但我不能使用$_SESSION[$product_id]
  • 关于什么可能导致此问题的任何想法?
  • @MitchEvans - 我无法弄清楚你的代码有什么问题,我已经测试了上面的代码并且它工作正常。我也可以回显这两个变量。确保正确初始化所有变量。或者你可以在这里发布你的代码,让我们看看我们能做些什么来帮助你。
  • 我无法让我的所有代码都很好地发布。你愿意分享屏幕吗?
【解决方案2】:

看起来您的 HTML 结构正确,但您的代码是脱节的。最简单的答案是做这样的事情

$_SESSION['cart'][$product_id] = array('options' => $_POST['candies']);

然后你会做类似的事情

foreach($_SESSION['cart'][$product_id]['options'] as $opt) {
     echo $opt;
}

【讨论】:

  • ++ 发生了什么,当我用您的新代码替换 $_SESSION['cart'][$product_id]++; 时,我收到此错误:Fatal error: Unsupported operand types 我想我还没有完全理解。
  • 见这里:candy.the-green-panda.org/cart.html 正是我在实现您的代码时收到的错误。 $_POST['candies'] 也已经在一个数组中。
  • $_SESSION['cart'] 已经是一个数组了吗?我不明白你为什么会收到这个错误。
【解决方案3】:

代码应该看起来像这样第一个 html 带复选框

<form action="sample.php" method="post">
<input type="checkbox" name="candies[]" value="Candy1" />
<input type="checkbox" name="candies[]" value="Candy2" />
<input type="checkbox" name="candies[]" value="Candy3" />
<input type="submit" value="Submit" />
<form>

然后会话

<?php
session_start();
$result = array();
foreach ( $_POST['candies'] as $key=>$row ) :

    $result[$key] = $row[$key];
endforeach; 

$_SESSION['candies'] = $result;

print_r($_SESSION['candies']);

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2011-07-14
    相关资源
    最近更新 更多