<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Форум сайта MyRusakov.ru

Поиск по сайту
09.04.2013 16:42:08 Поиск по сайту Сообщение #1
nonemox

nonemox

Новичок

Новичок

Дата регистрации:
28.03.2013 09:24:56

Сообщений: 6

Здравствуйте, Михаил.
Возникла проблема. Есть код и есть один input, код работает результаты выдает, мне его необходимо немного расширить и сделать возможность поиска в диапазоне.
Код формы: <form method="post">
<input type="search" name="query" placeholder="Поиск" /><input type="search" name="query1" placeholder="от" /><input type="search" name="query2" placeholder="до" />
<a href="#" class="button" onClick="document.getElementById('form_1').submit()">Поиск</a>
</form>

Сам обработчик: /////////////// Определяем используемые функции //////////////////

/* Открываем соединение с базой данных*/
function connectDB (){
// Определяем константы для соединения с базой данных //Пытаемся соединится с базой данных $dbconn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Ошибка соединения с базой данных! " . mysql_error());
//и выбрать таблицу
mysql_select_db(DB_NAME);
// Устанавливаем кодировку
mysql_query('SET NAMES utf8');
//Возвращаем дескриптор соединения
return $dbconn;
}

/*Закрываем соединение с базой данных*/
function closeDB($dbconn){
mysql_close($dbconn);
}

/*Обработка поискового запроса*/
function search ($query) {
$text = '';

// Проводим фильтрацию данных
$query = trim($query); // Обрезаем пробелы и спецсимволы
$query = strip_tags($query); // Удаляем HTML и PHP теги
$query = mysql_real_escape_string($query); // Экранируем специальные символы


//Поисковый запрос не пустой?
if (!empty($query)){
if (strlen($query) < 4) {
$text = '<p>короткий поисковый запрос.</p>';
}elseif (strlen($query) > 128) {
$text = '<p>длинный поисковый запрос.</p>';
} else {
//Формируем строку поискового запроса
$sql = "SELECT `id`, `title`, `opisanie_1`,`opisanie_2`,`bedroom`,`bathroom`, `area`, `price`
FROM `sale` WHERE `opisanie_1` LIKE '%$query%' OR `opisanie_2` LIKE '%$query%' OR `bedroom` LIKE '%$query%'
OR `bathroom` LIKE '%$query%' OR `area` LIKE '%$query%' OR `price` LIKE '%$query%'
OR `title` LIKE '%$query%'";
// и выполняем его
$result = mysql_query($sql);
//Определим количество найденных совпадений
$num = mysql_num_rows($result);
//Если число совпадений (строк результата запроса) больше 0
if ( $num > 0) {
//Получаем ассоциативный массив
$row = mysql_fetch_assoc($result);
//и начинаем формировать строку поисковой выдачи
$text .= '<p>По вашему запросу <strong>'.$query.'</strong>';
$text .= ' найдено '.$num.' совпадений</p>' ;

do {
//Продолжаем формировать строку поисковой выдачи
$text .= '<p><a href="real-estate.php?id='.$row['id'].'">';
$text .= $row['title'].'</a></p>';
$text .= '<p>'.$row['tinyDescription'].'</p>';
// Делаем это пока у нас есть результаты
} while ($row = mysql_fetch_assoc($result));
} else {
// Найти совпадение не удалось
$text = '<p>По вашему запросу ничего не найдено.</p>';
}
}
}else {
$text = '<p>Задан пустой поисковый запрос.</p>';
}
//Возвращаем сформированную строку поисковой выдачи
return $text;
}
///////////// Сам скрипт обработчик ///////////////
if (isset ($_POST['query']) && !empty($_POST['query'])){
// Открываем соединение с базой данных
$connect = connectDB();
$search_result = search ($_POST['query']);
echo $search_result;
// Закрываем соединение с базой данных
closeDB ($connect);
}


Попробовал добавить поиск в диапазоне от и до
код: /*Закрываем соединение с базой данных*/
function closeDB($dbconn){
mysql_close($dbconn);
}
$_POST['button']{
$query1=$_POST['query1'];
$query2=$_POST['query2'];
/*Обработка поискового запроса*/
function search ('$query' && '$query1' && '$query2') {
$text = '';
// Проводим фильтрацию данных
$query = trim($query);
$query2 = trim($query2);
$query1 = trim($query1); // Обрезаем пробелы и спецсимволы
$query = strip_tags($query); // Удаляем HTML и PHP теги
$query2 = strip_tags($query2);
$query1 = strip_tags($query1);
$query = mysql_real_escape_string($query); // Экранируем специальные символы
$query1 = mysql_real_escape_string($query1);
$query2 = mysql_real_escape_string($query2);
//Поисковый запрос не пустой?
if (!empty($query) && !empty($query1) && !empty($query2) ){
if (strlen($query) < 4) {
$text = '<p>короткий поисковый запрос.</p>';
}elseif (strlen($query) > 128) {
$text = '<p>длинный поисковый запрос.</p>';
} else {
//Формируем строку поискового запроса
$sql = "SELECT `id`, `title`, `opisanie_1`,`opisanie_2`,`bedroom`,`bathroom`, `area`, `price`
FROM `sale` WHERE `opisanie_1` LIKE '%$query%' OR `opisanie_2` LIKE '%$query%' OR `bedroom` LIKE '%$query%'
OR `bathroom` LIKE '%$query%' OR `area` LIKE '%$query%' OR `title` LIKE '%$query%' OR
(`price`>='$query1' and `price`<='$query2')";
// и выполняем его
$result = mysql_query($sql)or die(mysql_error());
//Определим колличество найденных совпадений
$num = mysql_num_rows($result);
//Если число совпадений (строк результата запроса) больше 0
if ( $num > 0) {
//Получаем ассоциативный массив
$row = mysql_fetch_assoc($result);
//и начинаем формировать строку поисковой выдачи
$text .= '<p>По вашему запросу <strong>'.$query.'.'.$query1.'.'.$query2.'</strong>';
$text .= ' найдено '.$num.' совпадений</p>' ;
do {
//Продолжаем формировать строку поисковой выдачи
$text .= '<p><a href="real-estate.php?id='.$row['id'].'">';
$text .= $row['title'].'</a></p>';
$text .= '<p>'.$row['opisanie_1'].'</p>';
// Делаем это пока у нас есть результаты
} while ($row = mysql_fetch_assoc($result));
} else {
// Найти совпадение не удалось
$text = '<p>По вашему запросу ничего не найдено.</p>';
}
}
}else {
$text = '<p>Задан пустой поисковый запрос.</p>';
}
//Возвращаем сформированную строку поисковой выдачи
return $text;
}
///////////// Сам скрипт обработчик ///////////////
if (isset ($_POST['query']) && !empty($_POST['query']) && isset ($_POST['query1']) && !empty($_POST['query1']) &&isset ($_POST['query2']) && !empty($_POST['query2'])){
// Открываем соединение с базой данных
$connect = connectDB();
$search_result = search ($_POST['query'] or $_POST['query1'] or $_POST['query2']);
echo $search_result;
}
}

Не работает и потерял я ';'. Как можно сделать поиск какое то слово и цена в диапазоне указанном
Профиль
09.04.2013 17:16:30 Поиск по сайту Сообщение #2
nonemox

nonemox

Новичок

Новичок

Дата регистрации:
28.03.2013 09:24:56

Сообщений: 6

Нашел еще, что можно использовать $_REQUEST который объединяет все переменные на форме в одну переменную.
Вот попробовал так, не работает поиск по диапазону:
$query=$_REQUEST;
/*Обработка поискового запроса*/
function search ($query){
$text = '';
// Проводим фильтрацию данных
$query = trim($query); // Обрезаем пробелы и спецсимволы
$query = strip_tags($query); // Удаляем HTML и PHP теги
$query = mysql_real_escape_string($query); // Экранируем специальные символы
//Поисковый запрос не пустой?
if (!empty($query)){
if (strlen($query) < 4) {
$text = '<p>короткий поисковый запрос.</p>';
}elseif (strlen($query) > 128) {
$text = '<p>длинный поисковый запрос.</p>';
} else {
//Формируем строку поискового запроса
$sql = "SELECT `id`, `title`, `opisanie_1`,`opisanie_2`,`bedroom`,`bathroom`, `area`, `price`
FROM `sale` WHERE `opisanie_1` LIKE '%$query%' OR `opisanie_2` LIKE '%$query%' OR `bedroom` LIKE '%$query%'
OR `bathroom` LIKE '%$query%' OR `area` LIKE '%$query%' OR `title` LIKE '%$query%' OR
(`price`>='$query1' and `price`<='$query2')";
// и выполняем его
$result = mysql_query($sql)or die(mysql_error());
//Определим колличество найденных совпадений
$num = mysql_num_rows($result);
//Если число совпадений (строк результата запроса) больше 0
if ( $num > 0) {
//Получаем ассоциативный массив
$row = mysql_fetch_assoc($result);
//и начинаем формировать строку поисковой выдачи
$text .= '<p>По вашему запросу <strong>'.$query.'.'.$query1.'.'.$query2.'</strong>';
$text .= ' найдено '.$num.' совпадений</p>' ;
do {
//Продолжаем формировать строку поисковой выдачи
$text .= '<p><a href="real-estate.php?id='.$row['id'].'">';
$text .= $row['title'].'</a></p>';
$text .= '<p>'.$row['opisanie_1'].'</p>';
// Делаем это пока у нас есть результаты
} while ($row = mysql_fetch_assoc($result));
} else {
// Найти совпадение не удалось
$text = '<p>По вашему запросу ничего не найдено.</p>';
}
}
}else {
$text = '<p>Задан пустой поисковый запрос.</p>';
}
//Возвращаем сформированную строку поисковой выдачи
return $text;
}
///////////// Сам скрипт обработчик ///////////////
if (isset ($_POST['query']) && !empty($_POST['query'])){
// Открываем соединение с базой данных
$connect = connectDB();
$search_result = search ($_POST['query']);
echo $search_result;
}
Профиль
09.04.2013 21:07:21 Поиск по сайту Сообщение #3
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Используйте вот этот метод http://myrusakov.ru/php-finderror.html, выводите запросы, а затем эти запросы в "sql" вставляйте в phpmyadmin. Он выдаст ошибки в запросе. А уже дальше анализируйте, откуда они идут и исправляйте.
Профиль
09.04.2013 22:25:50 Поиск по сайту Сообщение #4
nonemox

nonemox

Новичок

Новичок

Дата регистрации:
28.03.2013 09:24:56

Сообщений: 6

Проверил переменную $_REQUEST
вышел массив с переданными переменными и значениями, после начинаю проверять запрос, ничего нет в запросе.
Профиль
09.04.2013 22:36:12 Поиск по сайту Сообщение #5
nonemox

nonemox

Новичок

Новичок

Дата регистрации:
28.03.2013 09:24:56

Сообщений: 6

Проверил запрос в самом phpmyadmin
запрос сделал след вида select * from sale where price>=50 and price<=60000; Под этот диапазон попадает одна запись, но пишется MySQL вернула пустой результат. Какие есть соображения по этому поводу?
Профиль
10.04.2013 11:12:02 Поиск по сайту Сообщение #6
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Все названия полей и таблицу сделайте в обратных кавычках `, а все значения полей в одинарных кавычках '.
Профиль
10.04.2013 21:47:29 Поиск по сайту Сообщение #7
nonemox

nonemox

Новичок

Новичок

Дата регистрации:
28.03.2013 09:24:56

Сообщений: 6

Не выводилось из-за того, что я не учел знак $ в записях, и поэтому было пусто
Профиль