Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2011, 15:48   #1
kyrychenko.mitya
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 26
По умолчанию Проблема с регистром

есть скрипт поиска с автозаполнением.
PHP код:
<?php

$q 
strtolower$_GET["q"] );
if (!
$q) return;

$dbhost "localhost";        // Database Host
$dbuser "root";            // User
$dbpass "";            // Password
$dbname "db122";            // Name of Database

mysql_connect$dbhost$dbuser$dbpass ) or die( mysql_error() );
mysql_select_db$dbname ) or die( mysql_error() );
mysql_query("SET NAMES 'utf8'");
// Replace "TABLE_NAME" below with the table you'd like to extract data from
$data mysql_query"SELECT * FROM material" )
or die( 
mysql_error() );

// Replace "COLUMN_ONE" below with the column you'd like to search through
// In between the if/then statement, you may present a string of text
// you'd like to appear in the textbox.
while( $row mysql_fetch_array$data )){
    if ( 
strpos(mb_strtolower$row['name'] ), $q ) !== false ) {
        echo 
$row['name'] . " \n";
    }
}
?>

Поиск слова "письмо" работает, слова "Письмо" тоже, а вот к примеру если искать слово "ПИСЬМО", то оно не находится. это как-то можно решить?
kyrychenko.mitya вне форума Ответить с цитированием
Старый 16.08.2011, 16:06   #2
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию

Попробуйте посмотреть что у вас получится при:
strtolower("ПИСЬМО");
strtolower("письмо");
strtolower("Письмо");
а также
mb_strtolower("ПИСЬМО");
mb_strtolower("письмо");
mb_strtolower("Письмо");
Jakethefish вне форума Ответить с цитированием
Старый 16.08.2011, 16:09   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

а вообще отбор и сравнение лучше делать в самом запросе, да еще и добавить сортировку вывода

Код:
SELECT * FROM material where name like %$a% order by name asc
а потом в цикле выводить
ADSoft вне форума Ответить с цитированием
Старый 16.08.2011, 16:12   #4
kyrychenko.mitya
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 26
По умолчанию

все маленькими буквами выходит.
так почему тогде не получается?
kyrychenko.mitya вне форума Ответить с цитированием
Старый 16.08.2011, 16:22   #5
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию

kyrychenko.mitya, лучше конечно сделать, так как посоветовал ADSoft, через MySql запрос вы сразу получите готовую выборку.
Хм, попробуйте поставить вместо "!== false" "> -1".

Либо попробуйте убрать условие и напечатать все что приходит
Код:
mb_strtolower( $row['name'] )
Вы также можете попробовать stripos или strripos

Последний раз редактировалось Jakethefish; 16.08.2011 в 16:25.
Jakethefish вне форума Ответить с цитированием
Старый 16.08.2011, 16:28   #6
kyrychenko.mitya
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Jakethefish Посмотреть сообщение
kyrychenko.mitya, лучше конечно сделать, так как посоветовал ADSoft, через MySql запрос вы сразу получите готовую выборку.
Хм, попробуйте поставить вместо "!== false" "> -1".

Либо попробуйте убрать условие и напечатать все что приходит
Код:
mb_strtolower( $row['name'] )
Вы также можете попробовать stripos или strripos
Первое не помогло, а при втором выводит странные символы.
а если готовую выборку получить, как ее потом сравнивать в цикле с введенным значением?
kyrychenko.mitya вне форума Ответить с цитированием
Старый 16.08.2011, 16:31   #7
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию

Ваш скрипт приобретет примерно такой вид:
Код:
$data = mysql_query( "SELECT * FROM material WHERE name LIKE '%$q%'" )
or die( mysql_error() );
Вывод же будет следующим:
Код:
while( $row = mysql_fetch_array( $data )){
        echo $row['name'] . " \n";
}
Почему? Запросом в MySql Вы запросили те записи которые похожи на $q.
Jakethefish вне форума Ответить с цитированием
Старый 16.08.2011, 16:34   #8
kyrychenko.mitya
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Jakethefish Посмотреть сообщение
Ваш скрипт приобретет примерно такой вид:
Код:
$data = mysql_query( "SELECT * FROM material WHERE name LIKE '%$q%'" )
or die( mysql_error() );
Вывод же будет следующим:
Код:
while( $row = mysql_fetch_array( $data )){
        echo $row['name'] . " \n";
}
Почему? Запросом в MySql Вы запросили те записи которые похожи на $q.
опять же нет, не работает.
обычно по вводимому слову ищет, но именно автозаолнение не работает!
kyrychenko.mitya вне форума Ответить с цитированием
Старый 16.08.2011, 16:40   #9
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию

Что значит автозаполнение в вашем скрипте?

Код:
while( $row = mysql_fetch_array( $data )){
        echo $row['name'] . " \n";
}
Сама по себе данная стуктура правильна.

Какова ваша задача? Так как данный скрипт не будет заниматься автозаполнением(кстати чего?).
Jakethefish вне форума Ответить с цитированием
Старый 16.08.2011, 16:43   #10
kyrychenko.mitya
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Jakethefish Посмотреть сообщение
Что значит автозаполнение в вашем скрипте?

Код:
while( $row = mysql_fetch_array( $data )){
        echo $row['name'] . " \n";
}
Сама по себе данная стуктура правильна.

Какова ваша задача? Так как данный скрипт не будет заниматься автозаполнением(кстати чего?).
подключаю на странице поиска вот это
Код HTML:
<script type="text/javascript" charset="windows-1251" src="js/jquery-1.2.6.pack.js"></script>
<script type="text/javascript" charset="windows-1251" src="js/jquery.autocomplete.pack.js"></script>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$().ready(function() {
	$("#targetDiv").autocomplete("autocomplete.php", {
		width: 654,
		selectFirst: true
	});
	
});
</script>
а вот содержимое autocomplete.php
PHP код:
<?php

$q 
strtolower$_GET["q"] );
if (!
$q) return;

$dbhost "localhost";        // Database Host
$dbuser "root";            // User
$dbpass "";            // Password
$dbname "db122";            // Name of Database

mysql_connect$dbhost$dbuser$dbpass ) or die( mysql_error() );
mysql_select_db$dbname ) or die( mysql_error() );
mysql_query("SET NAMES 'utf8'");

// Replace "TABLE_NAME" below with the table you'd like to extract data from
$data mysql_query"SELECT * FROM material" )
or die( 
mysql_error() );

// Replace "COLUMN_ONE" below with the column you'd like to search through
// In between the if/then statement, you may present a string of text
// you'd like to appear in the textbox.
while( $row mysql_fetch_array$data )){
    if ( 
strpos(mb_strtolower$row['name'] ), $q ) !== false ) {
        echo 
$row['name'] . " \n";
    }
}
?>


и на странице поиска получаем автозаполнение. при вводе первых букв из бд выбираются возможные значения
kyrychenko.mitya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции для работы с регистром FatalLight Общие вопросы C/C++ 0 20.01.2011 21:19
Как работать с регистром 1С через OLE Toreno_87 Помощь студентам 0 22.07.2010 00:27
Найти слово с любым регистром Shouldercannon Общие вопросы Delphi 3 28.06.2009 17:01
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37
проблема с регистром в запросе SQL Abbatik Помощь студентам 2 28.01.2008 00:48