есть база данных со следующими таблицами и полями:
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) отправлять надо не название страны, а ее код.
2) Посмотри синтаксис пункта списка, обращая ОСОБОЕ внимание на атрибут value
3) открой для себя ДАО файрбага, который показывает что отправляется и получается. Вообще миним. знание дебага легко подсказало бы тебе, что у тебя не так.
4) отправлять надо не название страны, а ее код.
Спустя 3 часа, 9 секунд (4.08.2011 - 14:30) l@pteff написал(а):
Michael, переделал список:
Но цикл for не проходит и value=i везде, а нужно 1,2,3 и т д.
И ещё вопрос: корректно ли такое создание списка в принципе? (просто другого способа загрузить страны из базы в список пока не вижу)
<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
1) тегу <span> нечего делать внутри <select>
2) в value надо печатать значение столбца country_id, а не какую то $i
Спустя 16 минут, 3 секунды (4.08.2011 - 14:52) l@pteff написал(а):
А можно ли сделать чтобы этот список при загрузке страницы заполнялся значениями из базы, и при этом в каждом пункте value было разным?
собственно из-за этого все извраты со span, for и $i
собственно из-за этого все извраты со span, for и $i
Спустя 5 минут, 54 секунды (4.08.2011 - 14:58) Michael написал(а):
ну так а я о чем тебе говорю?
Формируешь список стран так: у option в value - айдишка страны, а текст - название страны. Соответственно эту айдишку аяксом и будешь слать на сервер для получения списков городов.
Формируешь список стран так: у option в value - айдишка страны, а текст - название страны. Соответственно эту айдишку аяксом и будешь слать на сервер для получения списков городов.
Спустя 5 минут, 51 секунда (4.08.2011 - 15:04) l@pteff написал(а):
спс, опробую
Спустя 19 часов, 5 минут, 50 секунд (5.08.2011 - 10:09) l@pteff написал(а):
разобрался со списками, остался вопрос по поводу параметров value возвращаемых пунктов списка городов:
В 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 написал(а):
всё работает, большое спасибо