Это относится к моему первому сообщению, но к новой проблеме. Я не был уверен в протоколе, поэтому создал новую тему. (link to first post)Замена/обновление массивов SESSION
Я искал здесь и нашел несколько разных экземпляров моей проблемы, но, похоже, не может понять что-либо достаточно, чтобы продвигаться вперед с моей собственной программой.
Краткое описание: Корзина. У меня есть несколько элементов, перечисленных на странице с ItemID. Пользователь нажимает на элемент, он добавляется в корзину. Если пользователь дважды нажимает на один и тот же элемент, количество должно увеличиваться на единицу (в настоящее время жестко закодировано). Массив $ _SESSION ['cart'] должен начинаться пустым и быть динамическим.
Текущие проблемы: при тестировании кажется, что только один цикл проходит через массив, array_push дает ошибку, хотя параметр один является массивом, не удаляет элемент, как он должен, и не считывает количество в цикле for. Он показывает «1» в print_r($_SESSION['cart']
но «0» в $_SESSION['cart']['itemID']['quantity'];
Warning: array_push() expects parameter 1 to be array, null given in C:\xampp\htdocs\A06_DictCart\controller\updateCart.php on line 25
Вид нескольких различных вопросов, я полагаю, но фиксируя один поможет мне двигаться вперед с другими, я предположил бы, что они являются полу-родственный ,
viewCart.php
<?php
session_start();
/* Display the itemID and quantity of each item in the shopping cart.
This may be implemented by iterating though the items in the dictionary
and displaying their keys and values. */
echo ' ** array/ '.print_r($_SESSION['cart']).' ** count/ '.count($_SESSION['cart']);
echo '<br>'.$_SESSION['cart']['itemID']['quantity'];
echo '<center><h2><u>SHOPPING CART</u></h2>';
echo '<br><TABLE border=1 cellPadding=3 cellSpacing=1>
<TBODY>
<TR>
<TD>ItemID</TD>
<TD>Quantity</TD>
<TD>Remove from Cart</TD></TR>';
if (isset($_SESSION['cart'])) {
$c = count($_SESSION['cart']);
for ($x=0; $x <= $c; $x++){
echo '<tr><td>'.$_SESSION['cart']['itemID'].'</td>';
echo '<td>'.$_SESSION['cart']['itemID']['quantity'].'</td>';
echo "<td><a href='updateCart.php?action=remove&itemID=".$_SESSION['cart']['itemID']."&quantity=".$qty."> Remove from Cart </a></td></tr>";
$x++;
}
}
else {
$msg = '<i> ** cart is empty ** </i>';
echo '<tr> <td></td>';
echo '<td> </td>';
echo "<td> </td></tr>";
}
echo '</tbody></table>';
echo $msg;
echo '<br><br><a href="../controller/default.php">Back to Catalog</a>';
echo '<br><a href="../controller/updateCart.php?action=clear">Empty Cart</a></center>';
?>
updateCart.php
<?php
/* Read the values of action, itemID, and quantity from the querystring.
Items will either be added or removed from the shopping cart depending
on the values of the querystring. Once the quantity is 0 the item should
be unset from the cart. */
session_start();
$action = $_GET['action'];
$itemID = $_GET['itemID'];
$qty = $_GET['quantity'];
$msg;
if (empty($_SESSION['cart'])) $_SESSION['cart'] = array();
//array(); //('123' => 0, '456' => 0, '789' => 0, '101' => 0);
//$cart = array($_SESSION['cart']);
// ADD TO CART
if ($action == 'add') {
if (!in_array($itemID, $_SESSION['cart'])) {
$_SESSION['cart']= array('itemID' => $itemID, 'quantity' => $qty); // Insert new item
} else {
$temp = array($_SESSION['cart']);
$q += $_SESSION['cart'][$itemID]['qty'];
$temp = array('itemID' => $itemID, 'quantity' => $q);
array_push($_SESSION['cart'][$itemID], $temp);// Update existing item's quantity
}
$msg = $qty.' of item # '.$itemID.' has been added to your cart.';
}
// REMOVE FROM CART
if ($action == 'remove'){
if (($_SESSION['cart'][$itemID]['quantity'] - 1) <= 0)
unset ($_SESSION['cart'][$itemID]); // If new value is zero, unset elements
else
$_SESSION['cart'][$itemID]['quantity']--; // Else decrease quantity by one
$msg = $qty.' of item # '.$itemID.' has been removed to your cart.';
}
// EMPTY CART
if ($action == 'clear') {
unset($_SESSION['cart']); // Unset session
session_destroy();
$msg = 'Your shopping cart has been emptied.';
}
?>
<HTML>
<HEAD>
</HEAD>
<BODY>
<center>
<p> <?php echo $msg; ?><br><br>
<p><a href="../controller/default.php">Back to Catalog</a></p>
<p><a href="../controller/viewCart.php">View Cart</a></p>
</center>
</BODY>
</HTML>
Будучи, что это работа в прогресс может быть некоторые расхождения в коде синтаксисе-накрест, что Я еще не обнаружил. Некоторые из кода в заявлении «удалить из корзины» я увидел в другом посте.
Любая помощь приветствуется.
Спасибо - это был определенно некоторые из них! Теперь переменные добавляются в массив, как идентификатор, так и количество. Где-то по-моему это повлияло на мою точку зрения. Я буду продолжать играть. – mallorz
приятно :) получайте удовольствие! И загляните в этот короткий стиль кодирования, который я предложил для ваших ключей .. $ array [key] [subkey] [subsubkey]. В будущем: если вы уничтожаете сеанс только потому, что хотите удалить один массив, вы можете использовать '$ _SESSION ['cart'] = array() ;, там тоже. иначе вы могли бы удалить будущий статус - что-то случайно. Я был бы испорчен, если бы вы могли проголосовать за мой ответ. Мне нужно 50 баллов, чтобы прокомментировать другую тему: D – Nibbels
Я называю количество неправильным в цикле for? Независимо от того, что я делаю, он печатает «0», но я вижу, что это «1» в массиве. – mallorz