Получая эту ошибку, не знаю, что ее вызывает. проверил другие ответы на эту ошибку, но не смог заставить ее работать. Любая помощь приветствуется
<?php
session_start();
include ('includes/header.html');
if ( isset($_GET['id'])) $id = $_GET['id'];
require ('../connect_db.php');
$q = "SELECT *
FROM books_for_sale
WHERE book_id = $id";
$r = mysqli_query($dbc, $q);
if (mysqli_num_rows($r) == 1 )
{$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
if (isset($_SESSION['cart'][$id]))
{
$_SESSION['cart'][$id]['quantity']++;
echo '<p>Another' .$row["book_name"]. 'has been added</p>';
}
else
{
$_SESSION['cart'][$id]=
array ( 'quantity' => 1, 'price' => $row['item_price']);
echo '<p>1 '.$row["item_name"]. 'has been added to your order</p>';
}
}
mysqli_close($dbc);
include('includes/footer.html');
?>






Причина ошибки в том, что '$id' не заключен в одинарные кавычки.
Кроме того, вы берете значения из отправки формы/получения и помещаете их непосредственно в свой запрос mysql без какой-либо серверной проверки правильности данных. Это очень небезопасно, поскольку позволяет злоумышленнику внедрить код в запрос mysql.
Что вам нужно сделать, так это использовать «подготовленные операторы», чтобы вы могли предварительно определить на стороне сервера, какие типы значений могут использоваться в запросе mysql. Таким образом, если будет отправлено неверное значение формы, php сможет обнаружить его и вернуть ошибку.
Я думаю, что ваш запрос выбора не работает.
Я рекомендую экранировать ваш суперглобальный ($_GET['id']) filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS);. Также у вас есть значение по умолчанию для $id? Это может быть причиной того, что он ломается.
Ваш запрос может быть
$q = "SELECT * FROM books_for_sale ".(isset($id) ? "WHERE book_id = ".(int)$id : "");
Вы получите эту ошибку, если
if ( isset($_GET['id']))имеет значение false, а$idне установлен. Вы, вероятно, захотите обернуть все выполнение запроса вокруг этого условия.