Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Снова динамический select (https://javascript.ru/forum/dom-window/13190-snova-dinamicheskijj-select.html)

Lion_astana 19.11.2010 11:04

Снова динамический 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">&nbsp;</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.

Вопрос:кто-нибудь может подсказать куда теряется первый элемент массива?

Lion_astana 19.11.2010 11:07

Вот таблица 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, 'Костанай');

Gvozd 19.11.2010 11:20

ошиблись форумом?
у вас явная ошибка в 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-запросы и результаты в чистом виде.
и вы бы увидели, что именно сервер присылает код без первого города.

Lion_astana 19.11.2010 11:26

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


А не подскажете как переделать код так, чтобы передавалось с первым пунктом, а то я что-то не догоняю?:help:


Ааааааааа, понял, сделал так:
$regions = array();
do{
  $regions[] = $myrow2;
 }
 while ($myrow2 = mysql_fetch_array($result2)); 
 
$result = array('type'=>'success','regions'=>$regions);

Gvozd 19.11.2010 11:48

вы бы справку открыли.
там прямо в описании 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, время: 06:59.