#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();
или просто удалите эти две записи.