Qairat
@Qairat
frontend developer, angular 2+

Как добавить в поиск дату?

Всем Привет!
Сделан поисковик на сайте. По словам ищет и находит.
Теперь мне надо добавить календарь. Чтобы и по дату находил. Но не смог.
Вот код где находит по словам:
Это index.php
<form name="search" method="get" action="/search">
                            <input type="date" name="calendar" min="2016-09-29">
                            <input type="search" name="query">
                            <input type="submit" value="Поиск"></input>
</form>

А это search.php где срабатывает при нажатии submit
<?
	$where = array(
		1 => array('title' => '',
			'sql' => "SELECT * FROM s_element_all_articles WHERE `content`<>'' AND (INSTR(`date`, '#SEARCH#') OR INSTR(`content`, '#SEARCH#')) "),
	);

	$search = isset($_GET['query']) ? $fn->handle($_GET['query']) : '';
	$calendar = isset($_GET['calendar']) ? $fn->handle($_GET['calendar']): '';

	$out = array();
	if($search != '' || $calendar != '') {
		if(empty($_REQUEST['where'])) $_REQUEST['where'] = array_keys($where);
		$result = array();
		if(is_array($_REQUEST['where'])){
			$index = 0;
            $countt = 0;
			$count = array();
			$parsed = array();
			$start = 0;

			$total_count = 0;
			foreach($_REQUEST['where'] as $w) {
				if(!isset($where[$w]))
					continue;

				$where[$w]['sql'] = str_replace('#SEARCH#', $search, $where[$w]['sql']);

                if(!preg_match("/^SELECT(.+?)FROM\s+([\w`]+)(\s+WHERE(.+))?$/i", $where[$w]['sql'], $ok))
					continue;

				$parsed[$w] = array('what' => $ok[1], 'table' => $ok[2], 'where' => $ok[3] ? $ok[3] : '');
				$total = $mysqli->query("SELECT COUNT(*) AS `total` FROM ".$parsed[$w]['table']." ".$parsed[$w]['where'])->fetch_assoc();
				$total = $total['total'];
				$total_count += $count[$w] = $total;
				$r = $mysqli->query($where[$w]['sql']);

				if($start >= 0 && $r->num_rows) {
					while($e = $r->fetch_object()) {
						switch ($w){
							case 1:
								$result[] = array('title' => $where[$w]['title'], 'link' => '<a href="article/official/'.$e->id.'">'.$e->title.'</a>', 'type' => $w);
								break;
							default:
								break;
						}
						$index = count($result);
					}
					$start = 0;
				} else {
					$start -= $count[$w];
				}
			}
		}

		if($result) {
			$out[] = '

			<div class="text-naideno">
			<h3>Найдено '.$total_count.' '.$fn->get_end($total_count, array('совпадение', 'совпадения', 'совпадений')).' по запросу <span class="search-color">	'.$calendar.' '.$search.' </span></h3>
			</div>
';
			$title = NULL;
			foreach($result as $r) {
				if($r['title'] != $title) {
					$countt = 0;
					$title = $r['title'];
//					$out[] = '<h3>Раздел "'.$title.'"</h3>';
				}
				$out[] = '<div class="search-result">';
				$out[] = '<p><span>'.(++$countt) .'.</span>'.$r['link'].'</p>';
				$out[] = '<p>'.$r['title'].'</p>';
				$out[] = '</div>';
			}
		} else {
			$out[] = 'По вашему запросу ничего не найдено..';
		}
	} else {
		$out[] = 'Введите параметры запроса..';
	}

	echo join("\r\n", $out);

?>

И там для функции fn.php:
function handle($s){
		global $mysqli;
		$s = strip_tags($s);
		$s = htmlspecialchars($s);
		$s = $mysqli->real_escape_string($s);
		return trim($s);}

Куда что добавить? Спасибо
  • Вопрос задан
  • 171 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Skit25
на всё воля Бога
Это очень злой php код!

Походу
$r = $mysqli->query($where[$w]['sql']);
При следующие итерации значение затрется.
Чтобы это проверить, поменяйте поля формы:
<input type="search" name="query">
<input type="date" name="calendar" min="2016-09-29">

Тогда дата будет вторая в массиве.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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