пересылка данных из формы

Sefrik

Guest
пересылка данных из формы

Есть форма для регистрации. Если в ней заполнить все поля кроме, например, одного какого-нибудь и нажать "сохранить", то скрипт перенесет обратно на эту же страницу, а в полях формы все данные, которые были введены, сохраняться! И останеться заполнить информацией недостающее(ие) поле(я)!

Но!
В этой форме есть 2 списка <select></select>.
1 список - страна
2 список - города в выбранной стране.

Если вдруг выбрал другую страну, то страница обновляется из из БД во 2-ой список заносятся города, которые находятся в выбранной стране!

После выбора другой страны, страница обновилась, но данных, которые вводились в форму, нет!

Обновлятся страницу заставляет javascript:
<select name="country_id" onChange="top.location.href=this.options[this.selectedIndex].value">
........
........
........
........
</select>

Теперь вопрос: как сохранить данные, введенные в форму, если пользователь выбрал другую страну и страница обновилась????
 

clevel

Новичок
нужно делать не top.location.href при onChange, а субмит всей формы, при этом в обрабатыващем скрипте анализировать country_id.. или в яваскрипте вытаскивать значения всех переменныхи передавать их в top.location.href(метод гет)
 

GeT

Новичок
Как сделал я (мож и коряво но мне нравится)

Есть 2 функции: рег и субит рега.
Первая может принимать как параматры номер error_code и массив неправильно заполненных полей.
Тоесть
PHP:
function user_register($error=false,$em_fields=false)
В этой функции выводится форма регистрации.
Соответственно, если в переменных $_POST['имя_поля'] что-то есть, мы в value поля ставим это значение.

Когда человек нажал submit вызывается вторая функция.
В ней делается проверка ввода и если что-то введено неверно, она вызывает еще раз функцию user_register с нужным error_code и массивом незаполненных полей.
Соответственно, POST-данные никуда не деваются.

Мне этот вариант нравится, хотя наверна он "через ж*пу"
 

Sefrik

Guest
ФАНАТ:
это, безусловно, интересно (про ссылку, которую ты опубликовал), но нового для себя я там почти ничего не узнал.

Понимаешь, проблема в другом: если нажимать на кнопку submit, то все данные сохраняется и скрипт обрабатывает форму! А если выбрать из списка select некий элемент, то страница обновляется через javascript, соответственно скрипт не обрабатывает никакую форму!

Есть выход, который предложил Clevel: написать javascript-функцию и все данные передавать через top.location.href.
Но это громоздко и непрактично.
Вот мне и нужен другой способ, более гибкий и чтобы через PHP.
 

Фанат

oncle terrible
Команда форума
какая разница, через что обновляется страница?
тебе надо нарисовать селект и воткнуть в нужное место селектед. Я правильно понимаю?
ну и какая проблема с этим?
 

Sefrik

Guest
Не...

есть форма, в которой text, textarea, select и 2 select'а

когда пользователь открывает страницу (вот только-только открыл), то перед ним пустая форма, которую нужно заполнить. Т.к. он только вошел на страницу, то в списке 1 (страна) автоматически выбирается 1 страна в БД. Соответственно во 2 список заносятся все города из БД, где id страны = id выбранной ранее страны. Вот! Если нажимаешь "сохранить", то если все поля заполнены, то информация заносится в БД. Если хотя бы одно поле не заполнено, то переход осуществляется на туже самую страницу (т.е. PHP_SELF) и значение всех заполненных полей сохраняются! Это отлично!

Но если пользователь заполнил все поля и выбрал какую-нить другую страну, то страница перезагружается и во второй список загружаются города, которые находятся в выбранной стране!

P.S. Обновление страницы сделано для того, чтобы не было такого, что в 1-ый список загружается 193 страны и во 2-ой - 100.000 городов

Так вот вопрос: как сделать, чтобы после обновления страницы данные сохранялись, при условии, что не происходит обработки формы. Только через GET я так понимаю.
 

Фанат

oncle terrible
Команда форума
чувак.
ты, по-моему, не догоняешь. а точнее - не хочешь догнать.

отправили тебе форму.
у тебя в массиве ПОСТ есть выбор первого селекта.
ЕСТЬ? ну так кто тебе мешает залезть в базу и сформировать второй?!

-~{}~ 18.06.05 21:59:

Только через GET я так понимаю.
я правильно понимаю, что ты собрался через гет гнать все выбранные города? Ты хорошо подумал?
 

nikit87

Новичок
делай location назад с где гетом передаешь параметры

////
не заметил что там городов кучу нуна писать .. извиняюся)
 

Фанат

oncle terrible
Команда форума
не за что извиняться.
там абсолютно НИКАКОЙ разницы.

-~{}~ 18.06.05 22:02:

до меня, кажется, дошло.
что именно ему непонятно.
он думает, что если он второй селект формирует яваскриптом, то руками его уже написать нельзя.
 

nikit87

Новичок
Фанат
я просто до сих пор не понимаю что он хочет сделать конкретно и что его волнует.
 

Фанат

oncle terrible
Команда форума
хочет он решить классическую задачу - вывод заполненной формы при ошибке.
но его ставит в тупик наличие динамического селекта в форме, формируемого на основании выбора в другом поле.

и он думает, что если селект формируется динамически, то написать его руками, как обычный селект, заполнив в пхп из базы, уже нельзя.
странная фантазия.

при выводе формы с ошибкой человек получит два заполненных РУКАМИ селекта.
по он чендж в первом сработает его динамика и содержимое второго изменится.
не будет человек трогать селекты - так и уйдут они на сервер.
всё просто.
 

SelenIT

IT-лунатик :)
Фанат
Насколько я понял, "динамика" тут реализована как раз через перезагрузку всей страницы. И автор упорно хочет обработать эту промежуточную перезагрузку без сабмита, т.к. сабмит у него однозначно ассоциирован с полным и окончательным заполнением этой формы.

Честно говоря, лично у меня вызывает большие сомнения юзабельность как одного, так и другого варианта. Я бы все же рекомендовал смотреть в сторону remote scripting-а...
 

nikit87

Новичок
мдааа.. когда задают понятный вопрос, получают и понятный ответ... больше сказать нечего))
 

Sefrik

Guest
Вот SelenIT догоняет, что мне нужно!
А Фанат знает PHP, но не может догнать.

Фанат: есть 2 селекта: в 1-ом страны, во 2-ом города!
Понимаешь, человек живет не в России, а в Белоруссии, он выбирает в селекте стран "Белоруссия", но при этом города должны поменяться во 2-ом селекте ("город")!!! При этом сабмит он не нажимает, а при выборе страны страница перезагружается сама! Получается такой вид: index.php?country_id=5 , например! Второй список формируется: запрос MySQL: выбери все города, где id страны = 5. Второй список заполняется городами!

И вот после этого пользователь нажимает сабмит ("Сохранить данные").

Вот что мне надо.
 

SelenIT

IT-лунатик :)
Sefrik
Простейший вариант, который тебе тут предлагал clevel в первой части своего поста и который везде подразумевал Фанат - при выборе страны тоже делать сабмит с помощью JS. При этом список городов, очевидно, будет не сооответствовать выбранной стране - это можно использовать, чтобы различать "окончательный правильный" сабмит и "промежуточный". А другие поля, как справедливо подмечено, сохранятся в массиве POST.

Но лично мне бы как юзеру не понравилось, если бы страница начала вся перезагружаться в процессе заполнения мной формы. Поэтому рекомендую ознакомиться, например, с http://www.dklab.ru/chicken/nablas/41.html.
 
Сверху