PHP $ _SESSION хранит только последнюю переменную

#php #session

#php #сессия

Вопрос:

Спасибо, что прочитали это, я создаю корзину покупок с помощью PHP session, когда я нажимаю кнопку отправки в форме, $ _POST смог передать значение в массив $ _SESSION[«], но когда я снова нажимаю кнопку отправки, массив $ _SESSION содержит только моипоследняя переменная $_POST и все предыдущие переменные исчезли. В качестве корзины покупок предполагается, что массив сеанса содержит все данные, полученные из значения POST.

Я проверил с помощью SESSION_ID, который смог показать тот же идентификатор при отправке формы, var_dump показывает, что текущий сеансовый массив работает (за исключением отображения только последнего элемента). Пожалуйста, помогите мне, что не так в моем коде, чтобы сохранить значение в массиве СЕАНСА, спасибо.

вот полный код, sqli_query был заменен на указание item_id для устранения неполадок, также этот php будет включен в другой php, который имеет идентификатор в url, что кажется не имеющим отношения к этому вопросу, но только для вашей информации.

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

//if(isset($_GET['id']) amp;amp; !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();
}
*/
?>
  

Комментарии:

1. Вы присваиваете сеансу два пустых массива (идентификатор и цвет). Когда форма публикуется, значения заменяются на опубликованные значения.

Ответ №1:

Вы повторно инициализируете (и, следовательно, сбрасываете) массивы при каждом запросе:

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

Добавьте проверку, подобную этой:

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

Ответ №2:

похоже, вы сбрасываете переменные сеанса, прежде чем они попадут в эту строку…

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

попробуйте проверить их наличие перед сбросом…

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

Ответ №3:

При этом:

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

вы выполняете сброс до $ _SESSION[‘size’] и $ _SESSION [‘color’] .
Вы можете заменить ее на:

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

или просто удалите эти две записи.