Снова динамический 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, время: 05:37. |