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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Dazar
Отправлено: 20 Января, 2011 - 19:04:44
Post Id


Частый гость


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


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




Пока пытался сам изучить - сто раз убился головой об стенку! Сколько сайтов не перепробовал с обучением этой штуке - нигде ничего нормального нет.
Суть вот в чём: мне нужно автозаполнить из како-го то поля таблицы бд,
везде пишут описание первого файла где сама форма, которую надо автозаполнить. А мне нужно знать(сам никак не допираю), что должно быть во 2 файле, который выгружает из бд.
Хотябы скажите конструкцию, а как подставить значения из базы данных я сам разберусь.
Вот что я использую в первом файле:
CODE (javascript):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3.   <script src="http://code.jquery.com/jquery-latest.js"></script>
  4.   <link rel="stylesheet" href="http://dev.jquery.com/view/trunk/plugins/autocomplete/demo/main.css" type="text/css" />
  5.   <link rel="stylesheet" href="http://dev.jquery.com/view/trunk/plugins/autocomplete/jquery.autocomplete.css" type="text/css" />
  6.   <script type="text/javascript"
  7.  
  8. src="http://dev.jquery.com/view/trunk/plugins/autocomplete/lib/jquery.bgiframe.min.js"></script>
  9.   <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/autocomplete/lib/jquery.dimensions.js"></script>
  10.   <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/autocomplete/jquery.autocomplete.js"></script>
  11.   <script>
  12.   $(document).ready(function(){
  13. $("#example").autocomplete('2.php');
  14.   });
  15.   </script>
  16.  
  17. </head>
  18. <body>
  19.   <input id="example" />
  20. </body>
  21. </html>
 
 Top
SAD
Отправлено: 20 Января, 2011 - 19:43:35
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




молодой человек - я написал вам способ не хуже этого, попытайтесь разобраться в нем.
нужно подключить всего лишь один скрипт - jquery
 
 Top
Dazar
Отправлено: 20 Января, 2011 - 20:04:17
Post Id


Частый гость


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


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




Я додумался до решения. См. ту тему) http://forum.php.su/topic.php?forum=1&topic=6012&postid=1295549822#1295549822

(Отредактировано автором: 20 Января, 2011 - 21:25:47)

 
 Top
HotBird
Отправлено: 20 Января, 2011 - 21:59:54
Post Id



Гость


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


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




Давайте попробую написать как это я делаю.
У меня есть библиотека iQuery для автозаполнения которая в прикреплённом файле.
Брал отсюда http://www[dot]devbridge[dot]com/project[dot][dot][dot]complete/jquery/

Front end. (страница для пользователя)
Подгружаете библиотеку к странице стандартным кодом:
<script type="text/javascript" src="js/jquery.autocomplete.js"></script>

Сразу после этого добавляем функцию автозаполнения для поля ввода:
$(document).ready(function() {
$('#input_text').autocomplete({
serviceUrl:'2.php',//скрипт выдающий список подсказок для автозаполнения
minChars:2, //количество символов введённых пользователем при которых начинается автозаполнение
width: 300, //ширина поля для вивода предлагаемых результатов автозаполнения
highlight: false, //запретить подсветку букв совпадающих с введёнными
onSelect: function(value, data){ document.forms['input_form'].submit(); } //функция выполняющаяся при выборе пользователем одного из предложеных вариантов
});
});


И на этой же странице организуем форму для ввода данных:
<form name="input_form" id="input_form" action="" method="POST" >
<input id="input_text" type="text" size="50" value="" autocomplete="off">
</form>


Подключаем к этой странице стили для дива с подказками:
.autocomplete-w1 {
font: 90% Verdana, Arial, Helvetica, sans-serif;
background:url(img/shadow.png) no-repeat bottom right;
position:absolute;
top:0px;
left:0px;
margin:6px 0 0 6px; /* IE6 fix: */
_background:none;
_margin:1px 0 0 0; }
.autocomplete {
font: 90% Verdana, Arial, Helvetica, sans-serif;
border:1px solid #999;
background:#FFF;
cursor:default;
text-align:left;
max-height:350px;
overflow:auto;
margin:-6px 6px 6px -6px; /* IE6 specific: */
_height:350px;
_margin:0;
_overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; overflow:hidden; }
.autocomplete strong { font-weight:normal; color:#3399FF; }



Back end. (скрипт дающий данные для автозаполнения)
У вас он называется 2.php
При каждом вводе пользователем символов в поле "input_text" посылается на скрипт 2.php GET-запрос с переменной query имеющей значение введённого текста пользователем. Скрипт 2.php должен ответить списком предлагаемых вариантов для заполнения в формате json.
Структура 2.php примерно такая:
1. Подключаемся к базе данных.
2. Обрабатываем пришедшую переменную $_GET['query'] в соответствии с нормами безопасности (вырезаем теги, обрезаем лишние пробелы, используем mysql_real_escape_string() и т.д.)
3. Делаем запрос к базе с выборкой данных совпадающих с обработаным $_GET['query']
$rs = mysql_query("SELECT ........",$link);
4. Возвращаем выбраные данные примерно так:
$rs_cnt = mysql_num_rows($rs);

$json_str="{query:'".$query_text."',suggestions:[";
for($i=0;$i<$rs_cnt;$i++) {
if ($i==0) $json_str.="'".mysql_result($rs,$i,'поле таблицы с данными для автозаполнения')."'";
else $json_str.=",'".mysql_result($rs,$i,'поле таблицы с данными для автозаполнения')."'";
}
$json_str.="]}";
echo $json_str;


Ну вот и всё, у меня так работает.
Скачать файл: jquery.autocomplete.js
Скачан раз: 312

(Отредактировано автором: 22 Января, 2011 - 13:53:53)



-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
JustUserR
Отправлено: 21 Января, 2011 - 15:30:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Dazar Процесс реализации поставленной задачи автозаполненеия целевого элемента формы может быть осуществлен на основе различных способов - как предполагаемого словаря допустимых словосочетаний - так и применения эвристического алгоритма позволяющего включать целевые отображаемые формы на основе поиска однокореннных слов в результате разбора алгоритмом стеммера портера


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
maksmib
Отправлено: 11 Февраля, 2011 - 12:17:08
Post Id



Гость


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


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




Я прошу прощения, но что то не могу сообразить.. а как же сделать такой вариант, когда необходимо дать возможность вписать несколько вариантов через запятую?

Попробовал так:

PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['query']))
  2.         $query = $_GET['query'];
  3. $query = trim($query);
  4.  
  5. if( strstr($query,',') )
  6. {      
  7.         $query = substr(strrpos($query,','), 0);
  8.         $query = trim($query);
  9. }
  10.  
  11. $rs = mysql_query('SELECT col_name FROM table_name WHERE col_name LIKE "%'.$query.'%"', $dblink);
  12. $rs_cnt = mysql_num_rows($rs);
  13.  
  14. $json_str="{query:'".$query."',suggestions:[";
  15. for($i=0;$i<$rs_cnt;$i++)
  16. {       if ($i==0)
  17.                 $json_str.="'".mysql_result($rs,$i,'col_name')."'";
  18.         else
  19.                 $json_str.=", '".mysql_result($rs,$i,'col_name')."'";
  20. }
  21. $json_str.="]}";
  22.  
  23. echo $json_str;


Первое введенное слово находится нормально, но все что вводится после запятой, остается без реакции.
Подскажите пожалуйста где я накосячил.
 
 Top
maksmib
Отправлено: 11 Февраля, 2011 - 15:43:35
Post Id



Гость


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


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




Собственно вопрос больше в том, что именно содержится в параметре "query" массива _GET, в тот момент, когда один из вариантов подстановки уже был выбран?
 
 Top
maksmib
Отправлено: 11 Февраля, 2011 - 20:03:35
Post Id



Гость


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


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




вопрос снят
 
 Top
JustUserR
Отправлено: 12 Февраля, 2011 - 14:07:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




maksmib пишет:
Первое введенное слово находится нормально, но все что вводится после запятой, остается без реакции
Для осуществления корректного размещения множества параметров поиска в информационном поле БД ассоциированном с вариантами установки автозаполнения - необходимо осуществить предварительную модификацию уровня трактования элементов включенных в запрос относительно синтаксиса операции LIKE


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
MrHok
Отправлено: 12 Апреля, 2011 - 00:32:18
Post Id


Новичок


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


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




HotBird пишет:
Давайте попробую написать как это я делаю.
У меня есть библиотека iQuery для автозаполнения которая в прикреплённом файле.
Брал отсюда http://www[dot]devbridge[dot]com/project[dot][dot][dot]complete/jquery/

Front end. (страница для пользователя)
Подгружаете библиотеку к странице стандартным кодом:
<script type="text/javascript" src="js/jquery.autocomplete.js"></script>

Сразу после этого добавляем функцию автозаполнения для поля ввода:
$(document).ready(function() {
$('#input_text').autocomplete({
serviceUrl:'2.php',//скрипт выдающий список подсказок для автозаполнения
minChars:2, //количество символов введённых пользователем при которых начинается автозаполнение
width: 300, //ширина поля для вивода предлагаемых результатов автозаполнения
highlight: false, //запретить подсветку букв совпадающих с введёнными
onSelect: function(value, data){ document.forms['input_form'].submit(); } //функция выполняющаяся при выборе пользователем одного из предложеных вариантов
});
});


И на этой же странице организуем форму для ввода данных:
<form name="input_form" id="input_form" action="" method="POST" >
<input id="input_text" type="text" size="50" value="" autocomplete="off">
</form>


Подключаем к этой странице стили для дива с подказками:
.autocomplete-w1 {
font: 90% Verdana, Arial, Helvetica, sans-serif;
background:url(img/shadow.png) no-repeat bottom right;
position:absolute;
top:0px;
left:0px;
margin:6px 0 0 6px; /* IE6 fix: */
_background:none;
_margin:1px 0 0 0; }
.autocomplete {
font: 90% Verdana, Arial, Helvetica, sans-serif;
border:1px solid #999;
background:#FFF;
cursor:default;
text-align:left;
max-height:350px;
overflow:auto;
margin:-6px 6px 6px -6px; /* IE6 specific: */
_height:350px;
_margin:0;
_overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; overflow:hidden; }
.autocomplete strong { font-weight:normal; color:#3399FF; }



Back end. (скрипт дающий данные для автозаполнения)
У вас он называется 2.php
При каждом вводе пользователем символов в поле "input_text" посылается на скрипт 2.php GET-запрос с переменной query имеющей значение введённого текста пользователем. Скрипт 2.php должен ответить списком предлагаемых вариантов для заполнения в формате json.
Структура 2.php примерно такая:
1. Подключаемся к базе данных.
2. Обрабатываем пришедшую переменную $_GET['query'] в соответствии с нормами безопасности (вырезаем теги, обрезаем лишние пробелы, используем mysql_real_escape_string() и т.д.)
3. Делаем запрос к базе с выборкой данных совпадающих с обработаным $_GET['query']
$rs = mysql_query("SELECT ........",$link);
4. Возвращаем выбраные данные примерно так:
$rs_cnt = mysql_num_rows($rs);

$json_str="{query:'".$query_text."',suggestions:[";
for($i=0;$i<$rs_cnt;$i++) {
if ($i==0) $json_str.="'".mysql_result($rs,$i,'поле таблицы с данными для автозаполнения')."'";
else $json_str.=",'".mysql_result($rs,$i,'поле таблицы с данными для автозаполнения')."'";
}
$json_str.="]}";
echo $json_str;


Ну вот и всё, у меня так работает.


Очень подробно и красиво расписали. Супер.
Но есть вопрос. Как я не искал автозаполнение, но все в подобной форме как Вы описали.

А если мне нужно что бы при вводе текста в первое поле, этот же текст синхронно появлялся и во втором поле. Как это сделать ?? Подскажите пожалуйста. Уже все перерыл. Понимаю, что возможно как то можно переделать тот пример что расписали Вы, но как именно не знаю. Такая мелочь казалось бы, но что-то не дается мне никак.
Заранее благодарю )
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Апреля, 2011 - 08:40:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




MrHok пишет:
синхронно появлялся и во втором поле

CODE (javascript):
скопировать код в буфер обмена
  1. $("#input2").val($("#input1").val());

Цикличность сами организуете?
 
 Top
MrHok
Отправлено: 12 Апреля, 2011 - 12:36:08
Post Id


Новичок


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


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




DeepVarvar пишет:
MrHok пишет:
синхронно появлялся и во втором поле

CODE (javascript):
скопировать код в буфер обмена
  1. $("#input2").val($("#input1").val());

Цикличность сами организуете?


Спасибо за исчерпывающий ответ.
Ну это Вам оно все понятно как дважды два )).
Я ничего не понял если чесно. Куда скопировать и какой и зачем цикл сделать.
 
 Top
itexy
Отправлено: 26 Апреля, 2011 - 13:56:15
Post Id


Новичок


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


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




Господа, последняя надежда на вас.
Встроил все как описано здесь, а также так как тут
http://www[dot]youtube[dot]com/watch?v=E[dot][dot][dot]=player_embedded
и тут http://vremenno[dot]net/js/autocompl[dot][dot][dot]sing-javascript/ (jQuery версия)
а также перечитал практически всю выдачу,
также пробовал бегать с бубном вокруг компа, но ничего не помогает.

код на странице html:
CODE (html):
скопировать код в буфер обмена
  1.  
  2.  
  3. {script src="js/jquery.autocomplete.js"}
  4.  
  5. {literal}
  6.         <script type="text/javascript">
  7.         $(document).ready(function() {
  8.                 $("#s_city").autocomplete("auto_city.php", {
  9.                         delay: 10,
  10.                         minChars: 1,
  11.                         autoFill: true,
  12.                         maxItemsToShow: 10
  13.                 });
  14.         });
  15.         </script>
  16. {/literal}
  17.  
  18.                 <input type="text" id="s_city" />
  19.  



код файла обратитки auto_city.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header("Content-type: text/plain; charset=windows-1251");
  3.         $q = $_GET['q'];
  4.         $sql = mysql_connect("localhost","root","");
  5.         mysql_select_db("feelflow_site");
  6.         $query = mysql_query("SELECT element FROM cscart_destination_elements WHERE element LIKE '%$q%'");
  7.                 while ($res = mysql_fetch_assoc($query)) {
  8.                         echo $res['element']."\n";
  9.                 }
  10. ?>
  11.  


Вроде все работает, вот только выдает не список городов а вот это:
http://clip2net[dot]com/clip/m35283/[dot][dot][dot]953-clip-5kb[dot]png

ПОЖАЛУЙСТА, подскажите как решить проблему...
 
 Top
Viper
Отправлено: 26 Апреля, 2011 - 14:19:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




itexy я не вижу в вашем php-коде чтобы вы обратно отправляли json!?

Вместо того чтобы читать говносайты(уж извините) пройдите сюда http://jqueryui[dot]com/demos/autoco[dot][dot][dot]emote-with-cache и увидите правильное построение кода для вашей задачи.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
itexy
Отправлено: 26 Апреля, 2011 - 14:31:30
Post Id


Новичок


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


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




Viper спасибо за ссылку.
Проблема была в том, что скрипт не находил где находится файл с php кодом выбора значений из баз данных.

в этой строке
PHP:
скопировать код в буфер обмена
  1. $("#s_city").autocomplete("auto_city.php", {


нужно было указать правильный адрес к файлу.
В моем случае - я просто переместил файл в одну директорию с тем, где лежал html с формой.

Осталась еще одна проблема..
Оно не понимает русский...

Сейчас буду рыться искать, как решить, если кто знает скажите, пожалуйста. Если я найду раньше, - выложу в эту тему (будет наследникам уже полное руководство со всеми проблемами).
(Добавление)
Фух, решено.
Траблы с кодировкой.

между 3-й и 4-й строчкой нужно вставить:
PHP:
скопировать код в буфер обмена
  1. $q = iconv('UTF-8', 'windows-1251', $q);



-------------------------------- -------------------------------- -----
ИТОГО ПОЛНОЕ РУКОВОДСТВО:
-------------------------------- -------------------------------- -----

Клиентская часть (у меня в smarty):
CODE (html):
скопировать код в буфер обмена
  1.  
  2. {script src="js/jquery.autocomplete.js"}
  3. {script src="js/jquery.js"}
  4. {literal}
  5.         <script type="text/javascript">
  6.         $(document).ready(function() {
  7.                 $("#s_city").autocomplete("auto_city.php", {
  8.                         delay: 10,
  9.                         minChars: 1,
  10.                         autoFill: true,
  11.                         maxItemsToShow: 10
  12.                 });
  13.         });
  14.         </script>
  15. {/literal}
  16.  
  17. <input type="text" id="s_city" />


Содержимое файла auto_city.php (который выбирает из базы данных список городов):

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header("Content-type: text/plain; charset=windows-1251");
  3.         $q = $_GET['q']; // точно незнаю )) вроде как то что ввели в поле ))
  4.         $q = iconv('UTF-8', 'windows-1251', $q); // решаем проблемы с коировкой
  5.         $sql = mysql_connect("localhost","db_username","db_password"); // рподключаемся к базе данных
  6.         mysql_select_db("db_name"); // выбирем нужную базу данных
  7.         $query = mysql_query("SELECT city FROM sity_list WHERE city LIKE '%$q%'"); // запрос в базу на выбор городов
  8.                 while ($res = mysql_fetch_assoc($query)) {
  9.                         echo $res['element']."\n"; // строим список значений в выпадающее поле
  10.                 }
  11. ?>


Собственно все.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB