Не выполняется скрипт, если запрос пустой

87
20 ноября 2021, 21:20

Есть скрипт php, который выбирает данные из БД и с помощью аякса подгружает их на страницу:

if ($_POST['refresh'] == "true") {
    $query1 = $mysqli->query("SELECT * FROM `trade_history` WHERE ID_prod='$sesion_id' ORDER BY `TimeCloseOrder` DESC");
    $query2 = $mysqli->query("SELECT * FROM `ordersbuy` WHERE id='$sesion_id' ORDER BY `ordtime` DESC");
    while ($row1 = $query1->fetch_assoc()) {
        $History_User['OrderID'][]      = $row1['OrderID'];
        $History_User['Price'][]   = $row1['Price'];
        $History_User['Amount'][]  = $row1['Amount'];
        $History_User['Total'][]   = $row1['Total'];
        $History_User['Type'][]    = $row1['Type'];
        $History_User['Val'][]     = $row1['Val'];
        $History_User['Prod'][]    = $row1['Prod'];
        $History_User['TimeCloseOrder'][]      = $row1['TimeCloseOrder'];
    }
    while ($row2 = $query2->fetch_assoc()) {
        $Active_Orders_User['OrderID'][]      = $row2['OrderID'];
        $Active_Orders_User['Price'][]   = $row2['price'];
        $Active_Orders_User['Amount'][]  = $row2['amount'];
        $Active_Orders_User['Total'][]   = $row2['total'];
        $Active_Orders_User['Type'][]    = $row2['Type'];
        $Active_Orders_User['Val'][]     = $row2['Val'];
        $Active_Orders_User['Prod'][]    = $row2['Prod'];
        $Active_Orders_User['TimeCreateOrders'][]      = $row2['ordtime'];
    }
    $out = array(
        'History_User' => $History_User,
        'Active_Orders_User' => $Active_Orders_User
    );
    // Устанавливаем заголовот ответа в формате json
     header('Content-Type: text/json; charset=utf-8');
    // Кодируем данные в формат json и отправляем
    echo json_encode($out);

Но проблема в том, что если одна из таблиц(trade_history/ordersbuy) пустая, то данные вовсе не подгружаются, ошибка такая: Undefined variable: History_User in My_Orders.php on line 38 и такая Cannot modify header information - headers already sent by (output started at My_Orders.php:38) in My_Orders.php on line 42 Если же обе таблицы имеют хотя бы по 1 записи, то данные загружаются без проблем, как мне в таком случае игнорировать пустой запрос и дальше выполнять скрипт?

Answer 1

Достаточно после $query2 сделать следующее:

$History_User = [];
$Active_Orders_User= [];

Вы пытаетесь вызвать данные переменные хотя не определили их в системе. Либо второй вариант:

$out = array(
    'History_User' => $History_User ?? [],
    'Active_Orders_User' => $Active_Orders_User ?? []
);
Answer 2

А что доолжно произойти, если одна из таблиц пустая?

Проверяй

if (count($History_User)==0) // пусто

Answer 3

в начале скрипта инициализируйте переменные:

$History_User=$Active_Orders_User=[];

иначе php выводит Вам ошибку, а заголовки, как известно, необходимо посылать до любого вывода.

READ ALSO
Найти последние слова в тексте php

Найти последние слова в тексте php

Доброго времени сутокПодскажите - как найти в тексте с помощью PHP последние 4 слова? Текст может быть случайным, по этому я не могу просто написать...

179
strpos проверить свойство объекта на наличие в нем текста

strpos проверить свойство объекта на наличие в нем текста

Я пытаюсь проверить определенное свойство объекта на наличие в нем текста nobr В этом свойстве лежит html-код -теги и какой-либо текст

97
Не выводятся русские символы из базы MySql в Telegram bot

Не выводятся русские символы из базы MySql в Telegram bot

Пишу бота для ТелеграмСерверная часть на PHP + MySql

123