Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическое содержимое в Select полях
 
 автор: Keyses   (08.03.2009 в 02:48)   письмо автору
 
 

Имеется 2 поля типа select ,суть в том, что если я выбираю какое-то определённое значение из первого поля, то содержимое второго поля должно автоматически измениться взависимости от содержания БД. Так вот как это правильнее реализовать? Обязательна ли перезагрузка страницы или это можно сделать средствами, к примеру JS? Если же лучше будет использовать PHP, то как сделать взаимозависимые select-формы?

  Ответить  
 
 автор: Николай2357   (08.03.2009 в 08:00)   письмо автору
 
   для: Keyses   (08.03.2009 в 02:48)
 

В этом случае лучше пользовать аякс. Вот тут селект с выбором страны-региона-города так реализован. Потому что нереально вытащить сразу всю базу в селекты и перезагружать страницу каждый раз не очень то удобно.

  Ответить  
 
 автор: Keyses   (08.03.2009 в 11:16)   письмо автору
 
   для: Николай2357   (08.03.2009 в 08:00)
 

Там несколько модулей для Drupal, это не совсем то, что мне нужно. У меня на сайте движок самопальный, а посему требуется доступная документация (если хорошая, то можно и на английском), потому что с AJAX раньше вообще не работал.
Может у кого есть ссылки на хорошие маны?

P.S. Насколько приоритетно для решения данной задачи использовать библиотеку jQuery?

  Ответить  
 
 автор: Николай2357   (08.03.2009 в 13:38)   письмо автору
 
   для: Keyses   (08.03.2009 в 11:16)
 

>Там несколько модулей для Drupal
Какие еще модули, я сам писал, не доделал кстати.
P.S. Насколько приоритетно для решения данной задачи использовать библиотеку jQuery?
Совершенно лишнее... Весит минимум 30кб плюс скрипт управления. А решается в несколько строк.

  Ответить  
 
 автор: Keyses   (08.03.2009 в 14:07)   письмо автору
 
   для: Николай2357   (08.03.2009 в 13:38)
 

Сорри, перепутал вкладки в опере местами, потому и подумал про Drupal. А вообще да, довольно изящно выглядит, только вот как быть с файлами:

<script type="text/javascript" language="javascript" >
var path_sel = "http://profsvaha.ru/strana/functions/selects.php";
var path_valid = "http://profsvaha.ru/strana/modules/registr/valid.php"; 
</script>

Особенно с первым иначе не особо понятно что там вообще происходит.

  Ответить  
 
 автор: Николай2357   (08.03.2009 в 14:54)   письмо автору
 
   для: Keyses   (08.03.2009 в 14:07)
 

Это не из этой оперы ))) Это для валидатора.
Вот:
var d = document;
var div_select;
var req = Create();

function Country()
{
div_select = "region";    
d.getElementById('city').innerHTML = '';
var a = d.getElementById('country_id').value;
query = "country_id="+a;
Request(query);
}

function Region()
{    
div_select = "city";    
var a = d.getElementById('region_id').value;
query = "region_id="+a;
Request(query);
}

function Create(){ 
    if(navigator.appName == "Microsoft Internet Explorer"){ 
        req = new ActiveXObject("Microsoft.XMLHTTP"); 
    }else{ 
        req = new XMLHttpRequest(); 
    } 
    return req; 

function Request(query)
{
req.open('post', 'selects.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);             

function Refresh()
{
var a = req.readyState; 
var    b = req.responseText; 
    if( a == 4 )
    d.getElementById(div_select).innerHTML = b;
}
Только кодировка файлов - utf-8. Сами селекты нужны?

  Ответить  
 
 автор: Keyses   (08.03.2009 в 15:03)   письмо автору
 
   для: Николай2357   (08.03.2009 в 14:54)
 

Нашёл неплохое объяснение тут.
Проблема заключается в том что у меня все данные в одной БД. Выборка в селект нулевого уровня идёт из одного столбца, а выборка в селект первого уровня из соседнего столбца базы. И я смутновато представляю как сделать так, чтобы Ajax делал запрос к БД на выборку, вот почему попросил *.php файл.

  Ответить  
 
 автор: Николай2357   (08.03.2009 в 15:07)   письмо автору
 
   для: Keyses   (08.03.2009 в 15:03)
 

Теперь, когда Вы все это сделаете, как там написано, сравните по объёму (учитывая и сам фреймворк). с тем, что я написал выше и почуствуйте разницу.

  Ответить  
 
 автор: Keyses   (08.03.2009 в 15:18)   письмо автору
 
   для: Николай2357   (08.03.2009 в 15:07)
 

Ну да, это очевидно что размер будет ~ 125 кб. больше.

Насколько я понял, строчка req.open('post', 'selects.php' , true ); передаёт в скрипт сначала параметр country_id, затем region_id, верно? и там их уже соответственным образом обрабатывать так, как мне нужно, а вот как из скрипта selects.php вернуть выборку в select?

  Ответить  
 
 автор: Николай2357   (08.03.2009 в 16:33)   письмо автору
112.8 Кб
 
   для: Keyses   (08.03.2009 в 15:18)
 

Вот этот файл просто подключите:
<?php 
function country()
{
$country_id = isset($_POST['country_id'])?$_POST['country_id']:NULL;

$query "SELECT * FROM `".PREFIX."country`";
$res mysql_query($query);
$select "<select id=\"country_id\" name=\"country_id\" onchange=\"Country()\" >
<option value='0'>- Выберите страну -</option>"
;
    while(
$row mysql_fetch_array($res))
    {
    
$select .= "<option ";
        if(
$row['country_id'] == $country_id)
        
$select .="selected=\"selected\"";
    
$select .= " value='".$row['country_id']."'>".$row['name']."</option>\r\n";
    }
$select .= "</select>";    
return     
$select;
}
?>
А вот это тот, к которому обращается аякс:
<?php 
include ("db_connect.php");
function 
region()
{
$country_id = isset($_POST['country_id'])?$_POST['country_id']:NULL;
$query "SELECT * FROM `region` WHERE `country_id`='".(int)$country_id."'";
$res mysql_query($query);
$select "<select id=\"region_id\" name=\"region_id\" onchange=\"Region()\" >
<option  value='0'>- Выберите pегион -</option>"
;

    while(
$row mysql_fetch_array($res))
    {
    
$select .= "<option value='".$row['region_id']."'>".$row['name']."</option>\r\n";
    }
$select .= "</select>";    
return     
$select;
}

function 
city()
{
$region_id = isset($_POST['region_id'])?$_POST['region_id']:NULL;
$query "SELECT * FROM `city` WHERE `region_id`='".(int)$region_id."'";
$res mysql_query($query);
$select "<select id=\"city_id\" name=\"city_id\" >
<option  value='0'>- Выберите город -</option>"
;
    while(
$row mysql_fetch_array($res))
    {
    
$select .= "<option  value='".$row['city_id']."'>".$row['name']."</option>\r\n";
    }
$select .= "</select>";    
return  
$select;
}

if(isset(
$_POST['country_id']))
echo 
region();

if(isset(
$_POST['region_id']))
echo 
city();

?>

А дамп базы в аттаче.

  Ответить  
 
 автор: Keyses   (08.03.2009 в 17:05)   письмо автору
 
   для: Николай2357   (08.03.2009 в 16:33)
 

Спасибо, большое. Буду разбираться ;)

  Ответить  
 
 автор: dzer52   (22.04.2009 в 11:34)   письмо автору
 
   для: Николай2357   (08.03.2009 в 16:33)
 

Николай, добрый день, подскажите пожалуйста, как должны выглядеть файлы, а то уже неделю бьюсь, но чего -то бестолку, никак не соображу как все состыковать.
Заранее благодарен.

  Ответить  
 
 автор: Николай2357   (22.04.2009 в 15:15)   письмо автору
122.1 Кб
 
   для: dzer52   (22.04.2009 в 11:34)
 

Не совсем понял, какие нужны файлы.... Но вот в аттаче рабочий вариант, так наверно легче будет разобраться.

  Ответить  
 
 автор: dzer52   (22.04.2009 в 18:45)   письмо автору
 
   для: Николай2357   (22.04.2009 в 15:15)
 

Огромадное спасибки!
Буду разбираться

  Ответить  
 
 автор: Владимир555   (01.05.2009 в 00:31)
 
   для: Николай2357   (22.04.2009 в 15:15)
 

Уважаемый Николай! К сожалению, скрипт не работает в IE7 - выдает ошибку 1072896658

  Ответить  
 
 автор: Николай2357   (01.05.2009 в 03:15)   письмо автору
 
   для: Владимир555   (01.05.2009 в 00:31)
 

Исправил.

  Ответить  
 
 автор: Владимир555   (01.05.2009 в 03:16)
 
   для: Владимир555   (01.05.2009 в 00:31)
 

Теперь все работает! Отлично!!!

  Ответить  
 
 автор: Keyses   (03.05.2009 в 18:55)   письмо автору
 
   для: Николай2357   (08.03.2009 в 08:00)
 

Немного не пойму в чём проблема, но только в IE не работает InnerHTML, может у меня где ошибка или существует какая-нибудь альтернатива через DOM-реализацию?

<script  type="text/javascript" language="javascript"> 
function city_from_chg(val) {
    query = "city_from="+encodeURIComponent(val);
    Request(query);


function Create(){  
    if (navigator.appName == "Microsoft Internet Explorer")  
        object = new ActiveXObject("Microsoft.XMLHTTP");  
    else
        object = new XMLHttpRequest();  
return object;  
}

function Request(query) { 
    var req = Create();
    req.open("post", "ajax_new.php", true)
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.onreadystatechange = function () {
        if (req.readyState == 4 && req.status == 200)
            document.getElementById("city_to").innerHTML = req.responseText;  //Не работает!!!
    }
    req.send(query);
}
</script>

  Ответить  
 
 автор: Keyses   (03.05.2009 в 23:04)   письмо автору
 
   для: Keyses   (03.05.2009 в 18:55)
 

Люди, помогите разобраться пожалуйста....

  Ответить  
 
 автор: mihdan   (22.04.2009 в 12:41)   письмо автору
 
   для: Keyses   (08.03.2009 в 02:48)
 

http://xhtml.ru/2006/02/11/dynamic-select/

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования