powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / AJAX+PHP+MySQL
6 сообщений из 6, страница 1 из 1
AJAX+PHP+MySQL
    #33700147
NEDI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я думаю, все понимают, что время 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 я абсолютный дуб/нуб, поэтому использую готовую библиотеку KA AJAX.
Там достаточно зарегистрировать PHP функцию, и повесить её на JS обработчик. Но
МySQL функции напрочь отказываются работать.

Тут есть вышеупомянутая библиотека с комментариями разработчика и примером использования и статья Криса Хэдлока, о MySQL и AJAX’e тоже с переводом и примерами.

Исчо адин вапрос: а целесообразно ли вообще использовать АЯКС в таких конструкциях?
Может на самом деле будет быстрее перезагрузить страницу? Итак, Ваши соображения господа программеры!
...
Рейтинг: 0 / 0
AJAX+PHP+MySQL
    #33700220
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕстественно было бы очень приятно, чтобы второй листбокс появлялся без перезагрузки страницы, т.е. используя технологию AJAX. В JS я абсолютный дуб/нуб, поэтому использую готовую библиотеку KA AJAX.
Там достаточно зарегистрировать PHP функцию, и повесить её на JS обработчик. Но
МySQL функции напрочь отказываются работать.

Должно быть Вами не указан include 'sql.php'; //тут подключаемся к БД
в вызываемой функции...

ИМХО, время Веб2 уже пришло, поэтому вебпрограмист должен уверенно обладать jscript, хотя бы потому чтобы самому написать собственную ajax библиотеку, заточенную под свои нужды.
...
Рейтинг: 0 / 0
AJAX+PHP+MySQL
    #33700228
Фотография Robert Tappan Moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не большой вопросец по Вашему коду: неужели при проходе по набору записей функция mysql_num_rows() возврящает разные значения?
Ещё не понятно зачем вообще таскать с собой $num (в качестве размера массива $special), ведь размер массива можно узнать в любое время?
И уже совсем маленькая заметка вместо mysql_fetch_array($result, MYSQL_NUM) может стоит использовать mysql_fetch_row($result)? Ведь результат не меняется, а работает чуточку быстрее.
...
Рейтинг: 0 / 0
AJAX+PHP+MySQL
    #33700235
Фотография Robert Tappan Moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А выводить первый список можно и без явного перебора массива:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
function outputval($val) {
	echo "<OPTION VALUE=\"$val\">$val</OPTION>\n";
}
function outputselect($arr) {
	echo "<SELECT NAME=\"names\">";
	array_walk($arr,"outputval");
	echo "</SELECT>";
}
...
Рейтинг: 0 / 0
AJAX+PHP+MySQL
    #33700252
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Robert Tappan MorisА выводить первый список можно и без явного перебора массива:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
function outputval($val) {
	echo "<OPTION VALUE=\"$val\">$val</OPTION>\n";
}
function outputselect($arr) {
	echo "<SELECT NAME=\"names\">";
	array_walk($arr,"outputval");
	echo "</SELECT>";
}


Ну и какой результат: 2 функции, вместо одной, сущность которой есть вывод контрола. Тем более array_walk() как раз и выполняет перебор массива.

При чтении постов автора возникает ощущение, что он вместо конструктивных ответов на вопросы, постит свои собственные варианты исполнения кода, с целью накручивания счетчика постов. Даже не обращаю внимания на первоначальный вопрос нити форума
...
Рейтинг: 0 / 0
AJAX+PHP+MySQL
    #33700268
Фотография Robert Tappan Moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 def1983
я наверно Вас разочарую, но выше приведёные мои посты всего-лишь мысли по повуду кода тредстартера.

Ваше мнение - Ваше право.

2 NEDI
решение вашей проблемы, на мой взгляд, можно найти вынеся содержимое таблицы в виде массива в JS и генерации кода (HTML) для отображения соответствующих контролов.
А как продолжение этого варнианта можно при выборе пункта первого списка подгрузить (<script src="..."></script>) требуемые данные и выполнить JS код для отображения/обновления 2-го списка.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / AJAX+PHP+MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]