поМогите с AJAxом!

Discussion in 'PHP' started by kdk, 3 Oct 2009.

  1. kdk

    kdk Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    112
    Likes Received:
    5
    Reputations:
    -3
    У меня такой вопрос как организовать такое же
    на примере http://www.lasso.pro/selectCombo/
    Есть 2 бд
    1)CREATE TABLE `strani` (
    `id` varchar(20) NOT NULL,
    `strana` varchar(25) default NULL
    ) ;
    INSERT INTO `strani` VALUES ('1', 'Россия (Russia)');
    INSERT INTO `strani` VALUES ('2', 'Украина (Ukraine)');
    2)CREATE TABLE `gorod` (
    `id` varchar(20) NOT NULL,
    `id_strana` varchar(20) NOT NULL,
    `gorod` varchar(25) default NULL
    ) ;

    http://www.lasso.pro/selectCombo/ сделано было при помощи jquery.selectCombo1.2.6.js ну я не могу разобраться как это перевести на php! Или вообще как вы это решали на своем сайте?
     
  2. KaMiKadZe

    KaMiKadZe Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    163
    Likes Received:
    35
    Reputations:
    19
    При выборе одного из списка определяем какой выбрали (говорю определяем так как не знаю можно ли определить сразу не перебирая все элементы списка какой наш) после определения посылаем ajax запросом скрипту номер списка это будет одновременно и id в базе SELECT * FROM `gorod` WHERE id_strana='$id'; после работы скрипта все возвращается и работает уже с возвращенными значениями создавая 2 список
    Вот весь алгоритм работы
     
  3. diGriz

    diGriz Elder - Старейшина

    Joined:
    11 Oct 2006
    Messages:
    138
    Likes Received:
    82
    Reputations:
    6
    С jQuery примерно так. Выбираешь страны из бд, заносишь в массив $countryArr, потом выводишь в списке. При событии onChange() получаем Id страны и вытаскиваем города.
    PHP:
    <html>
        <head>
            <title></title>
             <script src='../js/jquery.js' type='text/javascript'></script>
             <script type="text/javascript">
                $(document).ready(function(){
                       showCountriesById($('#countryId').val());
                 });
                function showCountriesById (val) {
                $.ajax({
                type: "POST",
                url: "ajax.php",
                data: "countryId="+val,
                success: function(html){
                    $("#cityContainer").html(html);
                }
            });
            }
            </script>
        </head>
        <body>
          <select name="countryId" id="countryId" onchange="showCountriesById(this.value)">
                    <?php
                    
    //Выводишь страны
                    
    if (isset( $countryArr)) 
                    {
                    
    ?>
                        <?php
                        
    foreach ( $countryArr as $s) {
                        
    ?>
                            <option value="<?=$s['id']?>"><?=$s['strana']?></option>
                        <?php
                        
    }
                        
    ?>
                    <?php
                    
    }
                    
    ?>
                    </select>
                        <div id="cityContainer">    </div>    
        </body>
    </html>
    Файл ajax.php
    PHP:
    <?php
    $countryId 
    $_POST['countryId'];
    //Выбираешь из бд города и заносишь в массив
    $html .= '<select name="cities">';
    while (
    $row mysql_fetch_array($res)) {
        
    $html    .= '<option value="'.$row['id'].'" >'.$row['gorod']'.</option>';
    }
    echo 
    $html;
    ?>
     
    #3 diGriz, 4 Oct 2009
    Last edited: 4 Oct 2009
  4. K0rINf

    K0rINf Member

    Joined:
    20 Jan 2009
    Messages:
    40
    Likes Received:
    5
    Reputations:
    6
    мой вариант без Jqeury ! работает в ОПЕРЕ 100% в других не тестил.
    содержимое файла 1.php
    PHP:
    <script>
    function AjaxFunc ()
    {
    x = document.getElementById("select");//выбераем наш селект
    x_send = x.selectedIndex; //Теперь x_send это то значение которое выбрали

    //тут создаю обьект 
    if(window.XMLHttpRequest){
                                ajax1 = new XMLHttpRequest();
                                }
     else 
             if(window.ActiveXObject)
                {
                    ajax1 = new ActiveXObject("Microsoft.XMLHTTP");
                } 
     else {
        return;
          };

    ajax1.open("GET","ajax.php?select="+x_send, true);//делаю опен. Селект передаю через сылку
    ajax1.send(null);// так вроде надо)) 
    ajax1.onreadystatechange = function()// тут обрабатываю то что пришло
                            {
                            if (ajax1.readyState == 4 && ajax1.status == 200) 
                                     {
                            a = document.getElementById("div");
                            a.innerHTML = ajax1.responseText;  
                                    };       
                            }
    };                    
    </script>


    <select name="Strana"  onchange='AjaxFunc()' id="select" >
    <?php 
    // тут должна быть функция mysql_pconnect 
     
    mysql_select_db("Magaz");// в моем случае база называлась МАГАЗ 
     
    $sql "SELECT * FROM strani";// выбераю все страны
     
    $sql_result mysql_query($sql);
     
    $sql_arr mysql_fetch_array($sql_result);
    do {
              echo (
    "<option id='".$sql_arr['id']."'>".$sql_arr['strana']."
    </option>"
    );// выводим список всех стран в селекте
         
    }
     while (
    $sql_arr mysql_fetch_array($sql_result))
    ?>

    </select>
    <form id="div">
    //сюда мы поместим наш ответ с городами
    </form>
    Содержимое файла ajax.php
    PHP:
    <?php
    // тут также должна быть функция mysql_connect
    mysql_select_db("Magaz");// опять подключаемся к базе
    $sql "SELECT * FROM gorod WHERE id_strana = ".$_GET['select'];// в $_GET['select'] у нас содержиться // код страны которую выбрал  пользователь. Выбираю все где код страны равен $_GET['select']
    $sql_result mysql_query($sql);
    $sql_fetch_array mysql_fetch_array($sql_result);
    //формирую ответ
    echo ("<select name='gorod'>"); 
    do {
    echo (
    "
    <option>"
    .$sql_fetch_array['gorod']."</option>");
    }
    while (
    $sql_fetch_array mysql_fetch_array($sql_result));
    echo (
    '</select>');

    ?>
    Сделал очень быстро! может гденить работать не будет! надо проверить еще на иньекции.
    И еще чтоб меньше было гемора поменял Id стран на 0 и 1.
     
    #4 K0rINf, 4 Oct 2009
    Last edited: 4 Oct 2009
    1 person likes this.
  5. kdk

    kdk Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    112
    Likes Received:
    5
    Reputations:
    -3
    СПС