Создание списка

Chupa

Guest
Создание списка

Подскажите, пожалуйста, как реализовать такую штуку.
У меня есть список (select) городов, который выводится из таблицы БД типа
<select name=city>
<option value=$row['cityID']>$row['city']</option>
</select>
Далее у меня идет список, в котором должны отображаться экскурсии для данного города из общего списка экскурсий. Так проблема собственно в том, что не знаю как сделать, чтоб при различном выборе города, отображались различные экскурсии. А если быть точнее, то охота сделать так, чтоб это все происходило без обновления страницы. Наверное надо JS? А как JS работает с БД (90% уверен, что никак)? Или этот вопрос не в этот форум?
 

Demiurg

Guest
js с бд никак не работает.
все данные о всех экскурсиях заранее передаются в js. Т.е. получается давольно толстая страница и стоит подумать действительно ли делать без перегрузки выгодно.
 

Chupa

Guest
Данных там передается не так уж и много. Около 40-50 записей. Может выводить брать базы весь список, а потом уже JS смотреть подходит эта экскурсия или нет...
 

sergadm

Новичок
в принципе можно сделать iframe и или фрейм и через него выполнять подгрузку необходимых данных
 

Chupa

Guest
У меня и так есть фрейм слева-навигация, так что еще один не подойдет. Ну так что? Нет никаких вариантов? Для этой цели лучше, наверное, использоваь java.
 

Demiurg

Guest
не надо ни фреймов ни явы.
ты же сам сказал, вытаскивать весь список, потом яваскриптом проверять. Можешь поискать готовые скрипты их давольно много.
 

Chupa

Guest
Я то сказал, а вот как сделать незнаю. Может подскажите.
 

crocodile2u

http://vbolshov.org.ru
Если список городов невелик, можно сделать так (без всякого JS):
таблица
строка

радиобаттон (name=city value=cityID)
имя города
селект с экскурсиями для этого города

/строка
...
/таблица

Пользователь радибаттоном выбирает город, и для этого города выбирает в селекте экскурсию.
 

Chupa

Guest
Нет, это не подойдет. Так как на страницу выводиться много строк, в каждой из которых есть список городов и список экскурсий.
 

crocodile2u

http://vbolshov.org.ru
Тогда смотри PEAR::HTML_QuickForm - там есть реализация для такого "двойного" селекта - скорее всего, тебе нужно будет только JS-код оттуда взять. Я бы мог тебе скинуть свой собственный вариант, но он давнишний и мне он был нужен только под IE - тебе вряд ли подойдет.
 

virakochi

Устал
По идее тебе нужно при изменении одного селекта заново строить другой.
То есть что-то такое:
Удаление опции:
selectName.options = null;

Создание новой:
opt = new Option(текст, значение);
selectName.options=opt;

Где текст-значение сидят и ждут своей очереди со времени загрузки...
 

Chupa

Guest
crocodile2u, скинь плиз на [email protected] - я посмотрю.
virakochi, а поподробнее немножко можно. Допустим, у меня есть только один селект сгородами. Когда я выбираю город - справа появляется новый список с экскурсиями. Так можно сделать?

-~{}~ 07.07.04 22:06:

Скажите, пожалуйста, как мне связать переменну JS и переменну PHP? У меня есть такой код:

function newOpt(){
cityID = document.add.begin_city.options[document.add.begin_city.selectedIndex].value;
<? $num_excursions=mysql_num_rows(mysql_query("SELECT * FROM $mysql_table_excursii WHERE cityID=здесь должнабыть JS переменная"));?>
for(var i=0;i< <?=$num_excursions;?>;i++){
opt = new Option(i, 1);
document.add.selection.options=opt;
}
}
 

virakochi

Устал
Chupa
На ohChange первого селекта вешаешь удаление старого второго списка + создание нового, инфа для которого выбирается в зависимости от выбранного элемента первого списка.
 

crocodile2u

http://vbolshov.org.ru
Originally posted by Chupa
Скажите, пожалуйста, как мне связать переменну JS и переменну PHP? У меня есть такой код:
убей этот код и больше его не реанимируй. увидит Фанат - туго тебе будет...
 

voland

Guest
Аа.. счастье твое :))

PHP:
<script type="text/javascript">
<!--
// далее у нас следует массив из улиц, содержащих дома, разделённые запятой
var aHouseValues = new Array(
"12/15,18,123",
"2,4",
"2/8,10/12",
"3",
"2,4,12,5/6,8"
);

// ф-ция, возвращающая массив домов по заданной улице
function getHouseValuesByStreet(index){
    var sHouseValues = aHouseValues[index];
    return sHouseValues.split(","); // преобразуем строку в массив домов
}

// главная ф-ция, выводящая динамически список домов
function MkHouseValues(index){
    var aCurrHouseValues = getHouseValuesByStreet(index);
    var nCurrHouseValuesCnt = aCurrHouseValues.length;
    var oHouseList = document.forms["address"].elements["house"];
    var oHouseListOptionsCnt = oHouseList.options.length;
    oHouseList.length = 0; // удаляем все элементы из списка домов
    for (i = 0; i < nCurrHouseValuesCnt; i++){
        // далее мы добавляем необходимые дома в список
        if (document.createElement){
            var newHouseListOption = document.createElement("OPTION");
            newHouseListOption.text = aCurrHouseValues[i];
            newHouseListOption.value = aCurrHouseValues[i];
            // тут мы используем для добавления элемента либо метод IE, либо DOM, которые, alas, не совпадают по параметрам…
            (oHouseList.options.add) ? oHouseList.options.add(newHouseListOption) : oHouseList.add(newHouseListOption, null);
        }else{
            // для NN3.x-4.x
            oHouseList.options[i] = new Option(aCurrHouseValues[i], aCurrHouseValues[i], false, false);
        }
    }
}

// инициируем изменение элементов в списке домов, в зависимости от текущей улицы
MkHouseValues(document.forms["address"].elements["house"].selectedIndex);
//-->
</script>
фОРМА
PHP:
<form name="address" action="#">
Улица:
<select name="street" onChange="MkHouseValues(this.selectedIndex)">
<option value="ул. Хрюнделя">ул.&nbsp;Хрюнделя</option>
<option value="пер. Неизвестного">пер.&nbsp;Неизвестного</option>
<option value="ул. Оттопыркина">ул.&nbsp;Оттопыркина</option>
<option value="ул. Мир-Труд-Май">ул.&nbsp;Мир-Труд-Май</option>
<option value="бул. Нихренасебефамилия">бул.&nbsp;Нихренасебефамилия</option>
</select>
&nbsp;Дом:
<select name="house">
<option value="N/A">N/A</option>
</select>
</form>
 

Chupa

Guest
voland, так получается, что у тебя первой записи в <option> соответствует первый элемент масссива, что не есть хорошо.
 

voland

Guest
что у тебя первой записи в <option> соответствует первый элемент масссива
А как ты ещё хотел? Надо ведь для начала что-то прогрузить. Потом он будет соответствовать тому который выберешь...
З.Ы. А ты что хочешь? Я чё то не пойму...
 

Chupa

Guest
voland, у тебя есть конкретная привязка: первая улица - первый элемент массива. Мне то нужно немножко не-то...
 
Сверху