У меня проблема с чем-то.
У меня есть этот код, чтобы добавить товар в корзину:Автоматическое увеличение ключа СЕССИИ
$product_id = isset($_GET['product_id']) ? $_GET['product_id'] : "";
$product_name = isset($_GET['product_name']) ? $_GET['product_name'] : "";
$sql = "SELECT * FROM products WHERE product_id LIKE '{$product_id}' AND product_name LIKE '{$product_name}' LIMIT 1";
$stmt = $connection->prepare($sql);
$stmt->execute();
$num = $stmt->rowCount();
if($num == 1)
{
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
extract($row);
if(!isset($_SESSION['cart']))
{
$product_id_session = 1;
}
else
{
$count = count($_SESSION['cart']);
$product_id_session = $count++;
}
$columns = array
(
'product_id_session' => $product_id_session,
'product_id' => $product_id,
'product_name' => $product_name,
'product_price' => $product_price
);
$_SESSION['cart'][$product_id_session] = $columns;
redirect_to('products.php?&message=added&product_name='. $_SESSION['cart'][$product_id_session]['product_name']);
}
}
Как вы можете видеть, если сеанс cart
создается, я задаю переменную $product_id_session
с графом сессионных массивов плюс один. В противном случае переменная $product_id_session
установлена в 1
. В корзине странице у меня есть ссылка, чтобы удалить выбранный продукт:
foreach($_SESSION['cart'] as $product)
{
echo "<button onClick=\"location.href='remove.php?product_id_session={$product['product_id_session']}'\">
Remove from cart
</button>";
}
Тогда, в remove.php файла я должен это обработать данные из строки запроса и удаление продукта из корзины:
$product_id_session = isset($_GET['product_id_session']) ? $_GET['product_id_session'] : "";
unset($_SESSION['cart'][$product_id_session]);
Проблема, с которой я столкнулся: например, я добавил два продукта в корзину. Затем я удалил первый продукт и добавил другой товар в корзину. Новый продукт вместо того, чтобы быть добавленным, просто заменит продукт, который был ранее добавлен в корзину, и $product_id_session
будет всегда того же значения. Что я делаю неправильно? Как указать идентификатор для СЕССИИ?
Не много смысла в подготовке ваше заявление, если вы собираетесь вводить введенные пользователем значения непосредственно в запросе одинаково: у вас проблема с SQL-инъекцией. – jeroen
@jeroen Я вставляю значения только в том случае, если они совпадают в базе данных. – Dyan