Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > PHP+MySQL+AJAX


Автор: NEDI 30.4.2006, 15:41
Я думаю, все понимают, что время WEB 2.0. уже пришло. Поэтому нижеприведенная инфа будет интересна многим.

У меня есть таблица в БД, допустим speciality. (специализация).  В ней 3 поля: первое quantity (auto_increment), второе speciality, третье surname. В столбце speciality допустим идут значения  сантехник, киповец, программер, строитель, мануальный терапевт и так далее. В столбце surnames – фамилии специалистов. Из базы  извлекаются все значения столбца speciality и преобразовываются  в  массив special[]. Результат передаётся в функцию show_listbox

Код

<?
include 'sql.php'; //тут подключаемся к БД
$result = mysql_query("SELECT speciality FROM specialities");
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$special[]="$row[0]";  
$num = mysql_num_rows($result);
}
mysql_free_result($result);


function show_listbox($i, $num, $special){
echo '<SELECT NAME="names">';
while  ($i < $num){
echo '<OPTION VALUE=" ';
echo $special[$i];
echo ' ">';
echo $special[$i];
echo '</OPTION>';
$i++;
}
echo "</select>";
}
show_listbox(0, $num, $special);
?>

На выходе имеем  листбокс, в котором на выбор предлагаются все специализации, начиная с выбранной точки отсчёта ($i).

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

Естественно было бы очень приятно, чтобы второй листбокс появлялся без перезагрузки страницы, т.е. используя технологию AJAX. В JS я абсолютный дуб/нуб smile , поэтому использую готовую библиотеку KA AJAX.
Там достаточно зарегистрировать PHP функцию, и повесить её на JS обработчик. Но 
МySQL функции напрочь отказываются работать. 

http://mail2dig.at.tut.by/INFA.zip есть вышеупомянутая библиотека с комментариями разработчика и примером использования и статья Криса Хэдлока, о MySQL и AJAX’e тоже с переводом и примерами.

Исчо адин вапрос: а целесообразно ли вообще использовать АЯКС в таких конструкциях?
Может на самом деле будет быстрее перезагрузить страницу? Итак, Ваши соображения господа программеры!

 






 

Автор: Mobius 1.5.2006, 10:55
мне вот надо реализовать такую же фичу, smile  реализации так и не нашел 

Автор: madFobos 2.5.2006, 23:26
Хм... Ну я реализовывал двойной список с помощью PEAR::HTML_QuickForm.
Вообще-то (я думаю в KE AJAX должно быть нечто подобное) нужно создать два массива, первый бедет как раз специальностями, а второй двумерным массивом вида:

 Array('spciallity1' => Array(<peoples array>), 'speciallity2' => Array(<peoples array>)),

Т.е. ключи первого массива - это есть ключи массивов с людьми (вроде понятно мысль изложил smile). Ну а с JS примерно так же (если руками). Создаешь два массива и потом на событие onChange делаешь обработку (в принципе ничего особо сложного, если доки по DOM почитать я думаю) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)