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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Большие базы Semrush кейвордов по разным тематикам! Много кейвордов с трафиком и без конкуренции! Volume, KD, CPC
22 Krok 6720 12.4.2024, 5:17
автор: Krok
Открытая тема (нет новых ответов) PROXY-STORE.COM — ipV4 прокси от 42р В МЕСЯЦ с ротацией и без! Лучшая цена на рынке. 200+ стран
20 proxystore 5164 11.4.2024, 21:00
автор: proxystore
Открытая тема (нет новых ответов) Скрипты и программы на заказ любой сложности. Без предоплаты. Быстро, качественно и недорого!
5 c4p1t4l15t 2456 6.4.2024, 12:51
автор: c4p1t4l15t
Открытая тема (нет новых ответов) Обменяю Юмани на гривны без комиссии
3 freeax 1001 2.4.2024, 1:46
автор: Llirik
Открытая тема (нет новых ответов) Сайт не индексируется в Google без добавления ссылок в адурилку
4 Nekit 1082 20.3.2024, 21:44
автор: MorKer


 



RSS Текстовая версия Сейчас: 18.4.2024, 4:09
Дизайн