
19.11.2010, 11:04
|
|
Аспирант
|
|
Регистрация: 19.11.2010
Сообщений: 48
|
|
|
Снова динамический 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.
Вопрос:кто-нибудь может подсказать куда теряется первый элемент массива?
|
|

19.11.2010, 11:07
|
|
Аспирант
|
|
Регистрация: 19.11.2010
Сообщений: 48
|
|
Вот таблица 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, 'Костанай');
|
|

19.11.2010, 11:20
|
 |
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
ошиблись форумом?
у вас явная ошибка в 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-запросы и результаты в чистом виде.
и вы бы увидели, что именно сервер присылает код без первого города.
|
|

19.11.2010, 11:26
|
|
Аспирант
|
|
Регистрация: 19.11.2010
Сообщений: 48
|
|
Спасибо большое, теперь буду знать.Я просто не так давно начал изучать веб-программирование, поэтому прошу меня строго не судить.
А не подскажете как переделать код так, чтобы передавалось с первым пунктом, а то я что-то не догоняю?
Ааааааааа, понял, сделал так:
$regions = array();
do{
$regions[] = $myrow2;
}
while ($myrow2 = mysql_fetch_array($result2));
$result = array('type'=>'success','regions'=>$regions);
Последний раз редактировалось Gvozd, 19.11.2010 в 11:51.
Причина: объеденил поток мыслей
|
|

19.11.2010, 11:48
|
 |
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
вы бы справку открыли.
там прямо в описании 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 минуты.
и, да: на форуме можно редактировать сообщения. незачем писать подряд несколько сообщений.достаточно отредактировать последнее
Последний раз редактировалось Gvozd, 19.11.2010 в 11:50.
|
|
|
|