Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с регистрами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
_mitya
Отправлено: 16 Августа, 2011 - 14:53:11
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




есть скрипт поиска с автозаполненим. он работает, но ищет не все.
к примеру слово "письмо" и "Письмо" находит, а "ПИСЬМО" нет. чтото можно решить?

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $q = strtolower( $_GET["q"] );
  4. if (!$q) return;
  5.  
  6. $dbhost = "localhost";          // Database Host
  7. $dbuser = "root";                       // User
  8. $dbpass = "";                   // Password
  9. $dbname = "db122";                      // Name of Database
  10.  
  11. mysql_connect( $dbhost, $dbuser, $dbpass ) or die( mysql_error() );
  12. mysql_select_db( $dbname ) or die( mysql_error() );
  13. mysql_query("SET NAMES 'utf8'");
  14. // Replace "TABLE_NAME" below with the table you'd like to extract data from
  15. $data = mysql_query( "SELECT * FROM material" )
  16. or die( mysql_error() );
  17.  
  18. // Replace "COLUMN_ONE" below with the column you'd like to search through
  19. // In between the if/then statement, you may present a string of text
  20. // you'd like to appear in the textbox.
  21. while( $row = mysql_fetch_array( $data )){
  22.         if ( strpos(mb_strtolower( $row['name'] ), $q ) !== false ) {
  23.                 echo $row['name'] . " \n";
  24.         }
  25. }
  26. ?>
 
 Top
EuGen Администратор
Отправлено: 16 Августа, 2011 - 14:58:24
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Проще делать это в запросе:
PHP:
скопировать код в буфер обмена
  1. $data = mysql_query( "SELECT * FROM material WHERE name LIKE '%".mysql_real_escape_string($q)."%'" )


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
PATCH
Отправлено: 16 Августа, 2011 - 14:59:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




ненаходит ваше ПИСЬМО из за скорее всего то что вы весь текст приводите к нижнему регистру) mb_strtolower
 
 Top
_mitya
Отправлено: 16 Августа, 2011 - 15:03:47
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




EuGen пишет:
$data = mysql_query( "SELECT * FROM material WHERE name LIKE '%".mysql_real_escape_string($q)."%'" )



а с этим что делать
PHP:
скопировать код в буфер обмена
  1.  
  2. while( $row = mysql_fetch_array( $data )){
  3.         if ( strpos(mb_strtolower( $row['name'] ), $q ) !== false ) {
  4.                 echo $row['name'] . " \n";
  5.         }
  6. }

как теперь цикл организовать не пойму
 
 Top
EuGen Администратор
Отправлено: 16 Августа, 2011 - 15:13:51
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




PHP:
скопировать код в буфер обмена
  1. while( $row = mysql_fetch_array( $data ))
  2. {
  3.                 echo $row['name'] . " \n";
  4. }


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
_mitya
Отправлено: 16 Августа, 2011 - 15:14:14
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




PATCH пишет:
ненаходит ваше ПИСЬМО из за скорее всего то что вы весь текст приводите к нижнему регистру) mb_strtolower

а как без этого делать? без этого оно не работает.
как по-другому тогда?
(Добавление)
EuGen пишет:
#
while( $row = mysql_fetch_array( $data ))
#
{
#
echo $row['name'] . " \n";
#
}

не, не работает так. автозаолнение не работает. если просто окей нажать, найдет.

CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript" charset="windows-1251" src="js/jquery-1.2.6.pack.js"></script>
  2. <script type="text/javascript" charset="windows-1251" src="js/jquery.autocomplete.pack.js"></script>
  3. <link href="style.css" rel="stylesheet" type="text/css" />
  4. <script type="text/javascript">
  5. $().ready(function() {
  6.         $("#targetDiv").autocomplete("autocomplete.php", {
  7.                 width: 654,
  8.                 selectFirst: true
  9.         });
  10.        
  11. });
  12. </script>

это то, что я вставляю на странице поиска.
 
 Top
_mitya
Отправлено: 17 Августа, 2011 - 09:39:36
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Так все-таки мжно что-то сделать, чтоб находило слова верхнего регистра типа "ПИСЬМО" ??
 
 Top
illy
Отправлено: 17 Августа, 2011 - 10:11:04
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $text="Чипсы Письмо Симпсоны пиСьмо Футурама ПИСЬМО";
  3. if($z=preg_match_all('#письмо#mUsi',$text,$v)){
  4. echo 'Найдено: '.sizeof($v[0]).'совпадения<br><br>';
  5. for($n=0;$n!=sizeof($v[0]);$n++){
  6. echo $v[0][$n].'<br>';
  7. }
  8. $m=preg_replace('#(письмо)#mUsi','<b>\1</b>',$text);
  9. echo '<br>В тексте: '.$m;
  10. }
  11. ?>
  12.  

(Отредактировано автором: 17 Августа, 2011 - 10:43:15)



-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
_mitya
Отправлено: 17 Августа, 2011 - 11:07:31
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




ничего не происходит если это ввести.
я в пхп не силен. это вообще реально сделать без огромного переделывания кода?
 
 Top
EuGen Администратор
Отправлено: 17 Августа, 2011 - 12:02:45
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Тогда http://phpfaq[dot]ru/debug

С вещами же вроде
_mitya пишет:
я в пхп не силен
помочь себе можете только Вы. Дерзайте - учитесь.
Пример с SQL я привел - нужно запрашивать у БД уже верную информацию (сообразно поисковому слову) и выводить все найденные результаты.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
_mitya
Отправлено: 17 Августа, 2011 - 14:16:21
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




я не знаю как пользоваться дебагом.
происходит такая вещь.
если искать Письмо - все ок.
а если ПиСьмо, то его не ищет автозаполнение.
может что-то с кодировкой?
 
 Top
illy
Отправлено: 17 Августа, 2011 - 14:27:09
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Попробуй так:
PHP:
скопировать код в буфер обмена
  1. while( $row = mysql_fetch_array( $data )){
  2. if($z=preg_match_all('#'.$q.'#mUsi',$row['name'],$v)){
  3. $m=preg_replace('#('.$q.')#mUsi','<b>\1</b>',$row['name']);
  4. echo 'Найдено: '.sizeof($v[0]).'совпадения в тексте '.$m.'<br><br>';
  5. for($n=0;$n!=sizeof($v[0]);$n++){
  6. echo $v[0][$n].'<br>';
  7. }
  8. }
  9. ?>


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
_mitya
Отправлено: 17 Августа, 2011 - 14:53:49
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




пишет в автозаполнении совпадения найдены, но опять не выводит ПИСЬМО.
и когда вводишь п - находит письмо и Письмо, а когда вводишь пи - только письмо. странно.
в чем может быть проблема? то, что вводиться - переходит в нижний регистр, то что в базе - переводится в нижний регистр - все должно быть окей. не пойму.
может правда это ког\дировка utf?

а ни у кого нету рабочего примера автозаполнения?
 
 Top
illy
Отправлено: 17 Августа, 2011 - 15:57:35
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




проблема решена. Всё дело было в кодировке

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $q = strtolower( $_GET["q"] );
  3. if (!$q) return;
  4.  
  5. $dbhost = "localhost";          // Database Host
  6. $dbuser = "root";                       // User
  7. $dbpass = "";                   // Password
  8. $dbname = "db122";                      // Name of Database
  9.  
  10. mysql_connect( $dbhost, $dbuser, $dbpass ) or die( mysql_error() );
  11. mysql_select_db( $dbname ) or die( mysql_error() );
  12. mysql_query("SET NAMES 'utf8'");
  13. // Replace "TABLE_NAME" below with the table you'd like to extract data from
  14. $data = mysql_query( "SELECT * FROM material" )
  15. or die( mysql_error() );
  16.  
  17. if(mysql_num_rows($data) > 0){
  18.     while($row = mysql_fetch_assoc($data)){
  19.         if(mb_strpos(mb_strtolower($row['name'], 'UTF-8'), $q, 0, 'UTF-8') !== FALSE){
  20.             echo $row['name'] . " \n";
  21.         }
  22.     }
  23. } 
  24. ?>


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB