Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: При нажатии F5 в базу добавляется еще одна строка
 
 автор: Mesm   (15.03.2006 в 21:31)   письмо автору
 
 

Здравствуйте! Подскажите пожалуйста как этого избежать. Такая проблемя - я добавил новую запись в базу, после этого если нажать f5 добавляется еще одна запись проверка стоит -

if (isset($_POST['$addtov']))

   
 
 автор: kasmanaft   (15.03.2006 в 21:39)   письмо автору
 
   для: Mesm   (15.03.2006 в 21:31)
 

какая проверка стоит? при нажатии эф5 скрипт заново выполняется... и $_POST['$addtov'] опять существует...
а чтоб данные заново не заносились, нужно делать какую-то проверку другую... например занести в базу время добавления записи и ставить ограничение... типа низя заносить ничего в базу если время последней записи больше, чем (сейчас - х)...

или как-то еще... в таком роде :)

   
 
 автор: Mesm   (15.03.2006 в 21:45)   письмо автору
 
   для: kasmanaft   (15.03.2006 в 21:39)
 

А можно поподробней, допустим если в phpmyadmin нажать f5 то он просто выкидывает, вот мне надо примерно тоже самое, или чтоб при нажатии F5 выполнялась какая-то функция. Просто когда оператор работает с БД ему будет очень неохота ждать скажем 10-15 секунд

   
 
 автор: Trianon   (15.03.2006 в 21:57)   письмо автору
 
   для: Mesm   (15.03.2006 в 21:31)
 

Нужно в обработчике формы после того, как параметры будут из формы изъяты и учтены (в файлах, в кукисах, в БД, в сессионных переменных пр.), сделать header("Location: страница_ответа_на_заполненную_форму"); В самом обработчике в выходной поток ничего не выводить.
Суть этого приема - от метода POST перейти к методу GET. А его уже можно F5ить хоть до потери сил.

   
 
 автор: midav   (15.03.2006 в 23:40)   письмо автору
 
   для: Trianon   (15.03.2006 в 21:57)
 

Нужно просто проверить последную добавленную строчку с той что хочет добавиться при нажатии F5. Если они идентичны то сделать просто перенаправление на главную страницу без добавления в базу :) Всё очень просто если логически подумать :)

   
 
 автор: Trianon   (16.03.2006 в 01:35)   письмо автору
 
   для: midav   (15.03.2006 в 23:40)
 

А если заказчик захочет иметь возможность добавлять последовательно одинаковые строки?

Лечить нужно больного, а не болезнь.

   
 
 автор: midav   (16.03.2006 в 14:16)   письмо автору
 
   для: Trianon   (16.03.2006 в 01:35)
 

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

   
 
 автор: Yuri   (17.03.2006 в 12:04)   письмо автору
 
   для: midav   (16.03.2006 в 14:16)
 

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

echo "<meta http-equiv=refresh content=0 URL=$_SERVER[PHP_SELF]>"

То есть, после добавления записи в базу пользователь вернется обратно на ту страницу с которой был запущен сценарий. Естественно уже с "чистым" URL.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования