За последние 24 часа нас посетили 16650 программистов и 1643 робота. Сейчас ищут 1226 программистов ...

Динамический обновляющий Select

Тема в разделе "JavaScript и AJAX", создана пользователем Kocapb, 11 июл 2008.

  1. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Здравствуйте (просмотрел аналогичную тему но пока не вкурил), усваиваю php, но тут же наткнулся на проблему с обновлением Selecta.
    Задача следующая:
    Есть 3 Select при выборе Select_1 обновляется Select_2, при выборе Select_2 обновляется Select_3
    при чем все это обновление происходит с чтением таблиц из БД.
    В php я с одним Select разобрался:

    <select name="category">
    <?php

    if ($res = mysql_query("SELECT * FROM `categories` ORDER BY `name`"))
    {
    while ($row = mysql_fetch_assoc($res))
    {
    echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
    }
    }

    ?>
    </select>
    Потом вывожу его:
    <?php

    if ($_GET)
    {
    if ($res = mysql_query("
    SELECT * FROM `items`
    WHERE `category`='".addslashes($_GET['category'])."'
    ORDER BY `name`
    "))
    {
    if (mysql_num_rows($res) == 0)
    echo "<p>По вашему запросу ничего не найдено.</p>";
    else
    {
    echo
    '<br />'.
    '<table class="query_result">'.
    '<col />'.
    '<col width="100%" />'.
    '<col />'.
    '<tr>'.
    '<th>id</th>'.
    '<th>Наименование</th>'.
    '<th>Количество</th>'.
    '</tr>';

    while ($row = mysql_fetch_assoc($res))
    {
    echo
    '<tr>'.
    '<td>'.$row['id'].'</td>'.
    '<td>'.$row['name'].'</td>'.
    '<td>'.$row['quantity'].'</td>'.
    '<tr>';
    }

    echo '</table>';
    }
    }
    }

    ?>

    Как реализовать в JC вроде как понимаю, что необходимо в Select работать когда он меняется (событие OnChange), но как это все реализовать с трудом представляю. Я чайник, но продвинутый (со свистком) в JC, да и в php в принципе тоже поэтому буду благодарен любой помощи (линки на хорошую лит-ру, советы и названия хороших книг и, естественно примеры кода, т.к. по протоптанной дороге шагать быстрее)
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Вкуривай, че одно по одному то.
     
  3. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    [vs]
    может покажешь? на простом примере из 2х таблиц?
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Kocapb
    При чем тут таблицы? Тебе сначала нужно из таблицы получить все значения селкетов, потом с помощью JS подставлять нужные.
    Вот пример реализации из той темы, приведеный к удобочитаемому виду:
    HTML:
    1. <form name="languages">
    2.     <select onchange="langform_rebuild(this.options[this.selectedIndex].value);">
    3.         <option value="0">Язык</option>
    4.         <option value="1">HTML</option>
    5.         <option value="2">PHP</option>
    6.     </select>
    7.     <select name="paragraph">
    8.     <option value="0">Раздел</option>
    9.  
    10. <!-- Функция подстановки полей
    11.         в зависимости от значения
    12.             вызывающего функцию поля -->
    13. <script language="javascript">
    [js]function langform_rebuild(b)
    {
    switch (b)
    {
    case '0':
    with (languages.paragraph)
    {
    options.length = 0;
    options[0] = new Option('Раздел', '0');
    selectedIndex = 0;
    };
    break;
    case '1':
    with (languages.paragraph)
    {
    options.length= 0;
    options[0]= new Option('Раздел','0');
    options[1]= new Option('Текст','1');
    options[2]= new Option('Графика','2');
    options[3]= new Option('Стили','3');
    selectedIndex=0;
    };
    break;
    case '2':
    with (document.languages.paragraph)
    {
    options.length= 0;
    options[0]= new Option('Раздел','0');
    options[1]= new Option('Переменные','1');
    options[2]= new Option('Функции','2');
    options[3]= new Option('ООП','3');
    selectedIndex=0;
    };
    break;
    }
    }[/js]
    HTML:
    1.  
    2.     </select>
    3. </form>
    Если не хочешь сразу все загружать из БД - то к сожалению с AJAX'ом ничем помочь немогу.
     
  5. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    со статическим списком более или менее понятно как работать, но куда тут запихивать SQL код для чтение данных из БД ?
    у меня все данные хранятся в БД(MySQL) и как из них считывать данные и впихивать в сложный Select я не понимаю. В один Select я заполнил но как обновить другой ума не приложу. Получается надо только через Ajax работать?
     
  6. dAllonE

    dAllonE Guest

    Kocapb, AJAX это совсем не больно, а с фреймворками он даже не сможет захавать Вам мозг... ;)
     
  7. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    пролистал очередную книгу про AJAX, обе найденные мной излагали AJAX применимо к структуре xml документа.
    Передо мной стоит задача использования AJAX для работы с БД MySQL. Уважаемые господа объясните как все это происходит с MySQL (на примере если возможно)? Если нельзя такое делать, поставлю вопрос так: Каким образом данные из SQL залить в xml документ и стоит ли это делать? Если вдруг кто-то знает другой механизм пожалуйста помогите. Если кто-то знает лит-ру - линкните.
     
  8. Anonymous

    Anonymous Guest

    угу. Наверное потому что Аякс - это Асинхронный JS + XML
     
  9. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    всем спасибо решение найдено.
     
  10. ARSTAN

    ARSTAN Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    4
    Симпатии:
    0
    Так поделись решением, а то в каждой подобной теме написано, что решение найдено, а решения я так ни одного и не нашел :( У тебя получилось совместить аякс с БД или ты пошел по другому пути?