Автор Тема: При обновлении страницы юзером добавляется новая запись -как этого избежать !??  (Прочитано 8034 раз)

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

Оффлайн Derbyt

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
После того, как пользователь отправит форму скрипту, он (пользователь), как и положено видит результат своих трудов. Но если он тыкнет кнопку в браузере обновить, то добавиться такая же запись, и так до бесконечности. Скрипт записывает значения переменных формы в БД. Как сделать так, чтобы при обновлении записи в БД не добавлялись.

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Например так, как сделано на этом форуме при вставке сообщения: результат работы скрипта - страница, которая перенаправляет на страницу результата.
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн я...

  • scum of the earth
  • Старожил
  • ****
  • Сообщений: 293
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.vlad.myths.ru
согласен, иначе никак... =(((
header("Location: your.page");
...вот такой я весёлый зверёк...
 Home page

Оффлайн Derbyt

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Если я правильно понял, то предлагается разделить скрипт на 2 файла - скрипт формы и скрипт страницы с результатами

Оффлайн я...

  • scum of the earth
  • Старожил
  • ****
  • Сообщений: 293
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.vlad.myths.ru
Derbyt,
зачем??
просто после операции отправляешь пользователя на ту же самую страницу, но уже без параметров....
...вот такой я весёлый зверёк...
 Home page

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
я еще часто в таблицу добавляю поле
hash char(32) и делаю его уникальным ключом.

А в скрипте при добавлении определяю его как:
$hash = md5(implode("", $_POST));
В таком случае второй раз строка добавлена не будет, ни при обновлении, ни при двойном нажатии сабмита
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Derbyt

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что-то я не догоняю...
Приведу кусок кода в котором происходит добавление записи. Подскажи, куда сунуть это перенаправление.

//Здесь идет проверка мессаги и запись формы в БД
if (isset($message)) {
$myGB->add_record($name$town$email$message$smilies);
 }
//Здесь идет проверка - нуно показать пользователю форму или не нуно -соответственно если не нуно, показывается результат
if (isset($addrec)){
echo "<p><strong>Оставьте свое сообщение:</strong>
"
;

echo "(*) Обязательные поля";
echo "<form name=myGB action=page5r_guest.php method=post>";
echo "<table border=0 width=100% height=198><tr><td height=66>* Имя:
<input type=\'text\' name=\'name\' maxlength=30></td>"
;

echo "<td rowspan=3>* Сообщение:
<textarea name=\'message\' rows=10 cols=40></textarea></td></tr>"
;

echo "<tr><td height=66>Город:
<input type=\'text\' name=\'town\' maxlength=30></td></tr>"
;

echo "<tr><td height=66>Email:
<input type=\'text\' name=\'email\' maxlength=30></td></tr>"
;

echo "<tr><td  colspan=2 align=center><input type=button value=\' Отправить \' onClick=\'javascript:checkGB();\'> <input type=reset value=\' Очистить \' ></td></tr></table>";
echo "</form>";
echo "</div>";
}

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
я шизею, дорогая редакция...

Вставить после
$myGB->add_record($name, $town, $email, $message, $smilies);

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

Оффлайн Derbyt

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парни, простите меня пожалуйста. Я больше так не бу...
И, конечно, спасибо всем поможавшим

Оффлайн Derbyt

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

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
если по простому и не вдаваясь в подробности протокола HTTP
то в самое начало скрипта вставь ob_start(); :

<?
ob_start();
... 
//твой скрипт
$myGB->add_record($name$town$email$message$smilies);
header("....");
exit;
...
// дальше твой скрипт
?>
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Derbyt

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
2 Макс

Советом воспользовался, но к сожалению ничего не получилось. ПХП пишет мол -  Cannot add header information - headers already sent by (guest.php:1) in guest.php on line 369. А строка 369:
header ("Location: [url]http://test2.ru/guest.php[/url]");

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
"сколько раз твердили миру..." (с)

1) Ну ребят, не нельзя же так... Не отсылаются хеадеры после любого print`а, echo или инклуда html файла...

2) Зачем ты пересылаешь на ссылку :) Ты хочешь, чтобы тебя на http://test2.ru/guest.php" target="_blank">http://test2.ru/guest.php перенсло?

header("Location: http://test2.ru/guest.php").

3) Если у тебя проблема в том, чтобы при релоуде страници поле не добавлялось - как вариант: http://www.azznews.ru - посмотри как там сделано в добавлении коментариев к статьям.
Не все коту матрица.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
1) Ну ребят, не нельзя же так... Не отсылаются хеадеры после любого print`а, echo или инклуда html файла...
еще и как отсылаются :cool:  если буферизацию включить
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
Цитировать
еще и как отсылаются  если буферизацию включить


ИМХО изврат
Не все коту матрица.

 

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