Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Форма с подгружающимся содержимым как в Google
 
 автор: Silentium   (04.06.2009 в 15:30)   письмо автору
 
 

Добрый день как реализовать нечто подобное?
т.е. имеет таблица в которой содержаться например названия регионов, как при вводе в форму названия города выпадал список с имеющимися вариантами?
Заранее извиняюсь, если не туда запостил

  Ответить  
 
 автор: aexb   (04.06.2009 в 15:53)   письмо автору
 
   для: Silentium   (04.06.2009 в 15:30)
 

Да, для этого нужно использовать AJAX. Для упрощения задачи можно воспользоваться JS-фреймворками, например, jQuery, mooTools или prototype. Вот пример использования jQuery:

Файл index.html
<html>  
<head>  
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
<script type="text/javascript">  
$( document ).ready( function() { 
    $( "#button" ).click( function () {  
        var param = $( "#user" ).val(); 
        $( "#progress" ).load( "process.php", { 'user' : param } ); 
        return false; 
    });  
}); 
</script> 
</head> 
<body> 
<span id="progress"></span>  
<form method="post">  
    Имя: <input name="user" type="text" value="" id="user" />  
    <input type="submit" name="send" value="Отправить" title='Отправить сообщения.' id="button" />  
</form>  
</body>  
</html>


Файл process.php:
<?
  
echo $_POST['user'];
?>


По нажатию кнопки Submit происходит срабатывание JS, которое осуществляет в фоновом режиме запрос HTTP_POST к скрипту process.php, затем все, что получилось из скрипта, методом load вставляется внутрь <span id="process"></span>.

Соответственно, в файле process.php может осуществляться запрос к БД и выборка данных. А в файле index.html, соответственно, эти данные можно представить, например, как на Яндексе. Сейчас не могу найти, где-то было видео как раз о том, как сделать именно то, о чем вы спрашиваете.

И посмотрите вот сюда например: http://www.linkexchanger.su/2008/34.html

UPD: совсем забыл сказать - могут быть проблемы с кодировками. В форму лучше вставить accept-charset="UTF-8" вот так: <form action="[act]" method="[method]" accept-charset="UTF-8">

У меня, например, БД работает на 1251, соответственно, в скрипте, который осуществляет поиск по базе, мне приходилось пользоваться iconv(), чтобы UTF-8, которые скрипт передает по умолчанию, перекодировать в 1251 и делать запрос правильно.

  Ответить  
 
 автор: Silentium   (04.06.2009 в 16:15)   письмо автору
 
   для: aexb   (04.06.2009 в 15:53)
 

спасибо, счас буду разбираться

  Ответить  
 
 автор: Silentium   (19.06.2009 в 18:07)   письмо автору
 
   для: aexb   (04.06.2009 в 15:53)
 

Хотел бы воскресить данную тему!!

Воспользовался скриптом автозаполнения как на сайте
http://www.linkexchanger.su/2008/39.html
html - файл


<script type="text/javascript">
$(document).ready(function(){
 // --- Автозаполнение1 ---
$("#otkuda").autocomplete("form_complete.php", {
    delay:10,
    minChars:1,
    matchSubset:1,
    autoFill:true,
    matchContains:1,
    cacheLength:10,
    selectFirst:true,
    formatItem:liFormat,
    maxItemsToShow:10,

});
// --- Автозаполнение1 ---
  // --- Автозаполнение2 ---
$("#kuda").autocomplete("form_complete.php", {
    delay:10,
    minChars:1,
    matchSubset:1,
    autoFill:true,
    matchContains:1,
    cacheLength:10,
    selectFirst:true,
    formatItem:liFormat,
    maxItemsToShow:10,

});


php - файл

header('Content-Type: text/html; charset=utf-8');
 if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
  if($_GET['q']){
  
    $q=$_GET[q];
    $r=mysql(DBName,"select np.NAME_NP as 'city', cou.NAME_COUNTRY as 'strana', reg.NAME_REGION as 'obl' FROM base.np np LEFT JOIN base.country cou ON (cou.ID_COUNTRY=np.ID_COUNTRY) LEFT JOIN base.region reg ON (reg.ID_REGION=np.ID_REGION) WHERE np.NAME_NP LIKE '%".$q."%' ORDER BY np.NAME_NP ");
    for($i=0; $i<mysql_numrows($r); $i++)
    {
        while ($row=mysql_fetch_array($r)) {

     echo iconv("windows-1251","utf-8",$row['city'])."|".iconv("windows-1251","utf-8",$row['strana'])."|".iconv("windows-1251","utf-8",$row['obl'])."\n";
     }
    }
     }
     }



ПРОБЛЕМА 1-в том что данный скрипт работает только если я присваиваю переменной $q="<символ>", т.е если $q=$_GET[q]; ничо не работает
ПРОБЛЕМА2- Не работает в IE, т.е только в FF и Опера запускается скрипт

Если кто из знатоков посоветует чонить дельное или подскажет решение буду очень признателен???

  Ответить  
 
 автор: Николай2357   (19.06.2009 в 21:07)   письмо автору
 
   для: Silentium   (19.06.2009 в 18:07)
 

Такой нужно?

  Ответить  
 
 автор: Bogivan   (19.06.2009 в 23:27)
 
   для: Silentium   (19.06.2009 в 18:07)
 

Так вам нужно автозаполнение или связные списки?

  Ответить  
 
 автор: Silentium   (22.06.2009 в 08:27)   письмо автору
 
   для: Bogivan   (19.06.2009 в 23:27)
 

Мне нужно как раз автозаполнение, но как был прав последний постующий видимо дело в кодировке

  Ответить  
 
 автор: mihdan   (21.06.2009 в 02:41)   письмо автору
 
   для: Silentium   (19.06.2009 в 18:07)
 

Разберитесь наконец с кодировками

  Ответить  
 
 автор: Silentium   (22.06.2009 в 08:31)   письмо автору
 
   для: mihdan   (21.06.2009 в 02:41)
 

С эксплорером вроде тож разобрался, единственное что не работает почемуто конструкция
 $("#example1","#example2","#example3",..."#exampleN").autocomplete("autocomplete.php", {


т.е приходится дублировать весь блок

$("#example2").autocomplete("autocomplete.php", {
    delay:10,
    minChars:2,
    matchSubset:1,
    autoFill:true,
    matchContains:1,
    cacheLength:10,
    selectFirst:true,
    formatItem:liFormat,
    maxItemsToShow:10,
    onItemSelect:selectItem
  }); 


для каждого инпута, но это неочень удобно!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования