JSON из mysql не отображается должным образом через PHP

Это моя база данных MySQL в Интернете

Это моя база данных в сети

Это файл PHP для доступа к базе данных и получения файла JSON. Сначала я выбираю все ячейки "категории" в таблице, затем перебираю категорию, а затем перебираю другие столбцы категории и назначаю массив of $ data2, после этого назначьте $ data2 и category для br массива $ data, который является json, который я хочу отобразить.

<?php 
header("Access-Control-Allow-Origin: *");
$user = "u348833238_rest"; /* User */
$password = "a!23286029"; /* Password */
$dbname = "u348833238_rest"; /* Database name */
$host = "localhost";

$con = mysqli_connect($host, $user, $password, $dbname);
// Check connection
if (!$con) {
 die("Connection failed: " . mysqli_connect_error());
} 

// $sel = mysqli_query($con,"select * from restaurant");

// $data = array();

// while ($row = mysqli_fetch_array($sel)) {
//  $data[] = array("dishes" => ["name"=>$row['food'], "price"=>$row['price']] , "category"=>$row['category']);
// }
// echo json_encode($data);


$sel = mysqli_query($con,"select distinct category from restaurant");

$data = array();

while ($row = mysqli_fetch_array($sel)) {

    $c = $row['category'];

    $sel2 = mysqli_query($con,"select * from restaurant where category = $c ");

    $data2 = array();

    while ($row2 = mysqli_fetch_array($sel2)){
        $data2[] = array("name"=>$row2['food'], "price"=>$row2['price']);
    }

    // echo $data2;

    $data[] = array("category"=>$row['category'], "dishes"=>$data2);
}

// echo $data;
echo json_encode($data);

?>

Как JSON не отображается должным образом, так как массив свойств "блюда" пуст, как показано ниже:

массив пуст

Советую прочитать про предотвращение SQL-инъекции

Raymond Nijland 05.12.2018 13:11

Не выполняйте повторяющиеся запросы. Используйте ПРИСОЕДИНЕНИЕ.

mickmackusa 05.12.2018 13:11

@RaymondNijland Как вы думаете, где именно в опубликованном запросе находится уязвимость?

mickmackusa 05.12.2018 13:13

Я этого не вижу. Более конкретно. Что заставляет вас думать, что $c представляет собой угрозу? Вас беспокоит потенциальная инъекция на втором этапе, когда пользовательские данные предварительно вставляются в таблицу restaurant? Это слишком далеко заходит на территорию шляп из фольги, чтобы делать предположения. У нас нет оснований полагать, что таблица повреждена на основании опубликованных данных.

mickmackusa 05.12.2018 13:14

использование переменной PHP непосредственно в запросе @mickmackusa при использовании базы данных всегда используйте подготовленные операторы без исключений, даже если вы думаете, что ввод / данные «безопасны». Действительно, сохраненные SQL-инъекции могут быть возможны, если пользователь имеет доступ к таблице restaurant.

Raymond Nijland 05.12.2018 13:15

Возможный дубликат Когда использовать одинарные кавычки, двойные кавычки и обратные тики в MySQL ... и многих, многих других.

mickmackusa 05.12.2018 13:19

Также закрывается с помощью: Запрос MySQL в цикле против использования соединения SQL

mickmackusa 05.12.2018 13:21
Стоит ли изучать 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 и хотите разрабатывать...
1
7
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы порекомендовал включить ошибки, чтобы вы могли понять, в чем проблема.

Предположительно это здесь:

select * from restaurant where category = $c

Должно быть:

select * from restaurant where category = '$c'

Интересно, почему вы даже не упомянули в своем ответе SQL-инъекцию, что возможно ...

Raymond Nijland 05.12.2018 13:10

@RaymondNijland Да, есть серьезные проблемы, но я предполагаю, что это несерьезный проект. Они также разместили в своем примере то, что выглядит как настоящие данные MySQL, так что здесь мало что можно сделать.

Zoe Edwards 05.12.2018 13:14

«Так что все, что можно сделать». Действительно, проблема Интернета в том, что плохие вещи / руководства / ответы сохраняются и могут быть найдены десятилетиями. Это довольно популярный веб-сайт для (начинающих) программистов, по крайней мере, предупреждающих (начинающих) программистов об опасном небезопасном коде, так делают все больше людей ..

Raymond Nijland 05.12.2018 13:22

@ThomasEdwards Этот малоизвестный вопрос о фруктах - дубликат.

mickmackusa 05.12.2018 13:23

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