В общем разобралася я кое-кака с этими ComboBoxами. НО Теперь они у меня в трёх разных файлах. Выбираем параметр в первом ComboBoxe, жмём OK, появляется второй файл, происходит select и заполняется второй ComboBox, выбираем, жмём, третий. А хотелось бы сделать, чтобы всё это было в одном. Чтобы ComboBoxы обновлялись автоматически, а кнопка OK была одна, когда всё выберешь. Структура таблица такова: PROJECT, LINE, DATASET, DATE, SIZE. Это сейсмические проекты, но чтобы было проще понять представим, что PROJECT / LINE / DATASET - это будто СТРАНА / ГОРОД / УЛИЦА. Сначала выбираем страну, во втором ComboBoxe появятся города, которые есть в этой стране, выбираем город, появятся улицы и потом смотрим на определённую дату количество жителей на данной улице. Вот мои три файла: PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> <form method="post" action="file2.php"> <select name="projs"> <?php try { $db1 = new PDO('sqlite:setsize.db'); $result1 = $db1->query("SELECT PROJECT FROM DATASETSIZE GROUP BY PROJECT ORDER BY PROJECT"); foreach ($result1 as $row1) { echo "<option value='". $row1['PROJECT'] ."'>". $row1['PROJECT'] ."</option>"; } ?> </select> <input type="submit" value="OK"> </form> <?php } catch(PDOException $e) { die($e->getMessage()); } ?> </body> </html> PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> <form method="post" action="file3.php"> <?php echo "project: <b>".$_POST['projs']."</b><br>"; ?> <select name="lines"> <?php try { $db = new PDO('sqlite:setsize.db'); $result2 = $db->query("SELECT LINE FROM DATASETSIZE WHERE PROJECT LIKE '".$_POST['projs']."' GROUP BY LINE"); foreach ($result2 as $row2) { echo "<option value='".$row2['LINE']."'>". $row2['LINE'] ."</option>"; } ?> </select> <input type="submit" value="OK"> </form> <?php } catch(PDOException $e) { die($e->getMessage()); } ?> </body> </html> PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> <form method="post" action="file4.php"> <?php echo "line: <b>".$_POST['lines']."</b><br>"; ?> <select name="datasets"> <?php try { $db = new PDO('sqlite:setsize.db'); $result3 = $db->query("SELECT DATASET FROM DATASETSIZE WHERE LINE LIKE '".$_POST['lines']."' GROUP BY DATASET"); foreach ($result3 as $row3) { echo "<option value='".$row3['DATASET']."'>". $row3['DATASET'] ."</option>"; } ?> </select> Ну тут ещё дату выбираем, но она у меня на javascripte, поэтому я её убрала отсюда, чтобы не загромождать листинг. <input type="submit" value="OK"> </form> <?php } catch(PDOException $e) { die($e->getMessage()); } ?> </body> </html> И вот как бы это всё в один файл запихать? Чтобы с одной кнопкой OK. Точнее запихать-то я пробовала, но, кроме первого ComboBoxa, ничего не работает. К тому же, если в третий файл запихнуть $_POST['projs'].", то он оказывается уже пустым.
Видимо 22 июня сказывается. Всех, блин, убили. Ладно. Тогда хотя бы подскажите как из первого файла в третий передать projs. Во втором файле $_POST['projs'] - нормальный, а в третьем - пустой Делаю во втором файле переприсваивание: $curproj = $_POST['projs'] Во втором файле curproj - нормальный с нужным значением, а в третьем и $curproj - пустой и $_POST['curproj'] - пустой. Присваивание делала и в форме и за формой - результат одинаковый.
Для php - каждый файл это новый вызов, новое обращение к серверу. И третий файл о первом ничего знать не знает, не говоря уже о каких-то там переменных. Где хранить информацию между запросами - тут куча вариантов - БД - сессии - куки - файлы - передача всех переменных в новом ГЕТ/ПОСТ запросе В вашем варианте я бы выбрал сессии
Ну я же во втором файле уже в форме с методом post вставляю присваивание: PHP: <form method="post" action="file3.php"> <?php { echo "project: <b>".$_POST['projs']."</b><br>"; $curproj = $_POST['projs'] ; echo "project: <b>".$curproj."</b><br>"; } ?> <select name="lines"> <?php try { $db = new PDO('sqlite:setsize.db'); $result2 = $db->query("SELECT LINE FROM DATASETSIZE WHERE PROJECT LIKE '".$_POST['projs']."' GROUP BY LINE"); #$result2 = $db2->query("SELECT LINE FROM DATASETSIZE GROUP BY LINE"); foreach ($result2 as $row2) { #echo "line: <b>". $row2['LINE'] ."</b><br>"; echo "<option value='".$row2['LINE']."'>". $row2['LINE'] ."</option>"; } ?> </select> <input type="submit" value="OK"> </form> Почему же $_POST['lines'] передаётся в третий файл, а $_POST['curproj'] не передаётся? А можно чуть подробнее? Сессий ещё никогда не касалась. В принципе, поэтому и хотелось всё в один файл соединить, чтобы не было вот этих ненужных пересылок данных через 3 файла.
чему присваивается? При отправке формы в массиве пост передаются значения элементов формы. К какому элементу формы относится $curproj ? (подсказка - ни к какому, просто выводится как текст.) В приведенном куске кода из элементов формы у вас только <select name="lines"> и <input type="submit" value="OK"> Вот в посте и будет $_POST['lines'], а сабмита по ходу не будет, так как у него даже имени нет) В работе с сессиями ничего сложного нет Есть 2 обязательных момента. 1) До любой работы с $_SESSION надо вызывать session_start(); можете это в самом начале скрипта делать, после <?php 2) session_start(); нужно вызывать ДО любого вывода, т.е. до html-кода, до echo, до header() Опять же - самое место после <?php Главное чтобы перед <?php не было пробелов, html-кода и прочее А дальше всё просто - $_SESSION['var'] = 123; - записать в сессию echo $_SESSION['var'] - например вывести на экран переменную
Поняла. И сразу возник дурацкий вопрос: А можно создать какой-то невидимый элемент формы? Его не будет видно, а через него будет передаваться переменная. Ну это я так, для общего развития спросила. А вообще пошла тренироваться с сессиями. Спасибо за объяснение. А какова жизнь сессии? То есть пользователь выбрал какой-то проект, у него присвоился curproj, а потом он тупо в браузере нажал назад, попал опять в первый файл и выбрал другой проект - curproj поменяется?
init01 Да можно. <input type="hidden" name="projs" value="<?php echo $_POST['projs'];?>"> Время жизни сессии в php.ini настраивается Переменная сессии меняется каждый раз, когда ты её переприсваиваешь) Или я не понял вопроса)
ВСЁ ГЕНИАЛЬНОЕ - ПРОСТО! И я, конечно же, гениальна. Соединила всё в один файл с помощью обычных фреймов. Мне все говорили, что фреймы - это прошлый век, что они скоро отомрут, а я вот вспомнила про них, взяла и применила их для своей задачи: HTML: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Size of Datasets on Period of Dates</title> </head> <FRAMESET rows=20%,80% frameborder=0> <FRAMESET COlS=25%,25%,50% frameborder=0> <FRAME SRC="datasets1.php" NAME="frame1"> <FRAME SRC="" NAME="frame2"> <FRAME SRC="" NAME="frame3"> </FRAMESET> <FRAME SRC="" NAME="frame4"> </FRAMESET> </html> А в каждом файле в form вставляю target="frame№". Получилось как раз так, как я это всё видела в голове.
init01 фреймы не любят за: 1. - они игнорируются поисковыми системами 2. - на некоторое содержимое, сгенерированное во фрейме, нельзя дать ссылку 3. - они устарели морально а так вариант с фреймами вполне работоспособный всё гениальное просто, но не всё простое - гениально