PHP $ _SESSION只存储最后一个变量

时间:2014-06-21 13:46:28

标签: php session

感谢您阅读本文,我正在使用PHP会话构建购物车,当我单击表单上的提交按钮时,$ _POST能够将值传递给$ _SESSION ['&#39 ;]数组,但是当我再次单击提交按钮时,$ _SESSION数组只包含我的最后一个$ _POST变量,之前的变量都消失了。作为购物车,会话数组假设包含从POST值获取的每个数据。

我检查了SESSION_ID,它在我提交表单时能够显示相同的ID,var_dump显示当前的SESSION数组工作(除了仅显示最后一项)。请帮助我将代码中的错误保存到SESSION数组中,谢谢。

这里是完整的代码,sqli_query被替换为指定item_id进行故障排除,此php也将包含在另一个在url中具有id的php中,这似乎与此事无关,但仅供参考。

<?php if(!isset($_SESSION)){session_start();}?>
<?php

//if(isset($_GET['id']) && !empty($_GET['id'])){
require 'connecttosql.php';

$result = mysqli_query($con,"select COLOUR_EN, COLOUR_ZH, SIZE FROM mydb.item join mydb.colour using(item_id) join mydb.size using(item_id) WHERE ITEM_ID='T76'")
or die("Error: " . mysqli_error($con));


while($row = mysqli_fetch_array($result)){
    $size[] = $row['SIZE'];
    $colour_zh[] = $row['COLOUR_ZH'];
    $colour_en[] = $row['COLOUR_EN'];
}

    mysqli_free_result($result);
    mysqli_close($con);


    for($x=0;$x<count($colour_zh);$x++){
    $colour[$x] = $colour_zh[$x] . "/" . $colour_en[$x];
    }


    echo "<form action='' method='POST'>";
    echo "<ul>";
    echo "<li>size: </li>";
    echo "<li><select name = 'size'>";
    foreach(array_unique($size) as $sizeli){
        echo "<option value = '" . $sizeli . "'>" . $sizeli . "</option>";
    }
    echo "</select></li>";
    echo "<li>colour: </li>";
    echo "<li><select name = 'colour'>";
    foreach(array_unique($colour) as $COLOURli){
        echo "<option value = '" . $COLOURli . "'>" . $COLOURli . "</option>";
    }
    echo "</select></li>";
    echo "<li><input type='SUBMIT' name='submit' value='ADDTOCART'></li>";
    echo "</ul>";

    $_SESSION['size'] = array();
    $_SESSION['colour'] = array();

if(isset($_POST['submit'])) {

    $_SESSION['size'][] = $_POST['size'];
    $_SESSION['colour'][] = $_POST['colour'];
//      $_SESSION['id'] = $_GET['id'];
    }

    echo SESSION_ID();

        var_dump($_SESSION['size']);
            var_dump($_SESSION['colour']);
//                      var_dump($_SESSION['id']);


/*      
}else{
include 'index.php';
die();
}
*/
?>

3 个答案:

答案 0 :(得分:2)

您可以在每次请求时重新初始化(并因此重置)数组:

$_SESSION['size'] = array();
$_SESSION['colour'] = array();

像这样添加支票:

if(!isset($_SESSION['size'])) {
    $_SESSION['size'] = array();
}
if(!isset($_SESSION['colour'])) {
    $_SESSION['colour'] = array();
}

答案 1 :(得分:0)

看起来你正在重置你的会话变量才能到达这一行......

if(isset($_POST['submit'])) {

在重置之前尝试检查这些是否存在......

$_SESSION['size'] = array();
$_SESSION['colour'] = array();

答案 2 :(得分:0)

这样做:

$_SESSION['size'] = array();
$_SESSION['colour'] = array();

你正在重置为$ _SESSION ['size']和$ _SESSION ['color']。 您可以将其替换为: if(empty($_SESSION['size'])) $_SESSION['size'] = array(); if(empty($_SESSION['colour'])) $_SESSION['colour'] = array();

或只删除这两个条目。