1

Тема: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

У меня такая ситуация:
сделал страницу с которой через форму данные сохраняются в базе данных после нажатия на кнопку отправить.
Для приема данных из формы я написал как полагается код следующего смысла:
"если кнопка Отправить нажималась, то принять данные для обработки и сохранения в базе данных".
Но у меня получается, когда нажимаю кнопку отправить данные сохраняются как  и положено,
но потом нажимаю F5 для перезагрузки страницы и те же данные сохраняются еще раз.
А мне это не надо!  Помогите разобраться в чем тут дело...

2

Re: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

dr. Oops!
Это естественное поведение браузера. При нажатии F5, происходит повторная отсылка данных через POST или GET контейнеры, из-за чего происходит повторная вставка данных. При подобной повторной отсылке, должно вылезать предупреждающее окно браузера. Если данная проблема является существенной, то решить ее можно путем редиректа, то есть скрипт после отработки данных, должен перенаправить пользователя на какую-либо страницу, можно даже на ту-же, на которой была форма. При этом POST и GET контейнеры соответственно, будут уже пусты. Вы можете видеть подобное поведение скрипта данного форума при отправке сообщений.

3

Re: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

Hanut,
а можно эти контейнеры очистить?
Это одно, а другое:
в начале скрипта обрабатывающего данные я написал
if($_POST['add_go'] !="")
    {
       непосредственно скрипт
    }
$_POST['add_go']  - значит нажималасть кнопка "Отправить".
Но при перезагрузке страницы с помощью F5 кнопка не нажимается,
почему же скрипт все равно работает?

Для перезагрузки страницы я написал скрипт, но перезагружаясь,
данные снова сохраняются.

Вот этот скрипт:

                print"<html><head>\n";
                print"<script language='JavScript'>";
                print"function sendForm(form){form.submit();}";
                print"</script>";
                print"</head>";
                print"<body onload='senForm(submit)'>";
                print"<form name='submit' action='articles.php?sp=ao' method='post'>";
                print"<input type='hidden' name='title' value='".$title."'>";
                print"</form>";
                print"</body>";
                print"</html>\n";
Мне надо, чтобы в перезагружаемую страницу передалось значение $title.

Может Вы посоветуете какой-нибудь скриптик?
Спасибо:)

4

Re: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

dr. Oops! сказал:

а можно эти контейнеры очистить?

Нет, нельзя. Только редирект.

Остального я не понял.

Редирект на PHP можно сделать с помощью функции header(). То есть после кода обрабатывающего данные идет следующая строка:
header('Location: http://www.example.com/');

5

Re: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

А можно в такую строку добавить данные:
header('Location: http://www.example.com?name=value')?

6

Re: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

dr. Oops!
Безусловно можно.
Только не забудьте применить к значению, функцию urlencode().

7

Re: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

Hanut,
Спасибо!
с заголовком я не очень понял (php пишет заголовок уже отправлен),
но приму Ваши подсказки к сведению почитаю еще про них.

Чтобы данные не сохранялись повторно, я сделал проверку есть ли такая запись в базе данных или нет,
если нет данные сохраняем.
Код такой:
//при перезагрузке страницы: проверка, есть ли уже такая запись?
          $query = "SELECT *
                    FROM recall_article
                    WHERE title='".$title."' AND text='".$text."' AND author='".$author."' AND email='".$email."' AND url='".$url."'";
          if(mysql_num_rows(mysql_query($query))==0)
            {
              //Сохраняем в базе данных добавленный отзыв
             )
Очевидно это громоздко, но мне так понятней.
Тем не менее спасибо за поддержку:)

8

Re: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

dr. Oops! сказал:

с заголовком я не очень понял (php пишет заголовок уже отправлен),

Перед функцией header(), не должно быть html кода.

9

Re: Нажимаю F5 для перезагрузки страницы и теже данные сохраняются еще раз

Hanut, спасибо! Понял.:)