Добрый день, товарищи! Есть у меня у меня база sqlite, в которой, к примеру, три поля: PROJECT, DATE и SIZE. Сначала я написала простенькую phpшку, где пользователи руками забивали имя проекта или % (все проекты) и дату (или даты от и до) и у них появлялась табличка сколько их проекты занимают места на диске. Что-то типа этого: PHP: <?php try { $db = new PDO('sqlite:pr_size.db'); $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"); if ($_POST['selectab']) { echo '<table border="1"><tr><td>PROJECT</td><td>DATE</td><td>SIZE</td></tr>'; foreach ($result as $row) { echo '<tr><td>' . $row['PROJECT'] . '</td><td>' . $row['DATE'] .'</td><td>'. $row['SIZE'] .'</td></tr>' ; } echo '</table>'; } else { ?> <form method="post"> Project <input name="proj" type="text" /> Date from <input id="dateot" name="dateot" type="text" value="20100114" /> to <input id="datedo" name="datedo" type="text" /> <input type="submit" name="selectab" value="OK"> </form> <?php } } catch(PDOException $e) { die($e->getMessage()); } ?> Всё было хорошо. Но вдруг этим пользователям захотелось глубины анализа. Они теперь хотят видеть на две поддиректории сниз. Я-то в базу столбцы добавила, теперь их пять: PROJECT, LINE, SETS, DATE и SIZE. База уже несколько дней заполняется. Но теперь в самой html-форме неудобно все названия забивать руками, ибо у каждого PROJECT свои LINE, а у каждого LINE свои SETS, и все-то их не упомнишь. Поэтому я решила попробовать что такое ComboBox. Написала вот такую штуку: PHP: <select name="projects"> <?php try { $db = new PDO('sqlite:pr_size.db'); $result = $db->query("SELECT PROJECT FROM PRSIZE GROUP BY PROJECT ORDER BY PROJECT"); foreach ($result as $row) { echo "<option value='". $row['PROJECT'] ."'>". $row['PROJECT'] ."</option>"; } ?> </select> Она работает. То есть список проектов появляется. НО Как теперь вытащить то название проекта, которое выберет пользователь, и передать в следующий ComboBox для обработки следующего запроса: PHP: SELECT LINE FROM PRSIZE WHERE PROJECT LIKE '".$_POST['вот тут выбранный проект']."' GROUP BY LINE ORDER BY LINE ? А потом из этого в следующий: PHP: SELECT SETS FROM PRSIZE WHERE PROJECT LIKE '".$_POST['вот тут выбранный проект']."' AND LINE LIKE '".$_POST['вот тут выбранная линия']."' ORDER BY SETS ? Я даже не могу въехать можно ли это сделать в одном php-файле или надо делать несколько, но тогда как между ними передавать параметры и не будет ли это слишком громоздко? Всё работает в локальной сети, поэтому скорость как бы не очень важна, точнее она не на первом месте.
Да ладно? Неужель никто такое не применяет? Или я не в том разделе просто спрашиваю? В поиске, естественно, была, если кто-то думает, что я ленивая. Нашла очень смешные противоречивые ответы. В одном месте пишут: "Никак, применяйте AJAX." А в другом то, что меня более всего умиляет в умниках: "В поиск. Много раз обсуждалось." Бессылочно, безапеляционно и тема закрыта. Я плясала. В общем, у меня появился другой вариант. Может посоветуете как его развить? Если я применю не ComboBox, а обычное поле, но после ввода первого символа, будут появляться все возможные варианты. Или это ещё замороченней вариант?
совершенно точно можно сказать, что ВЕСЬ сайт можно уместить в один php-файл, даже картинки и прочий контент. то, что скорее всего получиться громоздкий - это да. PHP: $_POST['вот тут выбранный проект']. что, вот прям так? или все-таки PHP: $_POST['projects'] ? Смысл фразы не ясен. две поддиректории сниз - это директории на два уровня выше директории проекта? какая вообще связь между базой данных и структурой файловой системы? Имя проекта - это имя директории на диске? учитесь излагать грамотно свои мысли
Пробовала - не катит. Точнее даже не так. Я думаю, что не катит, ибо во-первых, второй 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. Только вот в каком виде?
Появился кое-как второй ComboBox, но он пустой и как передать туда значения - не пойму. PHP: <select name="projects"> <?php try { $db = new PDO('sqlite:pr_size.db'); $result1 = $db->query("SELECT PROJECT FROM PRSIZE GROUP BY PROJECT ORDER BY PROJECT"); foreach ($result1 as $row1) { echo "<option value='". $row1['PROJECT'] ."'>". $row1['PROJECT'] ."</option>"; } ?> </select> <select name="lines"> <?php print_r($_REQUEST); $result2 = $db->query("SELECT LINE FROM PRSIZE WHERE PROJECT LIKE '. $projects .' GROUP BY LINE ORDER BY LINE"); foreach ($result2 as $row2) { echo "<option value='". $row2['LINE'] ."'>". $row2['LINE'] ."</option>"; } ?> </select>