Помощник
|
Вхождение подстроки без учета регистра |
locky-yotu
|
Сообщение
#1
|
||
|
|
||
|
|||
locky-yotu
|
Сообщение
#2
|
|
Еще вопрос, как узнать, что поиск не дал результатов и вывести сообщение в духе "Извините, по вашему запросу ничего не найдено".
Т.е. например в JS можно проверить длину строки через str.length. А как тут узнать что выборка пустая? Я пробовал так [PHP]$res = mysql_query($query) or die(mysql_error()); if (empty($res)) {echo("По вашему запросу ничего не найдено, извините.");exit;}[/PHP] Не получается. |
|
|
ottaviano |
26.6.2010, 16:40;
Ответить: ottaviano
Сообщение
#3
|
|
locky-yotun, [PHP]$result = mysql_query("SELECT login FROM users WHERE login='".$login."';");
$nbline = mysql_num_rows($result); [/PHP] если ничего не найденно - $nbline = 0; |
|
|
locky-yotu
|
Сообщение
#4
|
|
ottaviano, на одну минуту ты опоздал, я уже сделал то же самое)
[PHP]if (mysql_num_rows($res)==0) {echo("По вашему запросу ничего не найдено, извините.");exit;}[/PHP] Все равно спасибо, я может еще что тут спрошу, ибо в PHP и MySQL почти не разбираюсь) |
|
|
ottaviano |
26.6.2010, 16:44;
Ответить: ottaviano
Сообщение
#5
|
|
locky-yotun, :goodpost:
|
|
|
locky-yotu
|
Сообщение
#6
|
|
И я таки спрошу. У меня в форме поиска есть селект со станциями метро.
<select id="metroid" name="metro"> Если выбрано <option value="00">Не важно</option> <option value="01">Марьино</option> <option value="02">Братиславская</option> <option value="03">Люблино</option> <option value="04">Волжская</option> <option value="05">Печатники</option> <option value="06">Кожуховская</option> <option value="07">Дубровка</option> <option value="08">Крестьянская застава</option> <option value="09">Римская</option> <option value="10">Чкаловская</option> <option value="11">Сретенский бульвар</option> <option value="12">Трубная</option> <option value="13">Достоевская</option> <option value="14">Марьина роща</option> </select> <option value="00">Не важно</option> то станция метро не должна учитываться при выборке из БД. Я не нашел ничего умнее, чем переопределять очередь через if[php]$query = "SELECT metro, shop_name, address, description, producer, products FROM $table WHERE ((metro=$metro_var) && (UPPER(shop_name) LIKE '%".strtoupper($shop_var)."%') && (UPPER(address) LIKE '%".strtoupper($address_var)."%') && (UPPER(description) LIKE '%".strtoupper($desc_var)."%') && (UPPER(producer) LIKE '%".strtoupper($producer_var)."%') && (UPPER(products) LIKE '%".strtoupper($product_var)."%'))"; if ($metro_var == 0) { $query = "SELECT metro, shop_name, address, description, producer, products FROM $table WHERE ((UPPER(shop_name) LIKE '%".strtoupper($shop_var)."%') && (UPPER(address) LIKE '%".strtoupper($address_var)."%') && (UPPER(description) LIKE '%".strtoupper($desc_var)."%') && (UPPER(producer) LIKE '%".strtoupper($producer_var)."%') && (UPPER(products) LIKE '%".strtoupper($product_var)."%'))"; }[/php](Различие смотреть после "WHERE") Это же не рационально, да? Как правильнее сделать? |
|
|
ottaviano |
26.6.2010, 18:05;
Ответить: ottaviano
Сообщение
#7
|
|
locky-yotun, можно и так: [PHP]$query = "SELECT metro, shop_name, address, description, producer, products FROM $table WHERE (";
if ($metro_var != 0) { $query. = "(metro=$metro_var) && "; } $query. = "(UPPER(shop_name) LIKE '%".strtoupper($shop_var)."%') && (UPPER(address) LIKE '%".strtoupper($address_var)."%') && (UPPER(description) LIKE '%".strtoupper($desc_var)."%') && (UPPER(producer) LIKE '%".strtoupper($producer_var)."%') && (UPPER(products) LIKE '%".strtoupper($product_var)."%'))"; [/PHP] хотя на мой взгляд особо ничего не поменялось; не вижу почему твой вариант не рационален :) |
|
|
locky-yotu
|
Сообщение
#8
|
|
Еще вопрос((
Почему при поиске по БД "не срабатыват" запросы на кириллице. UTF-8 по-моему уже везде где надо стоит: И в meta-тегах HTML, и в "Collation" базы данных, и даже в скрипте определено [php]$link=mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение"); mysql_query ("set character_set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); mysql_select_db($dbName,$link) or die (mysql_error());[/php]Когда ввожу запрос латиницей, скрипт находит нужные поля. Кириллические запросы ничего не возвращают. Что не так? ottaviano, большое спасибо, что помогаешь) |
|
|
ottaviano |
26.6.2010, 18:25;
Ответить: ottaviano
Сообщение
#9
|
|
locky-yotun, а если дополнить твой код до такого варианта[PHP]mysql_query("Set charset utf8");
mysql_query("Set character_set_client = utf8"); mysql_query("Set character_set_connection = utf8"); mysql_query("Set character_set_results = utf8"); mysql_query("Set collation_connection = utf8_general_ci");[/PHP] |
|
|
locky-yotu
|
Сообщение
#10
|
|
Нет, не помогло. Может в чем-то еще быть проблема? Вот полный код, посмотри, может так понятней
[PHP]<?php /* Соединяемся с базой данных */ $hostname = "localhost"; // название/путь сервера, с MySQL $username = "root"; // имя пользователя (в Denwer`е по умолчанию "root") $password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым) $dbName = "shops_db"; // название базы данных /* Таблица MySQL, в которой хранятся данные */ $table = "shops"; /* Создаем соединение */ $link=mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение"); /* Выбираем базу данных. Если произойдет ошибка - вывести ее */ /* mysql_query ("set character_set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); */ mysql_query("Set charset utf8"); mysql_query("Set character_set_client='utf8'"); mysql_query("Set character_set_connection='utf8'"); mysql_query("Set character_set_results='utf8'"); mysql_query("Set collation_connection='utf8_general_ci'"); mysql_select_db($dbName,$link) or die (mysql_error()); $metro_var = $_POST['metro']; $shop_var = $_POST['shop']; $address_var = $_POST['address']; $desc_var = $_POST['keywords']; $producer_var = $_POST['producer']; $product_var = $_POST['product']; /* Составляем запрос для извлечения данных из полей "name", "email", "theme", "message", "data" таблицы "test_table" */ /* $query = "SELECT metro, shop_name, address, description, producer, products FROM $table WHERE ((metro=$metro_var) && (UPPER(shop_name) LIKE '%".strtoupper($shop_var)."%') && (UPPER(address) LIKE '%".strtoupper($address_var)."%') && (UPPER(description) LIKE '%".strtoupper($desc_var)."%') && (UPPER(producer) LIKE '%".strtoupper($producer_var)."%') && (UPPER(products) LIKE '%".strtoupper($product_var)."%'))"; if ($metro_var == 0) {$query = "SELECT metro, shop_name, address, description, producer, products FROM $table WHERE ((UPPER(shop_name) LIKE '%".strtoupper($shop_var)."%') && (UPPER(address) LIKE '%".strtoupper($address_var)."%') && (UPPER(description) LIKE '%".strtoupper($desc_var)."%') && (UPPER(producer) LIKE '%".strtoupper($producer_var)."%') && (UPPER(products) LIKE '%".strtoupper($product_var)."%'))";} */ $query = "SELECT metro, shop_name, address, description, producer, products FROM $table WHERE ("; $query1 = "(metro=$metro_var) && "; if ($metro_var != 0) { $query .= $query1; } $query .= "(UPPER(shop_name) LIKE '%".strtoupper($shop_var)."%') && (UPPER(address) LIKE '%".strtoupper($address_var)."%') && (UPPER(description) LIKE '%".strtoupper($desc_var)."%') && (UPPER(producer) LIKE '%".strtoupper($producer_var)."%') && (UPPER(products) LIKE '%".strtoupper($product_var)."%'))"; /* Выполняем запрос. Если произойдет ошибка - вывести ее. */ $res = mysql_query($query) or die(mysql_error()); //echo (mysql_num_rows($res)); exit; if (mysql_num_rows($res)==0) {echo("Извините, но по вашему запросу ничего не найдено. <a href=\"/\">Попробуйте</a> еще раз");exit;} /* Выводим данные из таблицы */ echo (" <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\" lang=\"ru\"> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <title>Результат поиска</title> </head> <body> <h3>Результаты поиска:</h3> <table border=\"1\" cellpadding=\"0\" cellspacing=\"0\"> <tr style=\"border: solid 1px #000\"> <td align=\"center\"><b>Метро</b></td> <td align=\"center\"><b>Магазин</b></td> <td align=\"center\"><b>Адрес</b></td> <td align=\"center\"><b>Описание</b></td> <td align=\"center\"><b>Производитель</b></td> <td><b>Продукт</b></td> </tr> "); /* Цикл вывода данных из базы конкретных полей */ while ($row = mysql_fetch_array($res)) { echo "<tr>\n"; echo "<td>".$row['metro']."</td>\n"; echo "<td>".$row['shop_name']."</td>\n"; echo "<td>".$row['address']."</td>\n"; echo "<td>".$row['description']."</td>\n"; echo "<td>".$row['producer']."</td>\n"; echo "<td>".$row['products']."</td>\n</tr>\n"; } echo ("</table>\n"); /* Закрываем соединение */ mysql_close(); /* Выводим ссылку возврата */ echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"/\">Вернуться назад</a></div>"); ?> [/PHP] |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Настройка яндекс директ рекламы БЕЗ РАСХОДОВ БЮДЖЕТА Количество продаж будет ОГРАНИЧЕННО! |
22 | ITstaf | 4409 | Вчера, 21:00 автор: 100ftd |
|
PROXY-STORE.COM — ipV4 прокси от 42р В МЕСЯЦ с ротацией и без! Лучшая цена на рынке. 200+ стран | 21 | proxystore | 5345 | 19.4.2024, 12:02 автор: proxystore |
|
Большие базы Semrush кейвордов по разным тематикам! Много кейвордов с трафиком и без конкуренции! Volume, KD, CPC | 22 | Krok | 6763 | 12.4.2024, 5:17 автор: Krok |
|
Скрипты и программы на заказ любой сложности. Без предоплаты. Быстро, качественно и недорого! | 5 | c4p1t4l15t | 2531 | 6.4.2024, 12:51 автор: c4p1t4l15t |
|
Обменяю Юмани на гривны без комиссии | 3 | freeax | 1007 | 2.4.2024, 1:46 автор: Llirik |
Текстовая версия | Сейчас: 24.4.2024, 13:03 |