ФорумПрограммированиеJavaScript → проблемы с динамическими select'ами

проблемы с динамическими select'ами

  • gvik

    Сообщения: 137 Репутация: N Группа: Кто попало

    Spritz 21 сентября 2009 г. 3:00

    ВЕЛИКИЕ ГУРУ пыха! I need to correct the script. Проблема: select1 - показывает всё что надо, select2 - после выбора позиции из select1, select2 даже не появляется. Подскажите пожалуйста, где ошибка.
    select.php
    <?php 
    $db = mysql_connect ("localhost", "root", "");
    mysql_query ("set character_set_client='cp1251'");
    mysql_query ("set character_set_results='cp1251'");
    mysql_query ("set collation_connection='cp1251_general_ci'");
    mysql_select_db("cars",$db);
    ?>

    <script src="JsHttpRequest.js"></script>

    <!– Здесь мы подключили библиотеку. А теперь пишем функцию, которую назовем doload() –>

    <script>
    function doload(value){
    var req=new JsHttpRequest();
    req.onreadystatechange=function(){
    if(req.readyState==4) document.getElementById("result").innerHTML=req.responseText;}
    req.open(null,"select2.php",true);
    req.send({country:value});}
    </script>

    <form action="sript.php" method="POST">

    <select name="country" onchange="doload(this.value);">
    <option value="">–Выберите марку–
    <?php
    $sql = mysql_query ("SELECT DISTINCT brand FROM t1");
    while ($new_brand = mysql_fetch_array($sql))
    echo "<option value=".'"'.$new_brand['brand'].'"'.">".$new_brand['brand']."";
    ?>
    </select>

    <br><br>

    <div id="result"></div>

    <br><br>

    <input type="submit" value="Отправить">

    </form>

    select2.php
    <?php 
    $db = mysql_connect ("localhost", "root", "");
    mysql_select_db("cars",$db);

    require("JsHttpRequest.php");
    $JsHttpRequest=new JsHttpRequest("windows-1251");

    switch($_REQUEST["country"]):

    case "Mitsubishi":
    $html="<select name=\"provider\" id=\"provider\">
    <option value="no_action">–Выберите модель–
    $sql = mysql_query ("SELECT DISTINCT model FROM t1 WHERE brand = 'Mitsubishi'");
    while ($new_model= mysql_fetch_array($sql))
    echo "<option value=".'"'.$new_model['model'].'"'.">".$new_model['model']."";
    </select>";
    break;

    case "Suzuki":
    $html="<select name=\"provider\" id=\"provider\">
    <option value="no_action">–Выберите модель–
    $sql = mysql_query ("SELECT DISTINCT model FROM t1 WHERE brand = 'Suzuki'");
    while ($new_model = mysql_fetch_array($sql))
    echo "<option value=".'"'.$new_model['model'].'"'.">".$new_model['model']."";
    </select>";
    break;

    case "Hyundai":
    $html="<select name=\"provider\" id=\"provider\">
    <option value="no_action">–Выберите модель–
    $sql = mysql_query ("SELECT DISTINCT model FROM t1 WHERE brand = 'Hyundai'");
    while ($new_model = mysql_fetch_array($sql))
    echo "<option value=".'"'.$new_model['model'].'"'.">".$new_model['model']."";
    </select>";
    break;

    default: $html=null;
    endswitch;

    echo $html;
    ?>
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 21 сентября 2009 г. 3:06, спустя 5 минут 26 секунд

    по-моему, тема — баян…
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 21 сентября 2009 г. 3:06, спустя 31 секунду

    ты прав
  • gvik

    Сообщения: 137 Репутация: N Группа: Кто попало

    Spritz 21 сентября 2009 г. 3:26, спустя 19 минут 34 секунды

    Сори за баян, но я ещё чайник в js и нуждаюсь в помощи. Форум я уже читал, откуда и взял этот код, но не понимаю почему скрипт работает когда в option'ах жестко указаны значения, и не работает, когда я в option'ы пишу выборку значений из БД.
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 21 сентября 2009 г. 3:58, спустя 32 минуты 40 секунд

    может потому что неправильно пишешь
    попробуй вывести из БД без списка
  • gvik

    Сообщения: 137 Репутация: N Группа: Кто попало

    Spritz 21 сентября 2009 г. 4:21, спустя 22 минуты 23 секунды

    CTAPbIu_MABP, запросом из БД выводится куда угодно и даже в отдельные не связанные между собой select'ы. Мне кажется дело в js, doload не понимает переменную $html?
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 21 сентября 2009 г. 7:05, спустя 2 часа 43 минуты 42 секунды

    у тебя там большие проблемы с кавычками
  • gvik

    Сообщения: 137 Репутация: N Группа: Кто попало

    Spritz 21 сентября 2009 г. 7:23, спустя 18 минут 13 секунд

    CTAPbIu_MABP, я насчёт ковычек подчистил получился вот такой рабочий вариант
    <?php 
    $db = mysql_connect ("localhost", "root", "");
    mysql_query ("set character_set_client='cp1251'");
    mysql_query ("set character_set_results='cp1251'");
    mysql_query ("set collation_connection='cp1251_general_ci'");
    mysql_select_db("cars",$db);

    require("JsHttpRequest.php");
    $JsHttpRequest=new JsHttpRequest("windows-1251");
    ?>
    <select name=\"model\" id=\"model\">
    <option value="no_action">–Выберите модель–</option>
    <?
    if($_REQUEST["brand"] == "Mitsubishi"){
    $sql = mysql_query ("SELECT DISTINCT model FROM t1 WHERE brand = 'Mitsubishi'");
    while ($new_model= mysql_fetch_array($sql))
    echo '<option value='.$new_model['model'].'>'.$new_model['model'].'</option>';
    } else {echo 'Error!';}
    if($_REQUEST["brand"] == "Suzuki"){
    $sql = mysql_query ("SELECT DISTINCT model FROM t1 WHERE brand = 'Suzuki'");
    while ($new_model= mysql_fetch_array($sql))
    echo '<option value='.$new_model['model'].'>'.$new_model['model'].'</option>';
    } else {echo 'Error!';}
    if($_REQUEST["brand"] == "Hyundai"){
    $sql = mysql_query ("SELECT DISTINCT model FROM t1 WHERE brand = 'Hyundai'");
    while ($new_model= mysql_fetch_array($sql))
    echo '<option value='.$new_model['model'].'>'.$new_model['model'].'</option>';
    } else {echo 'Error!';}
    ?>
    </select>

    Но хотелось бы в SQL-запросе вместо жестких привязок brand = 'Mitsubishi' оперировать переменной, да и кол-во if'ов поубавилось бы, но не получается, в смысле вот так не получатся
    if($_REQUEST["brand"] == true){
    $sql = mysql_query ("SELECT DISTINCT model FROM t1 WHERE brand = ".$_REQUEST["brand"]."");
    while ($new_model= mysql_fetch_array($sql))
    echo '<option value='.$new_model['model'].'>'.$new_model['model'].'</option>';
    } else {echo 'Error!';}
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 сентября 2009 г. 7:38, спустя 15 минут 36 секунд

    gvik, используйте switch-case конструкцию
    Спустя 153 сек.


    $sql = mysql_query ('SELECT DISTINCT model FROM t1 WHERE brand = "'.mysql_real_escape_string($_REQUEST["brand"]).'"');
    if($sql) {
       while ($new_model= mysql_fetch_array($sql)) {
           echo '<option value="'.$new_model['model'].'">'.$new_model['model'].'</option>';
       }
    } else {
       echo mysql_error();
    }
    adw/0
  • gvik

    Сообщения: 137 Репутация: N Группа: Кто попало

    Spritz 21 сентября 2009 г. 7:40, спустя 1 минуту 34 секунды

    adw0rd, она по каким-то не понятным мне причинам не работает. Я в начале темы приводил эту конструкцию и её недостаток - поле brand нужно в SQL-запросах жестко прописывать.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 сентября 2009 г. 7:48, спустя 7 минут 52 секунды

    gvik, мой код у вас работает? Если нет, то что выводит mysql_error()?
    adw/0
  • gvik

    Сообщения: 137 Репутация: N Группа: Кто попало

    Spritz 21 сентября 2009 г. 7:56, спустя 8 минут 15 секунд

    adw0rd, помогло спасибо, +1 в карму. Код работает без error'ов
    Подскажите, я правильно делаю увеличение кол-ва select'ов. В select.php писать js-функцию следующего select'а, а в select3.php инфу для option'ов?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 сентября 2009 г. 8:05, спустя 8 минут 51 секунду

    gvik, если предполагается, что будут участвовать все селекты (фиксированное кол-во селектов), то я бы их сразу бы все 3 генерировал.
    А если нужно последовательно чтобы появлялись (по одному), то я 2 из них скрывал display:none
    Спустя 40 сек.
    В любом случае, при 3 селектах я бы их генерил заранее
    adw/0
  • gvik

    Сообщения: 137 Репутация: N Группа: Кто попало

    Spritz 21 сентября 2009 г. 8:10, спустя 5 минут 19 секунд

    Нужно все селекты показывать.

    я бы их сразу бы все 3 генерировал.

    А где это надо пофиксить?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 сентября 2009 г. 8:15, спустя 5 минут 11 секунд

    gvik, это надо сесть и подумать вам. Начать с того, что вам надо 3 селекта, делаете 3 html-селекта.
    Далее, вам надо три бекенд-скрипта, где генерются данные (PHP+SQL) … можете сделать и один бекенд, кому как удобно
    Далее, вам надо функцию, которая в зависимости от данных будет опрашивать бекенды и выводить результаты генерировав html-оптионы
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!