Я занимаюсь созданием сайта электронной коммерции, и у меня возникают проблемы с функцией setcookie ().
Это мой файл add_cart:
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/onlineStore/system/init.php';
$product_id = sanitize($_POST['product_id']);
$size = sanitize($_POST['size']);
$available = sanitize($_POST['available']);
$quantity = sanitize($_POST['quantity']);
$item = array();
$item[] = array(
'id' => $product_id,
'size' => $size,
'quantity' => $quantity,
);
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
$query = $db->query("SELECT * FROM products WHERE id = '{$product_id}'");
$product = mysqli_fetch_assoc($query);
$_SESSION['success_flash'] = $product['title'].' was added to your cart.';//CHECK TO SEE IF CART COOKIE EXISTS
if($cart_id != ''){
//adding code later
}
else{
//ADD CART TO THE DATABASE AND SET COOKIE
$items_json = json_encode($item);
$cart_expire = date("Y-m-d H:i:s", strtotime("+30 days"));
$db->query("INSERT INTO cart (itmes,expire_date) VALUES
('{$items_json}','{$cart_expire}')");
$cart_id = $db->insert_id;
setcookie(CART_COOKIE,$cart_id,CART_COOKIE_EXPIRE,'/',$domain,false);
}
?>
И еще один файл, в котором я определяю cookie как константу:
<?php
define('BASEURL',$_SERVER['DOCUMENT_ROOT'].'/onlineStore/');
define('CART_COOKIE','edHjw3345LKJ1z');
define('CART_COOKIE_EXPIRE',time() + (86400 * 30));
?>
Когда я проверяю страницу с помощью инструментов разработчика браузеров, создается впечатление, что файл cookie устанавливается после перезагрузки страницы, но значение показывает 0, путь показывает n / a, домен показывает n / a, и expire показывает n / a и данные не вставлен в базу данных. Кто-нибудь знает, что не так? Пожалуйста помоги.
У меня также есть $ cart_id, установленный в операторе if в моем файле init.php:
$cart_id = '';
//IF COOKIE EXISTS, SET COOKIE TO cart_id
if(isset($_COOKIE[CART_COOKIE])){
$cart_id = sanitize($_COOKIE[CART_COOKIE]);
}
Итак, я решил эту проблему, очистив старые куки, которые я установил ранее, и теперь все, кажется, работает. Спасибо за помощь.
Других решений пока нет …