Независимая выборка с 3 селектов Ajax

Тема в разделе "Web 2.0, AJAX, Ruby, RSS технологии", создана пользователем grenuy, 14 апр 2010.

  1. grenuy

    grenuy Гость

    Есть три селекта которые записи которых подтягиваются с базы. После выбора в любом из селекта, в двух других должны подгружаться данные по определенному условию(взаимозависимость что выбрано) после выбора в другом селекте поля, подгружаеться третий незадействованный селект, и кнопочка сбросить выбор. В AJAX слабый, поэтому обращаюсь к Вам, спасибо! :)
     
  2. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    иии? где попытки решения и мечто конкретного претконовения? или вам стоимость сказать?
     
  3. grenuy

    grenuy Гость

    Как и говорил в аджаксе 0-по этому сюда и обратился... , есть сайтик там нужно будет сделать эту фичу... ищу что то похоже готовое, делаю остальное... А потом если ничего не найду, и никто не поможет то буду как то сам выкручиваться...
    Когда найду решения то обязательно выложу сюда... ) Но надеюсь умеющие помогут... Что касается пхп и мускула могу помочь и сам... )
     
  4. etc

    etc Гость

  5. grenuy

    grenuy Гость

    Начал!!! ))
    Короче создал два файла первый сам обработчик
    Код (PHP):
    <?php
    include_once('../moduls/bd.php');
    header("Content-Type: text/xml; charset=windows-1251");
    $request = $_GET["codes"];

    if(isset($_GET["codes"])&& !isset($_GET["ress"])){
    $ress='codes';
    echo loadData($request,$ress);
    }
    elseif(isset($_GET["rayon"])&& !isset($_GET["ress"]))
    {
    $ress='rayon';
    echo loadData($request,$ress);
    }
    elseif(isset($_GET["ress"])){
    $ress='yes';
    echo loadData($request,$ress);
    }

    function loadData($request,$ress){
    if($ress=='yes')
    {
    //Район
    $sql_rayon="SELECT * FROM `rayon_spisok` ORDER BY `name` ASC";

    $whr="";
    }
    elseif($ress=='rayon')
    {
    $whr=" AND rayon='".$_GET['rayon']."'";
    $sql_rayon="SELECT r.id,r.name FROM rayon_spisok AS r WHERE r.id='".$_GET['rayon']."'";

    }
    elseif($ress=='codes')
    {
    $whr=" AND id='".$_GET['codes']."'";
    $sql_rayon="SELECT r.id,r.name FROM `salon` AS s, rayon_spisok AS r WHERE s.rayon=r.id AND s.id='".$_GET['codes']."'";

    }
    //code
    $sql="SELECT code,id FROM `salon` WHERE code!='' ".$whr." ORDER BY `code` ASC";
    $result1 = mysql_query($sql);
    //echo $sql;
    $result='<?xml version="1.0" encoding="windows-1251"?>'."\n<names>";
    while ($myrow = mysql_fetch_array($result1))
    {
    $result.= '<code value="'.$myrow['id'].'">'.htmlspecialchars($myrow['code'])."</code>\n";
    };

    //name
    $sql="SELECT name,id FROM `salon` WHERE name!='' ".$whr." ORDER BY `name` ASC";
    $result1 = mysql_query($sql);
    //echo $sql;
    while ($myrow = mysql_fetch_array($result1))
    {
    $result.= '<name value="'.$myrow['id'].'">'.htmlspecialchars($myrow['name'])."</name>\n";
    };
    //rayon
    $result1 = mysql_query($sql_rayon);
    //echo $sql;
    while ($myrow = mysql_fetch_array($result1))
    {
    $result.= '<rayon value="'.$myrow['id'].'">'.htmlspecialchars($myrow['name'])."</rayon>\n";
    };
    //adress
    $sql="SELECT adress,id FROM `salon` WHERE adress!='' ".$whr." ORDER BY `adress` ASC";
    $result1 = mysql_query($sql);
    //echo $sql;
    while ($myrow = mysql_fetch_array($result1))
    {
    $result.= '<adress value="'.$myrow['id'].'">'.htmlspecialchars($myrow['adress'])."</adress>\n";
    };


    $result.='</names>';
    return $result;
    }
    ?>
    Другой Сам файл.
    Код (PHP):
    <?
    include_once('../moduls/bd.php');
    //include_once('moduls/for_all/init.php');
    ?>
    <head>
    <title>Связанные списки, пример № 5</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <style type="text/css">
    fieldset{width:10em;display:block;padding:.5em}
    select{width:10em}
    </style>
    <script type="text/javascript">

    function loadXMLDoc(method,url){
    if(window.XMLHttpRequest){
    req = new XMLHttpRequest();
    req.onreadystatechange = processReqChange;
    req.open(method, url, true);
    req.send(null);
    }else if(window.ActiveXObject){
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if(req){
    req.onreadystatechange = processReqChange;
    req.open(method, url, true);
    req.send(null);
    }
    }
    }
    function processReqChange(){
    if(req.readyState == 4){
    if(req.status == 200){
    getRayon(req.responseXML.documentElement);
    }else{
    alert("There was a problem retrieving the XML data:\\n" + req.statusText);
    }
    }
    }
    function getRayon(xml){

    var codes = xml.getElementsByTagName("code");
    var _select = document.getElementById("code");
    _select.innerHTML = ""; // Удаляем всех потомков.   
    // Создаем список с доступными названиями.
    for(i=0;i<codes.length;i++){
    var option = document.createElement("option");
    var optionText = document.createTextNode(codes[i].firstChild.data);
    option.appendChild(optionText);
    option.setAttribute("value",codes[i].getAttribute("value"));
    _select.appendChild(option);
    }

    var names = xml.getElementsByTagName("name");
    var _select = document.getElementById("name");
    _select.innerHTML = ""; // Удаляем всех потомков.   
    // Создаем список с доступными названиями.
    for(i=0;i<names.length;i++){
    var option = document.createElement("option");
    var optionText = document.createTextNode(names[i].firstChild.data);
    option.appendChild(optionText);
    option.setAttribute("value",names[i].getAttribute("value"));
    _select.appendChild(option);
    }

    var rayons = xml.getElementsByTagName("rayon");
    var _select = document.getElementById("rayons");
    _select.innerHTML = ""; // Удаляем всех потомков.   
    // Создаем список с доступными районами.
    for(i=0;i<rayons.length;i++){
    var option = document.createElement("option");
    var optionText = document.createTextNode(rayons[i].firstChild.data);
    option.appendChild(optionText);
    option.setAttribute("value",rayons[i].getAttribute("value"));
    _select.appendChild(option);
    }


    var rayons = xml.getElementsByTagName("adress");
    var _select = document.getElementById("adress");
    _select.innerHTML = ""; // Удаляем всех потомков.   
    // Создаем список с доступными Адресами.
    for(i=0;i<rayons.length;i++){
    var option = document.createElement("option");
    var optionText = document.createTextNode(rayons[i].firstChild.data);
    option.appendChild(optionText);
    option.setAttribute("value",rayons[i].getAttribute("value"));
    _select.appendChild(option);
    }

    }




    function onChange(_this){
    var url = "ajax.php?codes="+_this.value;
    loadXMLDoc("get",url);
    }
    function onChange2(_this){
    var url = "ajax.php?ress=yes";
    loadXMLDoc("get",url);
    }
    function onChange3(_this){
    var url = "ajax.php?rayon="+_this.value;
    loadXMLDoc("get",url);
    }
    </script>

    </head>
    <body>
    <form action="" method="post">
    Код салона ---------------- название----------------район----------------адрес<br />
    <select onchange="onChange(this)" name="code" id="code">
    <?

    //Код салона
    $sql="SELECT `code`,id FROM `salon` WHERE code!='' ORDER BY `code` ASC";
    $result = mysql_query($sql);
    $myrow = mysql_fetch_array($result);
    do
    echo ' <option value="'.$myrow['id'].'">'.$myrow['code'].'</option>';
    while ($myrow = mysql_fetch_array($result));
    ?>
    </select>
    <select onchange="onChange(this)" name="name" id="name">
    <?
    //Название
    $sql="SELECT `name`,id FROM `salon` WHERE name!='' ORDER BY `name` ASC";
    $result = mysql_query($sql);
    $myrow = mysql_fetch_array($result);
    do
    echo ' <option value="'.$myrow['id'].'">'.$myrow['name'].'</option>';
    while ($myrow = mysql_fetch_array($result));
    ?>
    </select>
    <select onchange="onChange3(this)" name="rayon" id="rayons" >
    <?
    //Район
    $sql="SELECT * FROM `rayon_spisok` ORDER BY `name` ASC";
    $result1 = mysql_query($sql);
    //echo $sql;
    while ($myrow = mysql_fetch_array($result1))
    {
    echo ' <option value="'.$myrow['id'].'">'.$myrow['name'].'</option>';
    };
    ?>
    </select>
    <select onchange="onChange(this)" name="adress" id="adress">
    <?
    //Адрес
    $sql="SELECT `adress`,id FROM `salon` WHERE adress!='' ORDER BY `adress` ASC";
    $result = mysql_query($sql);
    $myrow = mysql_fetch_array($result);
    do
    echo ' <option value="'.$myrow['id'].'">'.$myrow['adress'].'</option>';
    while ($myrow = mysql_fetch_array($result));
    ?>
    </select>
    <input onClick="onChange2(this)" type="button" value="X">

    <br />
    </form>
    </body>
    Вопрос следующий Первую отборку сделать не проблема... А вот как быть с второй? Тоесть как запомнить какая форма была заполненная а какие остались, и как после того как выбрали другой селект отправить данные от первого и другого? Активного селекта понял как а вот что быть с пасивным и выбранным??
     
  6. etc

    etc Гость

    Сервер и клиенты общаются между собой при помощи вопрос-ответ. В чем затруднения?
     
  7. grenuy

    grenuy Гость

    Ну как передать перемены первого и второго селекта, после выбора во втором...
    То есть клиент выбрал в каком-то селекте поле, все селекты обновились, потом выбрал во втором селекте поле, как передать данные о первого?
    Напоминаю что в JS очень слабый, так что извините за ламерские вопросы.
     
  8. etc

    etc Гость

    document.getElementById("тут ID ваших элементов").<тут свойства>...
     
  9. grenuy

    grenuy Гость

    Ето я понимаю... а как получить свойста елемента с id=code когда я нажал на элемент с id=name к примеру??

    Добавлено: Впринцыпи сделал, рабочий вариант обновил выше....
     
  10. etc

    etc Гость

    Не важно куда когда и зачем нажали или не нажали, достум к элементам все равно document.getElementById
     
  11. Magistr

    Magistr Гость

    Столько кода из-за трёх селектов?
    Зачем аякс? сколько строк в селектах?
    Делается это на голом javaScript.
     
  12. grenuy

    grenuy Гость

    Тему можно закрывать.. Уже все сделал... И научился делать подобное, а также уже научился использовать фреймворк jqure. Короче все в мажоре. Можно тему закрывать.
     
Загрузка...

Поделиться этой страницей