X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

4 страниц V   1 2 3 4 >
Открыть тему
Тема закрыта
> Вхождение подстроки без учета регистра
locky-yotu
locky-yotu
Topic Starter сообщение 26.6.2010, 15:55; Ответить: locky-yotu
Сообщение #1


Здравствуйте
Пишу поиск по БД, вот фрагмент кода
[php]$query = "SELECT metro, shop_name, address, description, producer, products FROM $table WHERE ((metro=$metro_var) && (shop_name LIKE '%".($shop_var)."%'))";[/php]Вот в этом участке
[php](shop_name LIKE '%".($shop_var)."%')[/php] производится проверка на вхождение введенной строки в строку из БД. Подскажите, как сделать, чтобы проверка производилась без учета регистра символов?

Всё, разобрался.
Если что, вот решение
[php](UPPER(shop_name) LIKE '%".strtoupper($shop_var)."%')[/php]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 26.6.2010, 16:17; Ответить: locky-yotu
Сообщение #2


Еще вопрос, как узнать, что поиск не дал результатов и вывести сообщение в духе "Извините, по вашему запросу ничего не найдено".
Т.е. например в JS можно проверить длину строки через str.length. А как тут узнать что выборка пустая?

Я пробовал так
[PHP]$res = mysql_query($query) or die(mysql_error());

if (empty($res)) {echo("По вашему запросу ничего не найдено, извините.");exit;}[/PHP]
Не получается.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ottaviano
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
locky-yotu
Topic Starter сообщение 26.6.2010, 16:42; Ответить: locky-yotu
Сообщение #4


ottaviano, на одну минуту ты опоздал, я уже сделал то же самое)
[PHP]if (mysql_num_rows($res)==0) {echo("По вашему запросу ничего не найдено, извините.");exit;}[/PHP]
Все равно спасибо, я может еще что тут спрошу, ибо в PHP и MySQL почти не разбираюсь)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ottaviano
ottaviano
сообщение 26.6.2010, 16:44; Ответить: ottaviano
Сообщение #5


locky-yotun, :goodpost:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
locky-yotu
locky-yotu
Topic Starter сообщение 26.6.2010, 17:05; Ответить: 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
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
locky-yotu
Topic Starter сообщение 26.6.2010, 18:10; Ответить: 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
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
locky-yotu
Topic Starter сообщение 26.6.2010, 18:33; Ответить: 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]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
4 страниц V   1 2 3 4 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыНастройка яндекс директ рекламы БЕЗ РАСХОДОВ БЮДЖЕТА
Количество продаж будет ОГРАНИЧЕННО!
22 ITstaf 4418 23.4.2024, 21:00
автор: 100ftd
Открытая тема (нет новых ответов) PROXY-STORE.COM — ipV4 прокси от 42р В МЕСЯЦ с ротацией и без! Лучшая цена на рынке. 200+ стран
21 proxystore 5347 19.4.2024, 12:02
автор: proxystore
Открытая тема (нет новых ответов) Большие базы Semrush кейвордов по разным тематикам! Много кейвордов с трафиком и без конкуренции! Volume, KD, CPC
22 Krok 6765 12.4.2024, 5:17
автор: Krok
Открытая тема (нет новых ответов) Скрипты и программы на заказ любой сложности. Без предоплаты. Быстро, качественно и недорого!
5 c4p1t4l15t 2531 6.4.2024, 12:51
автор: c4p1t4l15t
Открытая тема (нет новых ответов) Обменяю Юмани на гривны без комиссии
3 freeax 1007 2.4.2024, 1:46
автор: Llirik


 



RSS Текстовая версия Сейчас: 25.4.2024, 3:14
Дизайн