Снова динамический select
Привет всем!Сразу извиняюсь если ошибся разделом, просто не до конца понял в чём ошибка в скриптах:или в запросе к базе, или в JS.
Проблема в следущем:Имеется банальный селект Страна-Город.Куда-то теряется первый элемент в каждом массиве.К примеру если выбираешь в первом селекте Казахстан, то нет в списке опшенов второго селекта города Астана,если выбрать Россию, то нет во втором списке города Ижевск, а если выбрать Польшу, то вообще ничего нет, так как в списке городов только один польский город - Варшава. Вот index:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="selects.js"></script>
</head>
<body>
<form action="#" method="get">
<p>Страна</p>
<select name="country_id" id="country_id">
<option value="0">- выберите страну -</option>
<option value="1">Казахстан</option>
<option value="2">Россия</option>
<option value="3">Польша</option>
</select>
<p>Регион:</p>
<select name="region_id" id="region_id" disabled="disabled">
<option value="0"> </option>
</select>
</form>
</body>
</html>
Вот get_regions:
<?php
$db = mysql_connect ("localhost","alex","12345");
mysql_select_db("optoviki",$db);
mysql_set_charset('utf8');
$country_id = @intval($_GET['country_id']);
$result2 = mysql_query ("SELECT `id`,`title` FROM `gorod` WHERE `id_strana` = $country_id",$db);
$myrow2 = mysql_fetch_array($result2);
$regions = array();
while($myrow2=mysql_fetch_array($result2)) {
$regions[] = $myrow2;
}
$result = array('type'=>'success','regions'=>$regions);
/*
* Упаковываем данные с помощью JSON
*/
print json_encode($result);
?>
Вот selects.js:
$(document).ready(function () {
$('#country_id').change(function () {
var country_id = $(this).val();
if (country_id == '0') {
$('#region_id').html('');
$('#region_id').attr('disabled', true);
return(false);
}
$('#region_id').attr('disabled', true);
$('#region_id').html('<option>загрузка...</option>');
var url = 'get_regions.php';
$.get(
url,
"country_id=" + country_id,
function (result) {
if (result.type == 'error') {
alert('error');
return(false);
}
else {
var options = '';
$(result.regions).each(function() {
options += '<option value="' + $(this).attr('id') + '">' + $(this).attr('title') + '</option>';
});
$('#region_id').html(options);
$('#region_id').attr('disabled', false);
}
},
"json"
);
});
});
Плюс ко всему тут же в корне лежит Jquery.js. Вопрос:кто-нибудь может подсказать куда теряется первый элемент массива? |
Вот таблица gorod в базе:
-- phpMyAdmin SQL Dump -- version 2.6.1 -- [url]http://www.phpmyadmin.net[/url] -- -- Хост: localhost -- Время создания: Ноя 18 2010 г., 10:09 -- Версия сервера: 5.0.45 -- Версия PHP: 5.2.4 -- -- БД: `optoviki` -- -- -------------------------------------------------------- -- -- Структура таблицы `gorod` -- CREATE TABLE `gorod` ( `id` int(5) NOT NULL AUTO_INCREMENT, `id_strana` int(3) NOT NULL, `title` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=24 ; -- -- Дамп данных таблицы `gorod` -- INSERT INTO `gorod` VALUES (1, 1, 'Астана'); INSERT INTO `gorod` VALUES (2, 1, 'Алматы'); INSERT INTO `gorod` VALUES (3, 1, 'Шымкент'); INSERT INTO `gorod` VALUES (4, 1, 'Семей'); INSERT INTO `gorod` VALUES (5, 2, 'Ижевск'); INSERT INTO `gorod` VALUES (6, 2, 'Екатеринбург'); INSERT INTO `gorod` VALUES (7, 2, 'Ковров'); INSERT INTO `gorod` VALUES (8, 3, 'Варшава'); INSERT INTO `gorod` VALUES (9, 1, 'Тараз'); INSERT INTO `gorod` VALUES (22, 1, 'Рудный'); INSERT INTO `gorod` VALUES (21, 2, 'Санкт-Петербург'); INSERT INTO `gorod` VALUES (20, 2, 'Москва'); INSERT INTO `gorod` VALUES (23, 1, 'Костанай'); |
ошиблись форумом?
у вас явная ошибка в PHP-коде
$result2 = mysql_query ("SELECT `id`,`title` FROM `gorod` WHERE `id_strana` = $country_id",$db);
$myrow2 = mysql_fetch_array($result2); // $myrow2 - никуда не передается
$regions = array();
while($myrow2=mysql_fetch_array($result2)) {// предыдущее значение $myrow2 безвозратно теряется
$regions[] = $myrow2;
}
на будущее: поставьте себе фаербаг он позволяет видеть JS-ошибки, и отлаживать его код. заодно можно видеть все AJAX-запросы и результаты в чистом виде. и вы бы увидели, что именно сервер присылает код без первого города. |
Спасибо большое, теперь буду знать.Я просто не так давно начал изучать веб-программирование, поэтому прошу меня строго не судить.:)
А не подскажете как переделать код так, чтобы передавалось с первым пунктом, а то я что-то не догоняю?:help: Ааааааааа, понял, сделал так:
$regions = array();
do{
$regions[] = $myrow2;
}
while ($myrow2 = mysql_fetch_array($result2));
$result = array('type'=>'success','regions'=>$regions);
|
вы бы справку открыли.
там прямо в описании mysql_fetch_array даны примеры:
$result = mysql_query("SELECT id, name FROM mytable");
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
printf ("ID: %s Name: %s", $row[0], $row[1]);
}
PS пробуйте прежде чем задавать появляющиеся вопросы, решить их самостоятельно. стыдно задавать вопрос, если вы сами же смогли решить его через 4 минуты. и, да: на форуме можно редактировать сообщения. незачем писать подряд несколько сообщений.достаточно отредактировать последнее |
| Часовой пояс GMT +3, время: 16:35. |