AVXNWNK
@AVXNWNK
Middle DevOps-engineer

(php) Как организовать выполнение двух условий с выводом одного результата?

В общем, у меня следующая проблема.
Мне нужно организовать отчет. Я сделал следующие критерии, по которым он составляется - описание (поиск по словам), владелец (сортировка), стоимость (от-до), размеры (от-до), состояние (от худшего к лучшему).
Необходимо, чтобы выводились записи из БД по этим критериям, если они выбраны. В общем то я так и сделал. При выборе одного из критериев идет вывод, как следует. Сделал это на основе одной функции, но в зависимости от условия, в котором она выполняется в ней меняется переменная, которая отвечает за сортировку, данные, которые выводить. Но возникла следующая проблема - при выборе нескольких чекбоксов результат выводится на два запроса - т.е два результата последовательно. Мне необходимо, чтобы выводился один приоритетный результат. В функции очень много массивных выводов, поэтому в условие их не закинуть. Вывод производится за счет foreach и require файл-шаблона, в котором указаны переменные записи.

Проблема двух результатов:
f06d1bc5f7414a0285c53b9fff577595.png

Код для большего понимания:
// Получение данных через POST.
if (@$_REQUEST['repHandle']) {
	function entReport($sql) {
		if(isset($_POST['entTextValue'])) {
			// Коннект к БД.
			$cn_db = new cn_db();
			// Получение результата.
			$row = $cn_db->select_list($sql);
			if(count($row)) {
				$end_result = '';
				foreach($row as $r) {
					$result         = $r['ent_text'];
					$bold           = '<span class="found">'.$word.'</span>';
					$entResult = sql_sec('
						SELECT *, UNIX_TIMESTAMP(ent_stamp) AS ent_stamp
						FROM '.TBLENT.'
						WHERE ent_text="'.mysql_real_escape_string(str_replace(strtolower($word), $bold, $result)).'"
						ORDER BY ent_stamp DESC
					') or die(mysql_error());
					for ($entBase = array(); $entRow = mysql_fetch_array($entResult); $entBase[] = $entRow);
					require_once "templates/default/rprt_top.tpl";
					foreach ($entBase as $entElement) {
						require "templates/default/rprt.tpl";
					}
					echo "</tr>";
				}
				echo $end_result;
			} else {
				echo '<li>По вашему запросу ничего не найдено</li>';
			}
		}
	}
	if(isset($_POST['entTextOn']) && $_POST['entTextOn'] == 'On') {
		$word = mysql_real_escape_string($_POST['entTextValue']);
		$sql = "SELECT * FROM entries WHERE ent_text LIKE '%".$word."%' ORDER BY ent_text LIMIT 10";
		entReport($sql);
	} else {
		print "none!";
	}
	if(isset($_POST['entCreatorOn']) && $_POST['entCreatorOn'] == 'On') {
		$sql = "SELECT * FROM entries WHERE ent_text LIKE '%".$word."%' ORDER BY ent_creator LIMIT 10";
		entReport($sql);
	} else {
		print "none!";
	}
}
  • Вопрос задан
  • 382 просмотра
Пригласить эксперта
Ответы на вопрос 1
DrunkMaster
@DrunkMaster
Вам надо конструктор запросов написать:
if(){}
elseif(){}
else{}
$query = "SELECT * FROM entries WHERE ent_text LIKE '%".$word."%' ORDER BY $sort $limit";
$sql = "$query";

В if ах объявить переменные в конце сделать запрос
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы