Я делаю простую корзину. Я не уверен, как описать мою проблему. У меня есть две страницы. 1-й имеет флажки рядом с каждым элементом. 2-й создайте пустой массив в SESSION, затем в цикле поместите все отмеченные элементы в массив сеанса и распечатайте количество элементов. 2-я страница также имеет форму для ввода сведений о пользователе, которая проверяется с использованием PHP, а не JS. Проблема заключается в том, что при отправке этой формы 2-я страница перезагружается, и массив сессии становится пустым как $ _SESSION [‘cart’] = array (); срабатывает. отправка 1-й страницы дает правильный результат на 2-й странице, но эти результаты становятся 0 при отправке формы на 2-й странице. на обеих страницах есть: session_start (); На вершине.
Вот ключевые части кода для 1-й страницы:
<form name="form" method="POST" id="form" action="cart.php">
<input type=checkbox name=cart[item1]>
<input type=checkbox name=cart[item2]>…etc
2-я страница (cart.php):
include "Validation.php";
$_SESSION['cart']=array();
if(isset($_POST['cart'])){
foreach($_POST['cart'] as $checkboxID => $checkboxVal){
array_push($_SESSION['cart'], $checkboxID);
}
}
echo "<p>number of items in the cart = ".sizeof($_SESSION['cart'])."</p>";<form name="form" method="POST" id="form" action="">
<input type="text" name="userEmail" id="userEmail" placeholder="e.g. [email protected]"/>
<input type="submit" class="buttun" name="buy" value="buy"/>
3-я страница (Validation.php):
if (isset($_POST["buy"])){
//some validation code
}
Есть ли способ решить эту проблему? Я пытался создать пустой массив внутри оператора if, но получил плохие результаты. Я думаю, что использование проверки JS решит проблему, но предпочитаю проверку php.
Спасибо
В вашем коде немало проблем.
надеюсь, вы используете session_start();
в начале вы потеряете данные сессий, когда ваша страница перезагрузится / перейдет на следующую страницу.
во второй части вам не нужно объявлять переменную.
if(isset($_POST['cart']) && !isset($_SESSION['cart']))
foreach($_POST['cart'] as $checkboxID => $checkboxVal)$_SESSION['cart'][$checkboxID]=$checkboxVal;
когда вы хотите увидеть, была ли использована форма, используйте скрытый ввод
<input type='hidden' name='form1' value='1'>
потом вы можете использовать
if(isset($_POST['form1']))...
также, sizeof($_SESSION['cart'])
должно быть посчитано ($ _ SESSION [‘cart’])
Других решений пока нет …