• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Ajax+php+mysql

  • Автор темы DiG
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

DiG

Я думаю, все понимают, что время 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 тоже с переводом и примерами.

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

s10

а можно уточнить что находится в таблице speciality.
если там чисто фамилии и специализации ,и они там не уникальные ,то на выходе, в массиве special[], получится полный бред :
special[1] - программист
special[2] - программист
special[3] - терапевт
special[4] - сиделка
...
special[n] - терапевт

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

второе :
<!--QuoteBegin-DiG+1:05:2006, 10:10 -->
<span class="vbquote">(DiG @ 1:05:2006, 10:10 )</span><!--QuoteEBegin-->Мне нужно, чтобы при выборе специальности появлялся второй листбокс, в котором было бы предложено выбрать фамилию специалиста, из существующего списка.
[snapback]34661" rel="nofollow" target="_blank[/snapback]​
[/quote]

из существующего списка? какого списка? с фамилиями? откуда он взялся?

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

Gisma

да именно так он и хочет
Вообще по AJAX и не работающим функциям смотри сам где допустил ошибку, потому что из переданной тобой информации я (лично) не могу судить откуда у проблемы ростут рога. Вряд ли это из-за AJAX библиотеки, т.к. :
1. о такой проблеме слышу впервые;
2 если бы (!!!) эта библиотека убивал MySQL функции, то ее бы сам разработчик утопил бы :unsure:
По использованию AJAX в таких приложениях. Принципиально это и есть одна из задача аякса, вот такие маааленькие фентифлюшки их использование делает страницу удобной, это тоже самое как тостер и сковородка и там и там сделаешь тост, но в первом варианте приятней выходит. Так что думай сам, если это место стоит того чтобы туда вставить AJAX то делай, если заказчику этот момент пофигу а время поджимает, то ессно не делай тогда лишних вставок кода.
 
D

DiG

2 s10 при выборке из базы достаточно использовать использовать distinct и в листбоксе у меня будут только уникальные. Уже сделано и проверено.
2 Gisma
C AJAX'ом тоже разобрался. Просто проинклудил функцию соединения с базой в самой библиотеке, а не там, где она мне была нужна. Всё работатет.
З.Ы. А ты откуда? (город)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!