[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подстановка в <form action="" данных из $_POST[]
logme
Доброго времени суток.
Прошу помощи в следующей ситуации - имею следующую конструкцию:

<form action="<?php echo $_POST["ta"] ?>" method="post">
<textarea cols="50" rows="1" name="ta"></textarea>
<input type="submit">
</form>

Цель которой следующая: ввод в форму определенного значения, и после нажатия кнопки "Submit Query" должен быть осуществлен переход по ссылке www.servername.com\(значение лежащее в переменной $_POST, которое мы ввели в форму).

Все клево в теории, и все фигово на практике, плоскольку при первом вводе в форму и нажатии на кнопку ничего не происходит, а происходит только уже при повторном нажатии на F5, т.е. судя по всему при первом вводе в форму после нажатия кнопки данные в переменную ПОСТ только помещаются, а при нажатии на Ф5 уже и происходит переход по нужной нам ссылке т.к. данные в ПОСТ-е уже есть.
Вопрос - как победить это? Т.е. чтобы сразу осуществлялся переход по нужной ссылке после нажатия кнопки?

Сопутствующий вопрос - если в свойства формы добавить еще и target="_blank", то проходит переход происходит только по ссылке www.servername.com\ без какого либо значения после слэша. Тоже вопрос - как победить? Т.е. чтобы после слэша было значение которое вводится в форму.



Спустя 8 минут, 33 секунды (12.07.2011 - 19:11) Invis1ble написал(а):
Цитата
Вопрос - как победить это?

использовать javascript, в котором будет по нажатию кнопки будет браться значение из поля ввода и свтавляться в action, а затем и отправляться сама форма
Цитата
Т.е. чтобы после слэша было значение которое вводится в форму.

см. первый пункт (js)

Спустя 2 минуты, 3 секунды (12.07.2011 - 19:13) logme написал(а):
Без Явы совсем не обойтись? Ибо в ней пока что не силен никак, поэтому хотел бы обойтись только средствами ХТМЛ и ПХП. Плюс - у клиента выполнение скрипта может быть отключено.
Есть конечно мысль с хедерами поиграться, но тогда код будет громоздким, что не есть хорошо

Спустя 2 минуты, 56 секунд (12.07.2011 - 19:16) Invis1ble написал(а):
logme
Цитата
Без Явы совсем не обойтись?

по идее можно и обойтись. Например, в action указывать обработчик на "текущем" сервере, там парсить данные из $_POST и отправлять их cURL'ом на нужный сервер с последующим редиректом туда же. Как-то так....

Спустя 3 минуты, 12 секунд (12.07.2011 - 19:19) Winston написал(а):
Цитата (logme @ 12.07.2011 - 19:02)
<form action="<?php echo $_POST["ta"] ?>" method="post">

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

Ну например вот так можно сделать
<form action="" method="post">
<textarea
cols="50" rows="1" name="ta" OnKeyUp="this.form.action = this.value"></textarea>
<input
type="submit">
</form>

Цитата (logme @ 12.07.2011 - 19:13)
Без Явы совсем не обойтись

PS: Ява и яваскрипт совсем разные языки.
PPS: А зачем вам вообще значение для action брать из поля ввода ?



Спустя 46 секунд PHPprogramer написал(а):
Цитата (Invis1ble @ 12.07.2011 - 19:16)
Например, в action указывать обработчик на "текущем" сервере, там парсить данные из $_POST и отправлять их cURL'ом на нужный сервер с последующим редиректом туда же.

Вот это жесть laugh.gif

Спустя 58 секунд (12.07.2011 - 19:20) Invis1ble написал(а):
Цитата
А зачем вам вообще значение для action брать из поля ввода ?

кстати да smile.gif
??

PHPprogramer
Цитата
Вот это жесть

ну на самом деле, не такая уж и )
есть идея получше?

Спустя 54 секунды (12.07.2011 - 19:21) logme написал(а):
Я просто подумал - теже поисковики типа яндексов, буублов и прочей ерунды, тоже вроде представляют собой некоторую форму ввода с кнопкой "НАйти" и работают при этом без скриптов и прочего, только у них URL модифицируется и становиться чем-то www.yandex.ru\search="здесь введенное пользователем значение"
Вот примерно такой эффект и нужен.

Ответ на вопросы выше biggrin.gif Собственно, для чего в action нужны введенные данные smile.gif

Спустя 1 минута, 34 секунды (12.07.2011 - 19:22) Invis1ble написал(а):
logme
Цитата
Я просто подумал - теже поисковики типа яндексов, буублов и прочей ерунды, тоже вроде представляют собой некоторую форму ввода с кнопкой "НАйти" и работают при этом без скриптов и прочего, только у них URL модифицируется и становиться чем-то www.yandex.ru\search="здесь введенное пользователем значение"
Вот примерно такой эффект и нужен.

это делается с помощью <form action="script.php" method="get"> wink.gif

Спустя 1 минута, 41 секунда (12.07.2011 - 19:24) logme написал(а):
С Гет-ом тоже пробовал, но он пихает туда имена инпутов, в итоге получается совсем каша. Хотя я подозревал что истина должна быть в нем.

Спустя 1 минута, 14 секунд (12.07.2011 - 19:25) Invis1ble написал(а):
Цитата
имена инпутов

в смысле? а что там должно еще быть?

Спустя 2 минуты, 35 секунд (12.07.2011 - 19:28) Winston написал(а):
Цитата (Invis1ble @ 12.07.2011 - 19:16)
по идее можно и обойтись. Например, в action указывать обработчик на "текущем" сервере, там парсить данные из $_POST и отправлять их cURL'ом на нужный сервер с последующим редиректом туда же

Цитата (Invis1ble @ 12.07.2011 - 19:20)
есть идея получше

На OnKeyUp вешаем ф-ю которая отправляет данные к php с помощью AJAX и возвращает то, что нужно из post.
Но это тоже полная бредятина biggrin.gif
Тот пример кода что я выше привел, делает то что нужно. И не надо ничего в PHP посылать и что-то принимать.

Спустя 57 секунд (12.07.2011 - 19:29) logme написал(а):
Ну поскольку у меня цель получить ссылку вида примерно: www.someserver.com/"введенное в форму значение", а на выходе я получаю примерно следующее: www.someserver.com/?ta=123 (123 я ввел в форму, ta соответственно имя инпута).

Спустя 32 секунды (12.07.2011 - 19:29) Invis1ble написал(а):
PHPprogramer
Цитата
Тот пример кода что я выше привел, делает то что нужно. И не надо ничего в PHP посылать и что-то принимать.

это понятно, но ТС пишет, что js не катит smile.gif

Спустя 47 секунд (12.07.2011 - 19:30) logme написал(а):
И да - обязательное условие - безскриптовое выполнение smile.gif Поскольку у меня принцип - у пользователя все выполнение скриптов может быть вырублено.

Спустя 4 минуты, 53 секунды (12.07.2011 - 19:35) Invis1ble написал(а):
logme
тогда наверное так:
1. ставишь в action адрес на свой обработчик
2. в обработчике принимаешь данные и посылаешь заголовок Location:
header('Location: www.someserver.com/' . $_POST['ta']);

Спустя 3 минуты, 44 секунды (12.07.2011 - 19:39) logme написал(а):
Invis1ble - выимеете в виду вынести все это в отдельный файл? Поскольку с хедером-локейшен я тоже игрался, но это приводило к тому, что даже при первоначальной загрузке сразу происходило срабатывание хедера и страница редиректилась куда нужно, но без каких либо параметров после слэша. Т.е. на выходе имел просто редирект на www.someserver.com
Хотя поколдовать попробую.

Спустя 45 секунд (12.07.2011 - 19:39) killer8080 написал(а):
Цитата (logme @ 12.07.2011 - 19:29)
Ну поскольку у меня цель получить ссылку вида примерно: www.someserver.com/"введенное в форму значение", а на выходе я получаю примерно следующее: www.someserver.com/?ta=123 (123 я ввел в форму, ta соответственно имя инпута).

Цитата (logme @ 12.07.2011 - 19:30)
И да - обязательное условие - безскриптовое выполнение

Можно так
<?php
if(!empty($_POST['ta'])){
header("Location:http://www.someserver.com/".$_POST['ta']);
exit();
}

?>
<form action="" method="post">
<
textarea cols="50" rows="1" name="ta"></textarea>
<
input type="submit">
</
form>

Спустя 2 минуты, 46 секунд (12.07.2011 - 19:42) logme написал(а):
killer8080 - чего-то вообще нифига не происходит. Форма глотает введенные значения, перегружается, но никуда не двигается.
Да и как я понял такой скрипт тоже не выполнится, т.к. редирект будет только если в ПОСТ-е будут данные кот мы ввели в форму, а if их увидит уже только после первого сабмита, т.е. теоретически тыкать кнопку нужно два раза.

Спустя 1 минута, 22 секунды (12.07.2011 - 19:44) killer8080 написал(а):
logme
а ошибки выдаёт?

Спустя 25 секунд (12.07.2011 - 19:44) logme написал(а):
Нет, никаких ошибок, просто ест значение и все smile.gif

Спустя 46 секунд (12.07.2011 - 19:45) Winston написал(а):
logme
А вы исправили
Цитата (killer8080 @ 12.07.2011 - 19:39)
www.someserver.com

На свое ?
Если на локалке то просто оставить
header("Location:".$_POST['ta']);

Спустя 42 секунды (12.07.2011 - 19:45) Invis1ble написал(а):
logme
Цитата
чего-то вообще нифига не происходит. Форма глотает введенные значения, перегружается, но никуда не двигается.

быть такого не может. Посмотри через firebug, я щас ради интереса попробовал - все работает

Спустя 42 секунды (12.07.2011 - 19:46) Winston написал(а):
Цитата (logme @ 12.07.2011 - 19:42)
т.е. теоретически тыкать кнопку нужно два раза.

А практически вводите в поле адрес, тыкаете кнопку, и вас перенаправляет на тот адрес который вы ввели



Спустя 36 секунд PHPprogramer написал(а):
Цитата (Invis1ble @ 12.07.2011 - 19:45)
попробовал - все работает

Аналогично

Спустя 2 минуты, 41 секунда (12.07.2011 - 19:49) killer8080 написал(а):
Цитата (logme @ 12.07.2011 - 19:42)
Да и как я понял такой скрипт тоже не выполнится, т.к. редирект будет только если в ПОСТ-е будут данные кот мы ввели в форму, а if их увидит уже только после первого сабмита, т.е. теоретически тыкать кнопку нужно два раза.

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

Спустя 43 секунды (12.07.2011 - 19:50) logme написал(а):
PHPprogramer - исправлял, результат такой же.
Invis1ble - гм, тогда чего-то не понимаю, поскольку и в IDE со встроенным ослом смотрел, и во внешнем браузере, никуда ничего не редиректиться. Где собака сдохла? Если поможет для полного понимания, то сервак из сборки Денвера (да, слышал что он неважнецкий, но для развития пока он).

P.S. код конкретно скопипастил как есть отсюда.

Спустя 1 минута, 15 секунд (12.07.2011 - 19:51) killer8080 написал(а):
logme
а скрипт случайно сохраняешь не в utf-8 с BOM?

добавь в начало error_reporting(E_ALL);

Спустя 3 минуты, 21 секунда (12.07.2011 - 19:54) logme написал(а):
killer8080 - Все! Заработало! Просто разнес сам скрипт в удобоваримый вид (скопипастился одной строкой), перерузил все, и действительно пошел редирект с тем что нужно smile.gif
Большущее спасибо всем кто помогал (особенно killer8080 за рабочее решение), кажется проблема решена, буду копать теперь его дальше и разбирать ph34r.gif
P.S. кодировка да, UTF-8

Спустя 2 минуты, 50 секунд (12.07.2011 - 19:57) killer8080 написал(а):
logme
видимо проблема всё таки была в BOM smile.gif
ну всегда пожалуйста wink.gif

Спустя 9 часов, 39 минут, 2 секунды (13.07.2011 - 05:36) logme написал(а):
Господа, а может кто детально объяснить как работает скрипт, который привел в пример уважаемый killer8080? smile.gif
Как я понял, при первоначальной загрузке идет проверка есть ли некие данные в массиве ПОСТ, а точнее в переменной 'ta', и поскольку она пуста, то следует выход из IF и загружается остальная страница. После сабмита страница перегружается один раз, снова следует проверка на наличие данных в ПОСТ-е, а точнее 'ta', и поскольку массив заполнен необходимыми нам данными, то далее следует редирект без полной загрузки страницы на которой расположен весь наш код? Я все верно понял?
Далее, поскольку я таки недавно начал интересоваться программированием, то следующие вопросы:
1. знак ! перед empty означает как бы противоположное по смыслу значение empty? Т.е. условие уже звучит "если НЕ пусто"? Или как?
2. Можно ли empty заменить на isset?
3. Я так понял что код содержащий хедер необходимо помещать исключительно в самое начало страницы, даже до тегов <html></html>? Поскольку в противоположном случае выдает ошибку говоря что заголовки уже были отправлены smile.gif

Спустя 2 часа, 45 минут, 52 секунды (13.07.2011 - 08:22) killer8080 написал(а):
Цитата (logme @ 13.07.2011 - 05:36)
и поскольку массив заполнен необходимыми нам данными, то далее следует редирект без полной загрузки страницы на которой расположен весь наш код? Я все верно понял?

Ну почти smile.gif Ответ сервера состоит из http заголовка и контента. Поскольку по условию выполнилась команда exit, скрипт остановил своё выполнение. Поскольку никакого вывода мы не делали, браузер получит только один заголовок, без контента. А в нём есть установленный нами location, что является прямым указанием браузеру для редиректа по умолчанию (если в настроках последнего не отключён автоматический переход).
Цитата (logme @ 13.07.2011 - 05:36)
1. знак ! перед empty означает как бы противоположное по смыслу значение empty? Т.е. условие уже звучит "если НЕ пусто"? Или как?

совершенно верно
Цитата (logme @ 13.07.2011 - 05:36)
2. Можно ли empty заменить на isset?

не стоит, тогда условие будет срабатывать, даже если поле было не заполнено.
Цитата (logme @ 13.07.2011 - 05:36)
3. Я так понял что код содержащий хедер необходимо помещать исключительно в самое начало страницы, даже до тегов <html></html>? Поскольку в противоположном случае выдает ошибку говоря что заголовки уже были отправлены

Да, если не задействована буферизация ob_start()
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.