<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

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

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

Подписавшись по 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

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