Проблемы с mysqli_fetch_array() ожидают, что параметр 1 будет mysqli_result

Получая эту ошибку, не знаю, что ее вызывает. проверил другие ответы на эту ошибку, но не смог заставить ее работать. Любая помощь приветствуется

<?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');
?>

Вы получите эту ошибку, если if ( isset($_GET['id'])) имеет значение false, а $id не установлен. Вы, вероятно, захотите обернуть все выполнение запроса вокруг этого условия.

Qirel 11.02.2019 12:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
36
2

Ответы 2

Причина ошибки в том, что '$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 : "");

Другие вопросы по теме