За последние 24 часа нас посетили 18075 программистов и 1599 роботов. Сейчас ищут 893 программиста ...

Как передать параметр из одного ComboBoxa в другой?

Тема в разделе "PHP для новичков", создана пользователем init01, 9 июн 2011.

  1. init01

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

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Добрый день, товарищи!

    Есть у меня у меня база sqlite, в которой, к примеру, три поля: PROJECT, DATE и SIZE.
    Сначала я написала простенькую phpшку, где пользователи руками забивали имя проекта или % (все проекты) и дату (или даты от и до) и у них появлялась табличка сколько их проекты занимают места на диске.
    Что-то типа этого:

    PHP:
    1. <?php
    2. try
    3. {
    4. $db = new PDO('sqlite:pr_size.db');
    5. $result = $db->query("SELECT PROJECT, DATE, SIZE FROM PRSIZE WHERE PROJECT LIKE '".$_POST['proj']."' AND DATA>=".$_POST['dateot']." AND DATA<=".$_POST['datedo']." GROUP BY PROJECT, DATE");
    6. if ($_POST['selectab'])
    7.  {
    8. echo '<table border="1"><tr><td>PROJECT</td><td>DATE</td><td>SIZE</td></tr>';
    9. foreach ($result as $row)
    10.    {
    11. echo '<tr><td>' . $row['PROJECT'] . '</td><td>' . $row['DATE'] .'</td><td>'. $row['SIZE'] .'</td></tr>' ;
    12.    }
    13. echo '</table>';
    14.  }
    15. else
    16.  {
    17. ?>
    18. <form method="post">
    19. Project <input name="proj" type="text" />
    20. Date from  <input id="dateot" name="dateot" type="text" value="20100114" /> to  <input id="datedo" name="datedo" type="text" />
    21. <input type="submit" name="selectab" value="OK">
    22. </form>
    23. <?php
    24.  }
    25. }
    26. catch(PDOException $e)
    27. {
    28. die($e->getMessage());
    29. }
    30. ?>
    Всё было хорошо.
    Но вдруг этим пользователям захотелось глубины анализа. Они теперь хотят видеть на две поддиректории сниз.
    Я-то в базу столбцы добавила, теперь их пять: PROJECT, LINE, SETS, DATE и SIZE. База уже несколько дней заполняется.
    Но теперь в самой html-форме неудобно все названия забивать руками, ибо у каждого PROJECT свои LINE, а у каждого LINE свои SETS, и все-то их не упомнишь.
    Поэтому я решила попробовать что такое ComboBox.

    Написала вот такую штуку:

    PHP:
    1. <select name="projects">
    2. <?php
    3. try
    4. {
    5. $db = new PDO('sqlite:pr_size.db');
    6. $result = $db->query("SELECT PROJECT FROM PRSIZE GROUP BY PROJECT ORDER BY PROJECT");
    7. foreach ($result as $row)
    8. {
    9. echo "<option value='". $row['PROJECT'] ."'>". $row['PROJECT'] ."</option>";
    10. }
    11. ?>
    12. </select>
    Она работает. То есть список проектов появляется.
    НО
    Как теперь вытащить то название проекта, которое выберет пользователь, и передать в следующий ComboBox для обработки следующего запроса:

    PHP:
    1. SELECT LINE FROM PRSIZE WHERE PROJECT LIKE '".$_POST['вот тут выбранный проект']."' GROUP BY LINE ORDER BY LINE
    ?
    А потом из этого в следующий:

    PHP:
    1. SELECT SETS FROM PRSIZE WHERE PROJECT LIKE '".$_POST['вот тут выбранный проект']."' AND LINE LIKE '".$_POST['вот тут выбранная линия']."' ORDER BY SETS
    ?

    Я даже не могу въехать можно ли это сделать в одном php-файле или надо делать несколько, но тогда как между ними передавать параметры и не будет ли это слишком громоздко?

    Всё работает в локальной сети, поэтому скорость как бы не очень важна, точнее она не на первом месте.
     
  2. init01

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

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Да ладно?
    Неужель никто такое не применяет?
    Или я не в том разделе просто спрашиваю?

    В поиске, естественно, была, если кто-то думает, что я ленивая.
    Нашла очень смешные противоречивые ответы.
    В одном месте пишут:
    "Никак, применяйте AJAX."
    А в другом то, что меня более всего умиляет в умниках:
    "В поиск. Много раз обсуждалось."
    Бессылочно, безапеляционно и тема закрыта. Я плясала.

    В общем, у меня появился другой вариант.
    Может посоветуете как его развить?
    Если я применю не ComboBox, а обычное поле, но после ввода первого символа, будут появляться все возможные варианты.
    Или это ещё замороченней вариант?
     
  3. engager

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

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    совершенно точно можно сказать, что ВЕСЬ сайт можно уместить в один php-файл, даже картинки и прочий контент. то, что скорее всего получиться громоздкий - это да.

    PHP:
    1. $_POST['вот тут выбранный проект'].
    что, вот прям так? или все-таки
    PHP:
    1. $_POST['projects']
    ?

    Смысл фразы не ясен. две поддиректории сниз - это директории на два уровня выше директории проекта? какая вообще связь между базой данных и структурой файловой системы? Имя проекта - это имя директории на диске?
    учитесь излагать грамотно свои мысли ;)
     
  4. init01

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

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Пробовала - не катит.
    Точнее даже не так. Я думаю, что не катит, ибо
    во-первых, второй ComboBox даже не появляется.
    во-вторых, надо же каким-то образом делать обновление странички, чтобы запрос ушёл на сервер и вернулся с обновлённым данными для второго ComboBox.

    Я очень прекрасно мысли излагаю. Как мне кажется. Но попробую ещё раз.
    На сервере структура директорий такова:
    /PROJECT/LINE/SETS
    У каждого PROJECT могут совершенно разные LINE, а у LINE совершенно разные SETS.
    Если провести ассоциацию, то это как-будто бы
    /СТРАНА/ГОРОД/УЛИЦА

    НО ЭТО ВСЁ НЕВАЖНО

    Потому что на сервере я скриптом все данные прекрасно загоняю в базу sqlite и они там хранятся в виде:
    PROJECT, LINE, SETS, DATE и SIZE
    И теперь необходимо работать только с базой и этими данными.

    Раньше в базе было только
    PROJECT, DATE и SIZE
    и я считала только размеры PROJECT, чтобы пользователи сами следили как быстро раздувается их проект.
    Но оказалось, что им неудобно лазить в каждом проекте и искать какой же SETS раздулся.
    Поэтому они хотят, чтобы сразу считались размеры SETS.
    Размеры-то уже считаются. База ежедневно пополняется данными.

    НО

    Как теперь их адекватно вытащить?

    Опять же, если говорить ассоциативно, то я хочу сделать 3 ComboBoxa типа
    Сначала в первом ComboBoxe выбираешь страну (PROJECT),
    потом идёт SELECT какие есть города (LINE) в этой стране и заполняется второй ComboBox,
    потом во втором ComboBoxе выбираем город (LINE) и соответственно заполняется третий ComboBox улицами (SETS).

    Задача, конечно, будет немного сложнее, ибо надо смотреть и один SETS за период времени и несколько SETS на определённый день, но основа для всего будет именно такая, состоящая из ComboBoxoв.

    P.S. Кстати, если вся сложность в том, что надо делать SELECT из базы, то я могу, чтобы скрипт заранее подготавливал текстовый документ со структурой /PROJECT/LINE/SETS. Только вот в каком виде?
     
  5. init01

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

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Появился кое-как второй ComboBox, но он пустой и как передать туда значения - не пойму.

    PHP:
    1. <select name="projects">
    2. <?php
    3. try
    4. {
    5. $db = new PDO('sqlite:pr_size.db');
    6. $result1 = $db->query("SELECT PROJECT FROM PRSIZE GROUP BY PROJECT ORDER BY PROJECT");
    7. foreach ($result1 as $row1)
    8. {
    9. echo "<option value='". $row1['PROJECT'] ."'>". $row1['PROJECT'] ."</option>";
    10. }
    11. ?>
    12. </select>
    13. <select name="lines">
    14. <?php
    15. print_r($_REQUEST);
    16. $result2 = $db->query("SELECT LINE FROM PRSIZE WHERE PROJECT LIKE '. $projects .' GROUP BY LINE ORDER BY LINE");
    17. foreach ($result2 as $row2)
    18. {
    19. echo "<option value='". $row2['LINE'] ."'>". $row2['LINE'] ."</option>";
    20. }
    21. ?>
    22. </select>