есть вот такая проблемма. может кто сможет помочь.
у меня в форме поиска есть селекты которые выбирают из базы страну, регион подсаживается в зависимости от страны, и город привязан к региону... короче все как обычно
все три переменные передаются методом get (country=4®ion=19&city=166)
задача что бы при существовании переменных в строке, соответствующие страна, регнион и город подсаживались в селект...
со страной я решил эту проблемму (if($country == $row['country_id']) $temp = ' selected'; else $temp = null;), а с городом и регионом так не получаеться, скорее всего что селекты изначально не доступены пока не выбирешь страну...
я напишу весь код для страны и ргиона, если у кого есть такой опыт, подскажите как сделать... и можно ли вообще.
<?php
<!-- Select для страны -->
<select name="country" onChange="onChange(this,'1');document.getElementById('region').disabled=''; document.getElementById('city').innerHTML='';" class="input_city">
<option value='0'>- Выберите страну -</option>
<?php
function sel_country($a)
{
$b = isset($_POST['country'])?$_POST['country']:NULL;
if($a == $b) {
return 'selected="selected"';
}}
switch ($_SESSION['lang']) {
case '1' :
$query_country = "SELECT country_id,country_rus as name FROM country";
break ;
}
$res = mysql_query($query_country, $site) or die(mysql_error());
// выводим все строки из столбца name таблицы country
while($row = mysql_fetch_array($res)) {
if($country == $row['country_id']) $temp = ' selected'; else $temp = null;
echo "<option ".sel_country($row['country_id'])." value='".$row['country_id']."'".$temp.">" . $row['name'] . "</option>";
}
mysql_free_result($res);
?>
</select>
<!-- Select для региона -->
<select name="region" id="region" <?$_POST['country']?'':'disabled="disabled"')?> onChange="onChange(this,'2');document.getElementById('city').disabled='';" class="input_city" />
<option value='0'>- Выберите регион -</option>
<?php
function sel_region($a)
{
$b = isset($_POST['region'])?$_POST['region']:NULL;
if($a == $b) {
$_SESSION['recoun']='poi' ;
return 'selected="selected"';
}
}
if(isset($_POST['country']))
{
switch ($_SESSION['lang']) {
case '1' :
$query = "SELECT region_id,region_rus as name FROM `region` WHERE `country_id`='".(int)$_POST['country']."'";
break ;
}
$res = mysql_query($query);
while($row = mysql_fetch_array($res))
{
if($region == $row['region_id']) $temp_r = ' selected'; else $temp_r = null;
echo "<option ".sel_region($row['region_id'])." value='" . $row['region_id'] . "'".$temp_r.">" . $row['name'] . "</option>";
}
mysql_free_result($res);
}
?>
нужна помошь...
10 августа 2010, 11:41
Автор: serj011
|
NO USERPIC
|
serj011неужели никто не знает? |
11.08.2010, 11:51 Ответить |
|
1234ruОдин из самых простых путей таков: на селект со страной повесить событие onchange, которое обращается по AJAX к серверу и забирает HTML-код для селекта регионов данной (выбранной) страны и вставляет его в соответствующее место страницы.Аналогичное сделать для регионов - чтобы забирались города. То, что не убивает нас, делает нас инвалидами.
|
11.08.2010, 20:53 Ответить |
|
NO USERPIC
|
serj0111234ru, насколько я понимаю, то событие onchange уже весит на стране. может подробнее кто поскажит, как имеено сделать... |
12.08.2010, 11:26 Ответить |
|
1234ru<select id="countries"> <!-- тут перечень стран --> </select> <select id="regions"></select> <select id="cities"></select> <!-- подключаем библиотеку jQuery --> <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script> <script type="text/javascript"> // прикрпеляем к списку стран событие при изменении $('#countries').change(function() { // получим id выбранной в данный момент страны var country_id = $(this).val(); // теперь будем по AJAX обращаться к скрипту, // который нам отдаст HTML-код списка регионов // для выбранной страны // пусть скрипт имеет адрес getregions.php // и принимает id страны $.get( '/getregions.php?country_id=' + country_id', // адрес AJAX-запроса function(data) { // функция, которая обрабатывает ответ // data - это строка, приходящая с сервера в ответ // в ней должен содержаться HTML-код списка // берем его и вставляем в нужное место $('#regions').html(data); } ); // важно также, что, т.к. при изменении выбора страны // выбранный регион сбрасывается, // список городов нужно аннулировать // иначе останутся висеть города, // не относящиеся к данной стране $('#cities').html(''); // "сбросили" города } </script> На сервере в getregions.php отдаете HTML-код списка регионов для соответсвующей страны в виде <option value="..">...</option> <option value="..">...</option> ... <?php if (isset($_GET['country_id'])) $country_id = intval($_GET['country_id']); else exit; # устанавливаем соединение с MySQL // понятно, что у Вас названия могут отличаться $sql = " SELECT region_id AS value, region_name AS title FROM regions WHERE country_id = $country_id "; $result = mysql_query($sql) OR die(mysql_error()); $html = ''; while ($row = mysql_fetch_assoc($result)) { $html .= "<option value=\"$row[value]\">$row[title]</option>\n"; } echo $html; exit; ?> Аналогично для городов - уже берете значение из списка регионов и используете его для построения списка городов. Аннулировать список городов (как это делалось при выборе стран) в этом случае не нужно, т.к. он у Вас сам автоматичеки перестроится. P.S. При оформлении кода стоит пользоваться подсветкой синтаксиса (см. Syntax - самую крайнюю кнопку над формой ответа) То, что не убивает нас, делает нас инвалидами.
|
12.08.2010, 19:19 Ответить |
|
NO USERPIC
|
serj0111234ru, спасибо за развернутый ответ, но мне к сожалению это мало чем поможет... у меня знаний мало, а тут и ajax и java и php :) все намешано... сам не сделаю наверное... я понимаю что просить доработать мой код бесплатно не корректно, у меня вопрос - не могли бы вы за небольшое вознагрождение wm доработать его? и сколько? |
12.08.2010, 22:14 Ответить |
|
1234ruЕсли Вы сами написали то, что приводится в головном сообщении - думаю, справитесь и с этим.Если не справитесь - поищите кого-нибудь в местах типа freelance.ru То, что не убивает нас, делает нас инвалидами.
|
14.08.2010, 21:43 Ответить |
|
NO USERPIC
|
haushkaНе подскажите где косяк второй список не хочет открыватьсяindex.php <script type="text/javascript" src="jquery-1.4.2.js"></script> <select id="countries"> <?php require_once("../config.php"); $sql=mysql_query("SELECT id_kafedra,name FROM kafedra"); ?> <option value="0" selected>Выберите...</option> <?php while ($ctg = mysql_fetch_array($sql)) { echo '<option value="'.$ctg['id_kafedra'].'">'.$ctg['name'].'</option>'."\n"; } ?> </select> <select id="regions"></select> <select id="cities"></select> <script type="text/javascript"> // прикрпеляем к списку стран событие при изменении $('#countries').change(function() { // получим id выбранной в данный момент страны var country_id = $(this).val(); // теперь будем по AJAX обращаться к скрипту, // который нам отдаст HTML-код списка регионов // для выбранной страны // пусть скрипт имеет адрес getregions.php // и принимает id страны $.get( '/getregions.php?country_id=' + country_id', // адрес AJAX-запроса function(data) { // функция, которая обрабатывает ответ // data - это строка, приходящая с сервера в ответ // в ней должен содержаться HTML-код списка // берем его и вставляем в нужное место $('#regions').html(data); } ); // важно также, что, т.к. при изменении выбора страны // выбранный регион сбрасывается, // список городов нужно аннулировать // иначе останутся висеть города, // не относящиеся к данной стране $('#cities').html(''); // "сбросили" города } </script> getregions.php <?php if (isset($_GET['country_id'])) $country_id = intval($_GET['country_id']); else exit; # устанавливаем соединение с MySQL require_once("../config.php"); // понятно, что у Вас названия могут отличаться $sql = "SELECT id_distip,name FROM distip WHERE id_kafedra =".$country_id."; $result = mysql_query($sql) OR die(mysql_error()); $html = ''; while ($row = mysql_fetch_assoc($result)) { $html .= "<option value=\"$row[id_distip]\">$row[name]</option>\n"; } echo $html; exit; ?> И как с третьим списком быть не догоняю? CREATE TABLE IF NOT EXISTS `kafedra` ( `id_kafedra` int( 10 ) unsigned NOT NULL AUTO_INCREMENT , `name` text NOT NULL , `fullname` tinytext NOT NULL , `hide` enum( 'show', 'hide' ) NOT NULL DEFAULT 'show', PRIMARY KEY ( `id_kafedra` ) ) ENGINE = INNODB DEFAULT CHARSET = cp1251 AUTO_INCREMENT =0; CREATE TABLE IF NOT EXISTS `distip` ( `id_distip` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` text NOT NULL, `fullname` tinytext NOT NULL, `hide` enum('show','hide') NOT NULL DEFAULT 'show', `id_kafedra` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id_distip`), KEY `id_kafedra` (`id_kafedra`) ) ENGINE=INNODB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ; CREATE TABLE IF NOT EXISTS `tema` (
`id_tema` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` text NOT NULL, `fullname` tinytext NOT NULL, `pos` text NOT NULL, `hide` enum('show','hide') NOT NULL DEFAULT 'show', `id_distip` int(10) unsigned NOT NULL DEFAULT '0', `id_kafedra` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id_tema`), KEY `id_distip` (`id_distip`), KEY `id_kafedra` (`id_kafedra`) ) ENGINE=INNODB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 |
21.09.2010, 03:17 Ответить |
|
NO USERPIC
|
haushkaЕсть тут кто живой? |
21.09.2010, 15:32 Ответить |
|
1234ru1. Если у Вас всё так и есть, как написано - прежде всего присутствует ошибка в яваскрипте:'/getregions.php?country_id=' + country_id', после country_id кавычка лишняя Если не помогает - откройте в браузере страницу ровно с тем адресом, по которому Вы обращаетесь за HTML-кодом списка (включая id той или иной кафедры; например /getregions.php?country_id=1; хотя переименовали бы файл - у вас же не регионы, а дисциплины) и посмотрите, нормально ли он выглядит, нет ли ошибок в HTML. 2. В таблице tema не нужен id кафедры, т.к. он однозначно следует из id дисциплины. 3. С третьим списком - быть точно также, как со вторым - сделать файл, который его отдает по нужному id (только уже не кафедры, а дисциплины, которая выбрана). То, что не убивает нас, делает нас инвалидами.
|
23.09.2010, 18:39 Ответить |
|
NO USERPIC
|
haushka1. кавычку убрал2. /getregions.php?country_id=1 ошибок нет запросы формируются 3. просто не реагирует! первый список тока работает <script type="text/javascript" src="jquery.js"></script> <select id='countries'> <?php require_once("../config.php"); $sql=mysql_query("SELECT id_kafedra,name FROM kafedra"); ?> <option value="0" selected>Выберите...</option> <?php while ($ctg = mysql_fetch_array($sql)) { echo '<option value="'.$ctg['id_kafedra'].'">'.$ctg['name'].'</option>'."\n"; } ?> </select> <select id="regions"></select> <select id="cities"></select> <script type="text/javascript"> $('#countries').change(function() { var country_id = $(this).val(); $.get('/getregions.php?country_id=' + country_id, function(data) { $('#regions').html(data); }); $('#cities').html(''); } ); </script> отладчиком посмотрел проходит яву только при закрузки страницы а при изменении списка вообще не геагирует стоп кран что это может быть? |
24.09.2010, 02:43 Ответить |
|
NO USERPIC
|
haushkaну какие мысли есть? |
25.09.2010, 00:51 Ответить |
|
1234ruСтранно, что в отладичке ничего.Скорее всего, Вы просто не смотрите в то место, где у него ошибки показываются. Хотя Вам виднее. В общем, если отладчик не помогает, двигается стоит так: 0. Убрать из $('#countries').change(function()... вообще всё. 1. Сделать $('#countries').change(function() { var country_id = $(this).val(); alert(county_id); } Если алерта нет вообще - значит, неправильно прикреплено событие (ошибка в написании id тега; кстати - попробуйте id="countries" писать через двойные кавычки, а не через одинарные; вряд ли в этом причина, но попробовать стоит) Если в алерте пустота или undefined - у Вас неправильно заполняется список #countries (элементы не имеют соответствующих значений). 2. alert убрать, добавить $.get('/getregions.php?country_id=' + country_id); alert(1); Если возникает alert, значит, запрос отправляется без ошибок на клиенте. 3. alert убрать. Добавить функцию при запросе: $.get( '/getregions.php?country_id=' + country_id, function(data) { alert(1); } ); Если не появляется alert - значит, какая-то ошибка в синтаксисе. 4. alert(1) заменить на alert(data). Так можно убедиться, что с сервера приходит то, что надо. Если дошли до этой стадии - значит, проблемы с отдаваемой с сервера строкой. Посмотрите, нормальный ли там HTML. То, что не убивает нас, делает нас инвалидами.
|
26.09.2010, 00:03 Ответить |
© 2007—2012 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
