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
Форумы портала PHP.SU :: Версия для печати :: Автокомплит
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Автокомплит

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

1. Fier - 06 Января, 2013 - 13:20:24 - перейти к сообщению
Сделал autocomplete на сайте. Есть одно НО. не подхватывает русские буквы.

Сам код:

CODE (javascript):
скопировать код в буфер обмена
  1. <!-- Автодополнение -->
  2.  
  3. <script type="text/javascript" src="js/jquery.js"></script>
  4. <script type="text/javascript" charset="windows-1251">
  5.         function lookup(inputString) {
  6.                 if(inputString.length == 0) {
  7.                         // Hide the suggestion box.
  8.                         $('#suggestions').hide();
  9.                 } else {
  10.                         $.post("autocomplete.php", {queryString: ""+inputString+""}, function(data){
  11.                                 if(data.length >0) {
  12.                                         $('#suggestions').show();
  13.                                         $('#autoSuggestionsList').html(data);
  14.                                 }
  15.                         });
  16.                 }
  17.         } // lookup
  18.        
  19.         function fill(thisValue) {
  20.                 $('#inputString').val(thisValue);
  21.                 setTimeout("$('#suggestions').hide();", 200);
  22.         }
  23. </script>
  24.  
  25. <!-- Автодополнение -->


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.        
  3.         // PHP5 Implementation - uses MySQLi.
  4.         // mysqli('localhost', 'yourUsername', 'yourPassword', 'yourDatabase');
  5.         $db = new mysqli('localhost', 'root' ,'111', 'ovb');
  6.        
  7.         if(!$db) {
  8.                 // Show error if we cannot connect.
  9.                 echo 'ERROR: Could not connect to the database.';
  10.         } else {
  11.                 // Is there a posted query string?
  12.                 if(isset($_POST['queryString'])) {
  13.                         $queryString = $db->real_escape_string($_POST['queryString']);
  14.                        
  15.                         // Is the string length greater than 0?
  16.                        
  17.                         if(strlen($queryString) >0) {
  18.                                 // Run the query: We use LIKE '$queryString%'
  19.                                 // The percentage sign is a wild-card, in my example of countries it works like this...
  20.                                 // $queryString = 'Uni';
  21.                                 // Returned data = 'United States, United Kindom';
  22.                                
  23.                                 // YOU NEED TO ALTER THE QUERY TO MATCH YOUR DATABASE.
  24.                                 // eg: SELECT yourColumnName FROM yourTable WHERE yourColumnName LIKE '$queryString%' LIMIT 10
  25.                                
  26.                                 $query = $db->query("SELECT lname, fname, sname, id FROM clients WHERE lname LIKE '$queryString%' LIMIT 10");
  27.                                 if($query) {
  28.                                         // While there are results loop through them - fetching an Object (i like PHP5 btw!).
  29.                                         while ($result = $query ->fetch_object()) {
  30.                                                 // Format the results, im using <li> for the list, you can change it.
  31.                                                 // The onClick function fills the textbox with the result.
  32.                                                
  33.                                                 // YOU MUST CHANGE: $result->value to $result->your_colum
  34.                                         echo '<li onClick="fill(\'' .$result->lname. '' .$result->fname. '' .$result->sname. '' .$result->id. '\');">'.$result->lname. ''.$result->fname.'' .$result->sname.'' .$result->id.'</li>';
  35.                                 }
  36.                                 } else {
  37.                                         echo 'ERROR: There was a problem with the query.';
  38.                                 }
  39.                         } else {
  40.                                 // Dont do anything.
  41.                         } // There is a queryString.
  42.                 } else {
  43.                         echo 'There should be no direct access to this script!';
  44.                 }
  45.         }
  46. ?>


CODE (html):
скопировать код в буфер обмена
  1. <p>Введите Фамилию:</p>
  2.                                 <input type="text" name="smember" width="20" value="" id="inputString" onkeyup="lookup(this.value);" onblur="fill();" />
  3.                 <div class="suggestionsBox" id="suggestions" style="display: none; z-index: 500;">
  4.                                 <img src="css_images/upArrow.png" style="position: relative; top: -12px; left: 50px;" alt="upArrow" />
  5.                                 <div class="suggestionList" id="autoSuggestionsList">
  6.                                         &nbsp;
  7.                                 </div>
  8.                             </div>


Помогите разобраться куда пихать. Сижу мучаю уже iconv около 2-ух часов.
2. DeepVarvar - 06 Января, 2013 - 13:31:51 - перейти к сообщению
Кодировка, сэр?

При правильно сохраненных исходных файлах никакой iconv не нужен.
3. Fier - 06 Января, 2013 - 13:34:26 - перейти к сообщению
Все файлы сохранены в UTF8. И сайт весь на UTF работает. Долго мудрился с пхп, что бы меняло в запросе с ВИНДОВС1251 на УТФ.

Вот теперь с такой траблой столкнулся. Но тут тяжелее, квери слабо знаю то.
4. DeepVarvar - 06 Января, 2013 - 13:34:34 - перейти к сообщению
Fier пишет:
type="text/javascript" charset="windows-1251"
Ню-ню. Что я и говорил...
(Добавление)
Еще и база наверное не в утф-8, да?
(Добавление)
Переведите вообще ВСЕ в утф-8, проблема рассосется.
5. Fier - 06 Января, 2013 - 13:38:46 - перейти к сообщению
utf8_general_ci - вся база.

Поменял - <script type="text/javascript" charset="UTF-8">
6. caballero - 06 Января, 2013 - 14:16:01 - перейти к сообщению
Цитата:
utf8_general_ci - вся база.

и что? важно в какой кодировке она отдает

mysql_query("SET NAMES 'utf8'") и будут тебе счастье
7. Fier - 06 Января, 2013 - 14:27:14 - перейти к сообщению
Нема счастья.
8. DeepVarvar - 06 Января, 2013 - 14:27:59 - перейти к сообщению
Значит что-то еще забыли.
9. broshurkaplus - 06 Января, 2013 - 14:34:56 - перейти к сообщению
не вглядываясь плотно:
что-то было о том, что 1 русский символ это в utf-8, те в бд == 2символам, может поэтому...
в браузере он длину фактически считает, а вот когда с бд...
сам както мучился

не понял куда не подхватывает? не производит сравнение по LIKE ?
вы просто попробуйте сначала вывести обратно на экран, то что отсылаете, быть может он передает в селект совсем не в таком виде, как вам кажется

да, еще - когда real_escape_string быть может экранирует что то, проверьте что передается и что в базе, если передалось одинаково, то не должно так быть, может " или пробелы заменены, выведите себе что передалось, когда такая строка точно в базе есть и сравните, вероятно не совпадает и выборки нету.
10. Fier - 06 Января, 2013 - 14:39:21 - перейти к сообщению
Пересохранил все файлы уже. Результата 0.

Когда ввожу - Denys, оно мне предлагает варианты.

Когда ввожу - тест - оно мне ничего не предлагает. Тоесть русскими буквами оно даже не может выполнить поиск по базе.
11. DeepVarvar - 06 Января, 2013 - 14:56:31 - перейти к сообщению
Ну не может же быть что у всех работает а у вас не работает.
Ищите ошибку. Мы то вобщем все что могли сделали и подсказали.
12. caballero - 06 Января, 2013 - 15:00:05 - перейти к сообщению
Fier пишет:
Нема счастья.

Значит не судьба Огорчение
(Добавление)

Цитата:
"Спят усталые игрушки" в джазовой обработке
игрушки из секшопа в джазовой обработке? Мсье знает толк в извращениях ©
13. broshurkaplus - 06 Января, 2013 - 15:06:39 - перейти к сообщению
покажите строку сюда или сами проверьте:
что вводите в поле
что на сервер приходит
что в запросе
и что есть в бд

значит у вас нет такой строки в бд,выведите ее в экран себе и сравните
14. Fier - 06 Января, 2013 - 15:09:30 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript">
  2.  
  3. $(document).ready(function(){
  4.     $("#button").click(function(){
  5.  
  6.      var inputString = $("#inputString").val();
  7.      
  8.            
  9.          alert(inputString);  
  10.            
  11.       $.ajax({
  12.           type: "POST",
  13.           url: "autocomplete.php",
  14.           data: {
  15.               inputString: inputString
  16.  
  17.          }
  18.  });
  19.  });
  20.  
  21.  });
  22.  
  23. </script>


Может правда смешно, но для себя такой вариант нашел того чего отправляет - вывод алертом. Ввожу на русском и все окей.

Проверил еще другим способом. Ввел в БД:

Имя - 123
Фамилию - Вася

Когда захожу на страницу автокомплита, получаю результат:

Имя оно отображает - 123
А вместо фамилии - ?????????

Тоесть база отдает не так как надо.

Но вон и алертом сделал вывод. Все же отправляем в нужной кодировке.
15. Fier - 06 Января, 2013 - 15:13:29 - перейти к сообщению
Решил сделать:

$db = new mysqli('localhost', 'root' ,'111', 'ovb');

mysql_query('set names utf8');

Добавить - Сет НЕЙМС.

Ответ дает на скриншоте.

 

Powered by ExBB FM 1.0 RC1