Как правильно использовать результат MySQL-запроса в условии в 1С-Битрикс?

Здравствуйте. <br/><br/> У меня есть HTML-форма, в которой пользователь вводит фамилию и нажимает кнопку поиска. В зависимости от результатов поиска выводится введенная фамилия или фамилии, похожие на неё. <br/><br/> Вот код обработки запроса: <br/><br/><pre><code class="php">$sql = "SELECT npp, fio FROM b_gpeqt_areas WHERE fio LIKE '%$search_title%'";  
$res = \Bitrix\Main\Application::getConnection()->query($sql);
if (isset($_POST['fio'])) {
	// Если нет результатов поиска, то выводится сообщение об отсутствии фамилии.
		echo '&lt;table&gt;';
		echo '&lt;tbody&gt;';
		while($row = $res->fetch(\Bitrix\Main\Text\Converter::getHtmlConverter())) {
			$arResult[] = $row;
				echo '&lt;tr&gt;';
					echo '&lt;td&gt;' . $row['npp'] . '&lt;/td&gt;';
					echo '&lt;td&gt;' . $row['fio'] . '&lt;/td&gt;';
				echo '&lt;/tr&gt;';
				}
			echo '&lt;/tbody&gt;';
			echo '&lt;/table&gt;';
		//}
	 // иначе вывести сообщение об отсутствии фамилии: echo "&lt;div class='alert alert-warning alert-dismissible fade show' role='alert'&gt;Фамилии: &lt;b&gt;".$search_title."&lt;/b&gt; нет в списке&lt;/div&gt;";
}</code></pre> <br/> Я не испытываю трудностей с поиском и выводом найденных результатов, однако мне нужно добавить условие (вместо закомментированной части), чтобы проверять, если фамилия не найдена, и выводить соответствующее сообщение. Как правильно реализовать это условие?
  • 26 декабря 2024 г. 18:15
Ответы на вопрос 1
В вашем коде следует добавить проверку на количество найденных записей. Если записи не найдены, вы можете выводить сообщение об отсутствии фамилии. Ниже приведен исправленный вариант вашего кода с нужным условием:

```php
$sql = "SELECT npp, fio FROM b_gpeqt_areas WHERE fio LIKE '%$search_title%'";  
$res = \Bitrix\Main\Application::getConnection()->query($sql);

if (isset($_POST['fio'])) {
    // Инициализируем массив для хранения результатов
    $arResult = [];

    // Проверяем, есть ли результаты
    while($row = $res->fetch(\Bitrix\Main\Text\Converter::getHtmlConverter())) {
        $arResult[] = $row;
    }

    echo '<table>';
    echo '<tbody>';
    
    // Если массив результатов не пуст, выводим данные
    if (!empty($arResult)) {
        foreach ($arResult as $row) {
            echo '<tr>';
                echo '<td>' . $row['npp'] . '</td>';
                echo '<td>' . $row['fio'] . '</td>';
            echo '</tr>';
        }
    } else {
        // Если массив пуст, выводим сообщение о том, что фамилия не найдена
        echo "<div class='alert alert-warning alert-dismissible fade show' role='alert'>Фамилии: <b>".$search_title."</b> нет в списке</div>";
    }

    echo '</tbody>';
    echo '</table>';
}
```

### Объяснение изменений:

1. **Инициализация массива `$arResult`:** Мы инициализируем массив перед циклом, чтобы в дальнейшем проверять, заполнен ли он данными.

2. **Цикл и проверка массива:** Сначала мы заполняем массив `$arResult` результатами запроса. После этого проверяем, есть ли данные в массиве. Если массив не пуст, значит, были найдены совпадения, и мы выводим их. Если массив пуст, выводится сообщение об отсутствии фамилии.

3. **Структура вывода:** Если нет результатов, мы выводим соответствующее сообщение в случае, если фамилия не найдена, иначе выводим таблицу с результатами.

Таким образом, вы получите желаемую логику поиска с уведомлением о том, что введенная фамилия не найдена в базе данных.
Похожие вопросы