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

Форум MySQL

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

 

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

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

тема: Добавление данных в таблицу с помощью кнопки F5
 
 автор: SilentChild   (26.03.2008 в 10:56)   письмо автору
 
 

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

<?php
if (isset($_POST['posted']))
{
  include(
"./files/connection.inc");
  
mysql_query("USE andrey"$link_id);
  
mysql_query("INSERT INTO news(mainpart) VALUES('" $_POST['mainpart'] ."')"$link_id);
  echo 
"Данные успешно добавлены!<br>";  
}
else
{
  echo 
"Ошибка! Данные не добавлены! Error: " mysql_error();
}
?>

   
 
 автор: coder-decoder   (26.03.2008 в 11:16)   письмо автору
 
   для: SilentChild   (26.03.2008 в 10:56)
 

Вы снова отправляете POST-данные, нажимая F5 :)
Используйте такой алгоритм.
1) При генерации формы

<?php
$_SESSION
['AntiF5']=rand();
$validate $_SESSION['AntiF5'];
?>

И добавляйте в форму hidden с $validate и её значением
2) При получении данных скриптом обработки формы делайте проверку типа

<?php
if($_SESSION['AntiF5']!=$validate or !isset($_SESSION['AntiF5']))
{
шлём юзера обратно на форму;exit();}
else
{
$_SESSION['AntiF5']=rand();
пускаем форму на обработку;
}
?>

   
 
 автор: Root   (26.03.2008 в 18:26)   письмо автору
 
   для: coder-decoder   (26.03.2008 в 11:16)
 

а не легче просто header поставить после успешного добавления и не париться?

   
 
 автор: coder-decoder   (26.03.2008 в 21:42)   письмо автору
 
   для: Root   (26.03.2008 в 18:26)
 

:)) ну тоже верно. хотя моё решение -- тоже решение)

   
 
 автор: SilentChild   (27.03.2008 в 07:58)   письмо автору
 
   для: coder-decoder   (26.03.2008 в 21:42)
 

Re: root >а не легче просто header поставить после успешного добавления и не париться?

Можно поподробней, а то я не встречался с этой проблемой. Какие команды, и куда их вставить?

   
 
 автор: Root   (27.03.2008 в 09:16)   письмо автору
 
   для: SilentChild   (27.03.2008 в 07:58)
 

вместо
echo \"Данные успешно добавлены!<br>\";
header(\'Location: yourpage.php\');
тоесть если нету вывода об ошибке, значит данные добавлены.

   
 
 автор: Root   (27.03.2008 в 09:17)   письмо автору
 
   для: Root   (27.03.2008 в 09:16)
 

только слэши не ставьте, их форум добавил

   
 
 автор: Root   (27.03.2008 в 09:32)   письмо автору
 
   для: Root   (27.03.2008 в 09:17)
 


<?php 
if (isset($_POST['posted'])) 

  include(
"./files/connection.inc"); 
  
mysql_query("USE andrey"$link_id); 
  
mysql_query("INSERT INTO news(mainpart) VALUES('" $_POST['mainpart'] ."')"$link_id); 
  echo 
"Данные успешно добавлены!<br>";   

else 

  echo 
"Ошибка! Данные не добавлены! Error: " mysql_error(); 

?>

по вашей проверке выходит, что данные добавлены если isset($_POST['posted']),


<?php 
if (isset($_POST['posted'])) { 
  include(
"./files/connection.inc"); 
  
mysql_query("USE andrey"$link_id); 
  
mysql_query("INSERT INTO news(mainpart) VALUES('" $_POST['mainpart'] ."')"$link_id); 
  if(!
mysql_error())
     
header('Location: page.php');
  else 
     echo 
"Ошибка! Данные не добавлены! Error: " mysql_error(); 

?>

   
 
 автор: SilentChild   (27.03.2008 в 10:05)   письмо автору
 
   для: Root   (27.03.2008 в 09:32)
 

Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/www/files/connection.inc:5) in /home/httpd/www/newsedit.php on line 9


Вот что написал! ?? =(

   
 
 автор: Root   (27.03.2008 в 10:13)   письмо автору
 
   для: SilentChild   (27.03.2008 в 10:05)
 

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

   
 
 автор: SilentChild   (27.03.2008 в 10:27)   письмо автору
 
   для: Root   (27.03.2008 в 10:13)
 

Какая команда служит для дозаписи пустого поля например в записи под номером 1 таблицы "username", как показано ниже.

+--------------+------------+--------------+
|    number    |    name    |    family    |
+--------------+------------+--------------+ 
|    1         |            |    Horev     |
+--------------+------------+--------------+

   
 
 автор: Root   (27.03.2008 в 10:32)   письмо автору
 
   для: SilentChild   (27.03.2008 в 10:27)
 

не по теме чуть чуть ;)

UPDATE tbl_name SET name = '...' WHERE number = 1;

   
 
 автор: SilentChild   (27.03.2008 в 10:36)   письмо автору
 
   для: Root   (27.03.2008 в 10:32)
 

Да действительно, но ради этого вопросика чет не хотелось усложнять и заводить опять тему =), благодарю!

   
Rambler's Top100
вверх

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