[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Связанные списки
l@pteff
всем привет, помогите разобраться в такой ситуации:

есть база данных со следующими таблицами и полями:
countries (country_id, country_name),

1, Россия
2, Украина
3, Беларусь

cities (city_id, country_id, city_name).

1, 1, Город_России_1
2, 1, Город_России_2
3, 1, Город_России_3
4, 2, Город_Украины_1
5, 2, Город_Украины_2
6, 2, Город_Украины_3
7, 3, Город Беларуси_1
8, 3, Город Беларуси_2
9, 3, Город Беларуси_3


делаю динамически связанные выпадающие списки (изменяющиеся по связям через id в БД)
страница со списками:

<form action="../php/load_spisok.php" method="post">
Страна<br>
<select
name="country_id" id="country_id">
<option>
- не выбран -</option>
<span
id="bd_countries">
<script
language="php">
mysql_select_db ( 'my_database' ) or die ('Невозможно открыть $db');
$query=mysql_query("SELECT * FROM countries");
while ($row=mysql_fetch_assoc($query)) {
echo '<option>'.$row['country_name'].'</option>';
}
</script>
</span>
</select>


Город:<br>
<select
name="city_id" id="city_id">
<option>
- не выбран -</option>
<span
id="bd_cities">
<script
language="php">
mysql_select_db ( 'my_database' ) or die ('Невозможно открыть $db');
$query=mysql_query("SELECT * FROM cities");
while ($row=mysql_fetch_assoc($query)) {
echo '<option>'.$row['city_name'].'</option>';
}
</script>
</span>
</select>
</form>



При выборе любого значения из списка стран - в дочернем списке городов должны выбираться соответствующие элементы (по связям через id)


$('#country_id').live('change', function() {
var znach_country=$(this).val();

if (znach_country !== '- не выбран -') {
$.ajax ({
type: "POST",
url: '../php/load_spisok.php',
data: {country_id:znach_country},
cache: false,
success: function(data_cities) {
$('#city_id option:eq(1)').html(data_cities);
}
}
);
}

}
);


Обработчик "load_spisok.php"

$znach_country=$_POST['znach_country'];
$query=mysql_query("SELECT countries.country_id, countries.country_name, cities.city_id, cities.city_name FROM countries LEFT JOIN cities ON cities.city_id=countries.country_id WHERE countries.country_name='znach_country'");
while ($row=mysql_fetch_assoc($query)) {
echo '<option>'.$row['city_name'].'</option>';
}

В список с городами возвращается пустой <option>
Если же в условии запроса вместо WHERE countries.country_name='znach_country'
прописать, например WHERE countries.country_name='Россия' то вернёт только
<option>Город_России_1 </option>, вместо трех.



Спустя 11 часов, 23 минуты, 43 секунды (4.08.2011 - 10:14) l@pteff написал(а):
посмотрите плиз

Спустя 1 час, 15 минут, 46 секунд (4.08.2011 - 11:29) Michael написал(а):
1) посмотри, синтаксис html списка и найди отличия от своего
2) Посмотри синтаксис пункта списка, обращая ОСОБОЕ внимание на атрибут value
3) открой для себя ДАО файрбага, который показывает что отправляется и получается. Вообще миним. знание дебага легко подсказало бы тебе, что у тебя не так.
4) отправлять надо не название страны, а ее код.

Спустя 3 часа, 9 секунд (4.08.2011 - 14:30) l@pteff написал(а):
Michael, переделал список:

<select name="country_id" id="country_id">
<option
value="0">- не выбран -</option>
<span
id="bd_countries">
<script
language="php">
mysql_select_db ( 'my_database' ) or die ('Невозможно открыть $db');
$query=mysql_query("SELECT * FROM countries");
$result=mysql_num_rows($query);

for ($i=1; $i<$result; $i++) {
while ($row=mysql_fetch_assoc($query)) {
echo '<option value="$i">'.$row['country_name'].'</option>';
}
}

</script>
</span>
</select>


Но цикл for не проходит и value=i везде, а нужно 1,2,3 и т д.
И ещё вопрос: корректно ли такое создание списка в принципе? (просто другого способа загрузить страны из базы в список пока не вижу)

Спустя 6 минут, 14 секунд (4.08.2011 - 14:36) Michael написал(а):
ёпрст...

1) тегу <span> нечего делать внутри <select>

2) в value надо печатать значение столбца country_id, а не какую то $i

Спустя 16 минут, 3 секунды (4.08.2011 - 14:52) l@pteff написал(а):
А можно ли сделать чтобы этот список при загрузке страницы заполнялся значениями из базы, и при этом в каждом пункте value было разным?
собственно из-за этого все извраты со span, for и $i

Спустя 5 минут, 54 секунды (4.08.2011 - 14:58) Michael написал(а):
ну так а я о чем тебе говорю?

Формируешь список стран так: у option в value - айдишка страны, а текст - название страны. Соответственно эту айдишку аяксом и будешь слать на сервер для получения списков городов.

Спустя 5 минут, 51 секунда (4.08.2011 - 15:04) l@pteff написал(а):
спс, опробую

Спустя 19 часов, 5 минут, 50 секунд (5.08.2011 - 10:09) l@pteff написал(а):
разобрался со списками, остался вопрос по поводу параметров value возвращаемых пунктов списка городов:

$znach_country=$_POST['znach_country'];
mysql_select_db ( 'my_database' ) or die ('Невозможно открыть $db');

foreach ($_POST as $key=>$value)
$query=mysql_query("SELECT countries.country_id, countries.country_name, cities.city_id, cities.country_id, cities.city_name FROM countries LEFT JOIN cities ON countries.country_id=cities.country_id WHERE countries.country_id='$value'");
$result=mysql_num_rows($query);
while ($row=mysql_fetch_assoc($query)) {
echo '<option value="$row['city_id']">'.$row['city_name'].'</option>';
}

В value не проставляется айдишка города, вместо нужного:
Цитата

<option value="1">Город_1</option>
<option value="2">Город_2</option>
<option value="3">Город_3</option>

возвращается просто:
Цитата

<option value="$row['city_id']">Город_1</option>
<option value="$row['city_id']">Город_2</option>
<option value="$row['city_id']">Город_3</option>

Как можно это исправить? заранее благодарю

Спустя 25 минут, 13 секунд (5.08.2011 - 10:35) Michael написал(а):
Вместо ошибочного:
'<option value="$row['city_id']">'

надо:
'<option value="' . $row['city_id'] . '">'


подстановка переменных идет только в строки, обрамленные двойными кавычками.

Спустя 10 минут, 21 секунда (5.08.2011 - 10:45) l@pteff написал(а):
всё работает, большое спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.