Автор Тема: Проблема с формой  (Прочитано 12735 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн oksale

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с формой
« : 04 Января 2003, 20:46:41 »
Может, вопрос банален, но я только начинаю :(
Проблема вот в чем:
я пишу анкету для ввода инф-ции в БД. Причем анкета разделена на информационные блоки, и каждый блок - в своей форме. Итого у меня их(форм) четыре штуки. И здесь возникают две проблемы:

1. В первой форме form1 я получаю идентификатор из таблицы, который потом использую в форме form2. Но вторая форма не видит переменной первой формы. Вопрос: как мне ее достать?

2. На каждой форме у меня есть кнопка подтверждения ввода, то есть данные вводятся не все сразу, а последовательно. Когда я подтверждаю ввод данных первой формы, я сделала так, чтобы они сохранялись на форме. Но когда я подтверждаю ввод на второй форме, все элементы первой формы очищаются, а мне нужно, чтобы они оставались. И если я нажму кнопку на третьей форме, данные на первой и второй должны сохраняться. Как это делается??

Очень нужно, а найти ничего что-то не могу.
Благодарю за помощь.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблема с формой
« Ответ #1 : 04 Января 2003, 21:09:14 »
очень интересное описание.
а почему не записывать в базу данные из заполненных форм?

переменную достать просто. надо ее просто передать в скрипт.
Вот тебе выдержка из фака.
Замечание: куки использовать не стоит
Цитировать
Отличие веб-приложения от обычной программы
Начиная писать программы для веба, многие начинающие программисты сталкиваются с такой ошибкой. Они рассматривают систему "браузер-сервер", как обычное приложение. Интерактивное. Нажал кнопку - система среагировала. Провел мышкой - среагировала. Вся информация, которая доступна клиенту - доступна и программе, программа все время находится в памяти.

Так вот, в веб-программировании это не так.
Сервер и браузер общаются, посылая друг другу запросы по особому протоколу - HTTP. Соединение может инициировать только браузер. Он посылает серверу запрос - показать такой-то файл. Сервер клиенту файл посылает.
Только так и происходит. Клиент запросил - сервер отдал. И забыл сразу о клиенте. Остюда становится понятным ответ на вопрос, можно ли точно узнать, сколько юзеров сечас на сайте. Нельзя. потому, что "на сайте" нету ни одного. Они соединяются, запрашивают страницу, и отсоединяются. Не имеют постоянного оединения с сервером, как, например, игроки в Кваку. Узнать можно только примерно, записывая время каждого соединения и выбирая записи за определенный промежуток времени.

Отсюда становится ясно, что сервер может узнать о клиенте очень мало. Только то, что клиент пришлет в HTTP-запросе. Разрешения экрана там нет ;-)
Все, что сервер может знать о клиенте, можно посмотреть командой phpinfo()

Как работает РНР, где он выполняется?
РНР выполняется на сервере. Браузер посылает серверу запрос на страницу с php кодом. Сервер отдает эту страницу на исполнение интерпретатору PHP, интерпретатор генерирует HTML код, отдает серверу, а сервер посылает клиенту. Никакого РНР кода в брау
зер не попадает (это важно! Это значит, что увидеть исходный код PHP скрипта невозможно!). Единственный способ отправить что-то скрипту - это кликнуть по ссылке или нажать на кнопку в форме. Так, чтобы РНР обрабатывал какие-то действия пользователя в браузере - невозможно. РНР остался на сервере, ждать новых запросов с данными для обработки. PHP, но не скрипт! Скрипт, который выполнялся, отдавая пользователю страницу, завершил работу. Все данные, которые были в нем - пропали. Именно поэтому, если какая-то переменная нужна при последующих вызовах скрипта, ее надо этому скрипту передать снова.

Способы общения браузера с сервером.
Способов, предоставляемых протоколом HTTP, немного. Это важная информация. Никаких других способов нет.
Браузер может отправлять информацю серверу следующими способами:
GET - это когда данные передаются в адресной строке, например, когда пользователь жмет ссылку.
POST - когда он нажимает кнопку в форме.
Cookie - если сервер поставил куку, и она не устарела, то браузер отсылает ее при каждом обращении к серверу.
HTTP authentication - если сервер запрашивал HTTP авторизацию, то браузер при каждом обращении шлет введенные логин и пароль.
Все остальное - лишь использование этих методов. Например, когда запрос посылает яваскрипт, или когда по ссылке запрашивается скрипт.

РНР может посылать HTTP заголовки двумя командами - header и setcookie.
Я очень рекомендую программу FlashGet, которая, скачивая файлы с сервера, показывает все HTTP заголовки - и сервера,и клиента. Очень хорошая практика, а так же проверка - что шлет твой скрипт.

--------------------------------------------------------------------------------
Не передаются переменные!!!

Данные в скрипт передаются. Просто начаная с версии 4.1, РНР перестал автоматически назначать их переменным. За это отвечает параметр register_globals в php.ini.
Если register_globals=on, то все полученные скриптом данные будут назначены соответствующим переменным.
Если register_globals=off, то получить значение переменной можно обратившись к массиву, соответствующему способу передачи данных в скрипт.
Например:
Передаем методом GET: script.php?var=value
echo $_GET[\'var\'] напечатает "value".
Подробнее об этом нововведении можно прочитать здесь:http://www.xpoint.ru/archive/topic8/43/8759.html

Системные переменные, такие, как QUERY_STRING, PHP_SELF можно получить с помощью getenv -
getenv(\'PHP_SELF\');
а можно в начале сскрипта написать
extract($_SERVER);
Это будет даже правильнее - потому что переменные окружения затрут все одноименные переменные, если таковые вдруг найдутся.

Оффлайн new

  • .
  • Постоялец
  • ***
  • Сообщений: 135
  • +0/-0
  • 2
    • Просмотр профиля
Проблема с формой
« Ответ #2 : 04 Января 2003, 21:27:12 »
Цитировать
2. На каждой форме у меня есть кнопка подтверждения ввода, то есть данные вводятся не все сразу, а последовательно. Когда я подтверждаю ввод данных первой формы, я сделала так, чтобы они сохранялись на форме. Но когда я подтверждаю ввод на второй форме, все элементы первой формы очищаются, а мне нужно, чтобы они оставались. И если я нажму кнопку на третьей форме, данные на первой и второй должны сохраняться. Как это делается??


Варианты разные есть, и смоей точки зрения, куки возможны конечно, но это не лучший вариант (100% согласен с RomikChef ).
Один из вариантов - сохранять данные в сессии, которые при необходимости будут подставляться в value формы. Пожалуй это даже в данном случае оптимально.
Кроме того конечно можно сохранять данные в БД, что часто, но не всегда, имеет смысл.

Оффлайн Bang

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 120
  • +0/-0
  • 0
    • Просмотр профиля
    • http://anna.comcor.ru
Проблема с формой
« Ответ #3 : 05 Января 2003, 10:09:14 »
Тебе просто надо вместе с данными очередной формы передавать и данные из предыдущих (почему так - тебе очень хорошо привел цитату RomikChef).
Если ты не хочешь сразу писать полученную часть данных в БД, как предложил RomikChef, можно в каждую следующую форму дописывать скрытые поля. Что-то вроде
>


Но это, конечно, только один из вариантов, хотя, может, и самый простой.
best wishes!
bang

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблема с формой
« Ответ #4 : 05 Января 2003, 11:34:46 »
Bang это самый неправильный и бессмысленный способ.

Оффлайн GoBeer

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с формой
« Ответ #5 : 05 Января 2003, 12:05:37 »
RomikChef а почему? Неплохо было-бы после сабмита первой формы яваскриптом установить хидены на второй (если не требуется серверная обработка/проверка данных первой формы). При этом не требуется промежуточная отправка данных на сервер, как в случае с сохранением данных в сессии. И чем этот способ неправильный и бессмысленный?

Оффлайн Bang

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 120
  • +0/-0
  • 0
    • Просмотр профиля
    • http://anna.comcor.ru
Проблема с формой
« Ответ #6 : 05 Января 2003, 12:07:58 »
Цитировать
это самый неправильный и бессмысленный способ.

Действительно, гуру :), объясни, почему?
best wishes!
bang

Оффлайн oksale

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с формой
« Ответ #7 : 05 Января 2003, 13:10:54 »
Результат моих попыток таков:
echo $_GET[\'var\'] - не работает, то есть, если переменная формируется в первой форме, я эту штуку прописываю во второй, чтобы она там сохраняла значение. Но когда нажимаю кнопку обработки второй формы, значение переменной пропадает. Может, я ее не туда сую?

$_GET, getenv(\'PHP_SELF\'); вообще не поняла, как работают, а ссылка не грузится

Hidden оказался самым простым. Но в связи с этим вопрос. Допустим, у меня есть страничка. На ней я нажимаю на какую-то кнопку, и у меня выводится список товаров. Я нажимаю на какой-нибудь товар, у меня появляется список фирм, ну и так далее. То есть у меня инф-ция должна накапливаться. Так мне всю кучу переменных и передавать этим hidden? (вариант с БД мне что-то не очень хочется использовать)

И еще вопрос на другую тему: как в php делается проверка введенных данных? Я нажимаю на кнопку, проверяются все текстовые элементы, и если какой-то не заполнен, на него ставится фокус, и процесс дальше не идет(мне такое нужно).
У меня есть функция, написанная на js. Она у меня корректно работала, если страничка была на html, а ее обработка – на php, то есть два файла получалось. А сейчас я все пишу в одном файле php, и она работает некорректно, то есть говорит, что поле не заполнено, ставит на него фокус, а программа продолжает выполняться дальше.

Оффлайн Bang

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 120
  • +0/-0
  • 0
    • Просмотр профиля
    • http://anna.comcor.ru
Проблема с формой
« Ответ #8 : 05 Января 2003, 13:27:36 »
Цитировать
Так мне всю кучу переменных и передавать этим hidden?

Потому, наверное, RomikChef и сказал, что это плохой способ, что тащить всю эту кучу переменных неудобно, нелогично и некрасиво. Но если ты хочешь обойтись только hidden, наверное, другого выхода нет.
best wishes!
bang

Оффлайн oksale

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с формой
« Ответ #9 : 05 Января 2003, 13:43:38 »
Я не хочу только им обходиться, я просто ничего другого не поняла :))

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Проблема с формой
« Ответ #10 : 05 Января 2003, 14:02:04 »
oksale
А тебе точно нужно, чтобы форма была на нескольких страницах?
На одной, ИМХО, удобнее.
И обрабатывать такое гораздо удобнее.
•••Jah\'d never let us down!•••

Оффлайн oksale

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с формой
« Ответ #11 : 05 Января 2003, 14:09:42 »
вообще-то необязательно, но я хотела бы разобраться, как все это работает

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Проблема с формой
« Ответ #12 : 05 Января 2003, 14:23:42 »
ИМХО самый оптимальный способ - хранить данные в сессии. Тогда можно будет сделать корректный откат к предыдущими страницам, с сохранением информации, и обработать потом можно будет все разом, а не постранично.
•••Jah\'d never let us down!•••

Оффлайн new

  • .
  • Постоялец
  • ***
  • Сообщений: 135
  • +0/-0
  • 2
    • Просмотр профиля
Проблема с формой
« Ответ #13 : 05 Января 2003, 14:33:27 »
oksale
Цитировать
echo $_GET[\'var\'] - не работает

Предположим, что $_GET всё таки в порядке (если нет - то уточни, какая версия PHP тобой используется).
Цитировать
если переменная формируется в первой форме, я эту штуку прописываю во второй, чтобы она там сохраняла значение. Но когда нажимаю кнопку обработки второй формы, значение переменной пропадает. Может, я ее не туда сую?

Допустим ты передаёшь значение переменной из первой формы во вторую (каким способом это возможно уже обсуждалось). Поянтно, что она должна быть проверена после её получения, и в случае необходимости ещё раз передана второй формой или (что ИМХО лучше) получена из сессии или БД.
Посмотри мой первый пост очень внимательно ещё раз:
Цитировать
сохранять данные в сессии, которые при необходимости будут подставляться в value формы

Это один из двух, с моей точки зрения, нормальных вариантов (ещё один - это сохранение данных в БД, что пожалуй ещё лучше, но что бы выбрать один из этих двух вариантов, нужно знать что ты конкретно делаешь) для твоего случая.
И RomikChef тебе огромную цитату привёл.


Цитировать
я хотела бы разобраться, как все это работает

Посмотри ещё раз внимательно тему, все ответы здесь уже есть.

Оффлайн GoBeer

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с формой
« Ответ #14 : 05 Января 2003, 15:21:36 »
oksale, возможно тебе еще рано писать такие вещи... нужно разобраться с пхп поглубже, потренироваться - никакие советы не заменят собственного опыта и понимания "как это всё работает"

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28