За последние 24 часа нас посетил 18381 программист и 1598 роботов. Сейчас ищут 897 программистов ...

Тупик... Вставка данных в зависимости от SELECT

Тема в разделе "JavaScript и AJAX", создана пользователем xaocbozzz, 28 апр 2012.

  1. xaocbozzz

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

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    Всем драсте.
    Не знаю как правильно назвать тему и как сформулировать фразу для поиска на форуме. Если решение уже есть - простите заранее.

    Перейду к задаче.
    Например, есть таблица notebook с ноутбуками.
    В ней множество данных, в том числе хранит в себе название ноутбука и стоимость.

    id | name | price
    1 | Dell | 300
    2 | Asus | 400
    3 | Lenovo | 500

    Выдергиваю из нее названия и стоимость:
    Код (Text):
    1. $querynotebook = "SELECT notebook.name, notebook.price FROM notebook";
    2. $notebook = mysql_query($querynotebook) or die(mysql_error());
    Теперь создаю выпадающий список Select, чтобы иметь возможность выбирать НАИМЕНОВАНИЯ:
    Код (Text):
    1. <select name="">
    2. <option value="def" selected>Сделайте выбор
    3. <option>Тут хочу сделать наименования 1</option>
    4. <option>Тут хочу сделать наименования 2</option>
    5. <option>Тут хочу сделать наименования 3</option>
    6. <option>Тут хочу сделать наименования 4</option>
    7. ...
    8. </select>
    C помощью цикла while, генерирую option с наименованиями:
    Код (Text):
    1. <?php
    2. while ($rownotebook=mysql_fetch_array($notebook))
    3.        {
    4.          echo "<option>".$rownotebook['name']."</option>";
    5.        }
    6. ?>
    Получается все красиво:
    [​IMG]

    А вот теперь я хочу, например, вывести еще и стоимость. Ну тут понятно:
    Просто переписываем так
    Код (Text):
    1. echo "<option>".$rownotebook['name'].",".$rownotebook['price']."</option>";
    Получаем:
    [​IMG]

    А что, если я хочу не через запятую, а вот так:
    [​IMG]

    Код (Text):
    1. <table><tr><td>
    2. <select>
    3. <option value="def" selected>Сделайте выбор
    4. <?php
    5. while ($rownotebook=mysql_fetch_array($notebook))
    6.        {
    7.          echo "<option>".$rownotebook['name']."</option>";
    8.        }
    9. ?>
    10. </select>
    11. </td>
    12. <td>КАК СЮДА ПОСТАВИТЬ СТОИМОСТЬ?</td>
    13. </tr></table>
    ps. Вот что дает print_r($rownotebook); после mysql_fetch_array:
    Код (Text):
    1. Array
    2. (
    3.     [0] => Dell
    4.     [name] => Dell
    5.     [1] => 300
    6.     [price] => 300
    7.  )
    Естественно, стоимость должна меняться сразу посредством js.
    только, плиз, без onchange в select - он уже занят )
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну так допиши в него!!!!!!
     
  3. xaocbozzz

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

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    Как это все провернуть?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    есть два пути. т.к. у тебя данные не меняются, тебе лучше воспользоваться вторым ;)

    создай массив и засунь его в js через echo '<script>'.json_encode($массив с данными).'</script>';
    и по эвенту бери оттуда соотв значение и хоть всю инфу можно рассовать в нужные части страницы

    еще момент: я предпочитаю mysql_fetch_assoc(), попробуй.
     
  5. xaocbozzz

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

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    Сделал! Вот как:
    В <select> добавил id (<select id="sel">), чтобы можно было оперировать им в javascript.
    В <td> таблицы также назначил id="result", сюда будет выводиться стоимость.
    Затем в цикл while добавил $noteprice[] = $rownotebook[1], чтобы получать данные из запроса в массив $noteprice.
    Вот код:

    Код (Text):
    1.  
    2. <table><tr><td>
    3. <select id="sel">
    4. <option value="def" selected>Сделайте выбор
    5. <?php
    6. while ($rownotebook=mysql_fetch_array($notebook))
    7.        {
    8.          echo "<option>".$rownotebook['name']."</option>";
    9.          $noteprice[] = $rownotebook[1];
    10.        }
    11. ?>
    12. </select>
    13. </td>
    14. <td id="result"></td>
    15. </tr></table>
    Затем написал код на js ниже (обязательно ниже!) цикла while:
    Код (Text):
    1. <script>
    2. var price =['',<?php echo implode(",", $noteprice); ?>];
    3. var sel = document.getElementById("sel");
    4. sel.onchange = function()
    5.  {
    6.  var s = price[sel.selectedIndex];
    7.  var r = document.getElementById("result");
    8.  r.innerHTML = s;
    9.  };
    10. </script>
    Разберем этот код:
    Создаем массив в js по типу var price = [a,b,c,d,...]. Но в качестве значений (a,b,c,d,...) мы берем то, что "отдал" нам php: <?php echo implode(",", $noteprice); ?>. Что отдает нам php? При помощи функции implode массив $noteprice соединяется в строку, используя запятую между значениями. То есть он в моем случае отдает 300,400,500
    Ну а так как первый option у меня не должен иметь какое-либо значение (<option value="def" selected>Сделайте выбор), первое значение массива для js мы определим как "пустое место" (одинарные кавычки без значения).
    Код (Text):
    1. var price = ['',<?php echo implode(",", $noteprice); ?>];
    Теперь определим переменную, например, sel. Она будет присваивать наш select по его id
    Код (Text):
    1. var sel = document.getElementById("sel");
    Поднимем функцию, которая будет срабатывать каждый раз, когда пользователем будет осуществлен выбор в select
    Код (Text):
    1. sel.onchange = function()
    Что происходит при выборе чего-нибудь в select? Переменной s (например) будет присваиваться значение, которое соответствует выборке из массива price[]. Где значение между квадратными скобками - выбранный пункт в select'е
    Код (Text):
    1. var s = price[sel.selectedIndex];
    Также в этой же функции определяется переменная, допустим, r. Ей присваивается значение, которое соответствует нашему месту в таблице (в ячейке td) согласно указанному id="result"
    Код (Text):
    1. var r = document.getElementById("result");
    Теперь просто "говорим", что нужно ввести данные (innerHTML) в место, определенное переменной r. Данные должны соответствовать полученному значению при помощи переменной s
    Код (Text):
    1. r.innerHTML = s;
    Вот и все. Если я где то неправильно что-то описал - пожалуйста, поправьте меня. Я только учусь )