Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача данный при обновлении страницы 
:(
    Опции темы
Turanda
Дата 23.7.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 23.7.2009

Репутация: нет
Всего: нет



Есть такой код:

Код

<?
echo $_POST['Name'];
?>
<form action = "1.php" method = "post">
<input name="Name" type="text" value="">
<input type="submit" value="Send">
</form>


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

Вот как при обновлении  обнулить значение  $_POST['Name'].

P.S. Почитал что нужно использовать что то типо  header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?ok'); но почему то это не работает.

Если кто знаком, на моем примере можете показать что нужно добавить.


Заранее спасибо!
PM MAIL   Вверх
fesor
Дата 23.7.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 16.7.2009
Где: Минск

Репутация: 4
Всего: 4



Эта проблема относиться исключительно к браузерам. К PHP оно ничего неимеет общего. Браузер тупо перепосылает заголовки (вместе с POST запросом).
PM MAIL WWW   Вверх
Turanda
Дата 23.7.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 23.7.2009

Репутация: нет
Всего: нет



Цитата(fesor @ 23.7.2009,  11:27)
Эта проблема относиться исключительно к браузерам. К PHP оно ничего неимеет общего. Браузер тупо перепосылает заголовки (вместе с POST запросом).

Ну может быть и к браузерам, но код пишем на РНР и с этим же как то надо бороться. 


PM MAIL   Вверх
icewind
Дата 23.7.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



На формирование текущей страницы повлияли данные, которые были отправлены POST запросом. Если ты просишь броузер обновить страницу, то он постарается показать тебе ее как можно точнее о чем и предупредит просьбой о повторной отправке заголовков. Все логично и работает так, как должно. И PHP здесь не при чем.
Но средствами php можно проследить сделал ли пользователь сабмит формы или это повторные заголовки.
Код

<?php
session_start();
if( isset($_POST['Name']) && (!isset($_SESSION['rnd']) || $_POST['rnd'] != $_SESSION['rnd']) )
{
   $_SESSION['rnd'] = $_POST['rnd'];
   echo $_POST['Name'];
}

?>
<form action = "1.php" method = "post">
<input name="Name" type="text" value="">
<input type="hidden" name="rnd" value="<?php echo rand(0, 10000); ?>" />
<input type="submit" value="Send">
</form>


Это сообщение отредактировал(а) icewind - 23.7.2009, 12:17


--------------------
user posted image
PM MAIL Skype   Вверх
Turanda
Дата 23.7.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 23.7.2009

Репутация: нет
Всего: нет



Цитата(icewind @ 23.7.2009,  12:05)
На формирование текущей страницы повлияли данные, которые были отправлены POST запросом. Если ты просишь броузер обновить страницу, то он постарается показать тебе ее как можно точнее о чем и предупредит просьбой о повторной отправке заголовков. Все логично и работает так, как должно. И PHP здесь не при чем.
Но средствами php можно проследить сделал ли пользователь сабмит формы или это повторные заголовки.
Код

<?php
session_start();
if( isset($_POST['Name']) && (!isset($_SESSION['rnd']) || $_POST['rnd'] != $_SESSION['rnd']) )
{
   $_SESSION['rnd'] = $_POST['rnd'];
   echo $_POST['Name'];
}

?>
<form action = "1.php" method = "post">
<input name="Name" type="text" value="">
<input type="hidden" name="rnd" value="<?php echo rand(0, 10000); ?>" />
<input type="submit" value="Send">
</form>

Спасибо! Все работает!

Но единственное что я думаю а если рандом выдаст подряд одно и тоже, то получается что это уязвимость.


Я вообще думаю ведь это проблема можно сказать фундаментальная. Любой сайт на РНР в инете с этим борется. Просто наверняка есть какие то стандартные приемы в данной ситуации.
PM MAIL   Вверх
Leoo
Дата 23.7.2009, 16:00 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 270
Регистрация: 3.10.2005
Где: г. Обнинск

Репутация: 1
Всего: 3



используй header("Location: ".$url); exit;
и все будет работать замечательно


--------------------
Если вы не страдаете паранойей, это не значит, что они за вами не летят!
PM MAIL WWW ICQ   Вверх
icewind
Дата 23.7.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



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

Цитата(Turanda @  23.7.2009,  15:46 Найти цитируемый пост)
Но единственное что я думаю а если рандом выдаст подряд одно и тоже, то получается что это уязвимость.

Если пугает такая вероятность то можно rand заменить на microtime


--------------------
user posted image
PM MAIL Skype   Вверх
Turanda
Дата 24.7.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 23.7.2009

Репутация: нет
Всего: нет



Цитата

используй header("Location: ".$url); exit;
и все будет работать замечательно


не могли бы написать куда надо вставить header("Location: ".$url); exit;

в этом коде:
Код

<?
echo $_POST['Name'];
?>
<form action = "1.php" method = "post">
<input name="Name" type="text" value="">
<input type="submit" value="Send">
</form>


что бы нормально работало.

Это сообщение отредактировал(а) Turanda - 24.7.2009, 11:58
PM MAIL   Вверх
NetJunky
Дата 24.7.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



Код

<?
echo $_POST['Name'];
header("Location: ".$url);
exit;
?>
<form action = "1.php" method = "post">
<input name="Name" type="text" value="">
<input type="submit" value="Send">
</form>


Только $url не забуть соответствующий задать.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
skyboy
Дата 24.7.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(NetJunky @  24.7.2009,  11:11 Найти цитируемый пост)
<?
echo $_POST['Name'];
header("Location: ".$url);
exit;
?>

перенаправление не произойдет.
echo ... отправит свои заголовки.
если используешь перенаправление через заголовки, вывода быть не должно вообще.
необходимые текст выведешь на странице, на которую перенаправляешь.
чтоб передать этой странице полученные данные, их можно сохранить(в порядке убывания потенциальной применимости в твоем случае):
а) сессии
б) базе данных
в) файле

PM MAIL   Вверх
NetJunky
Дата 24.7.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



Что-то да, снова я напортачил. Ну помойму самое то это использовать сессии.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.