При обновлении браузера (например, клавишей F5) происходит повторное отправление данных из формы в базу. Подскажите как этого избежать? Вот код:
<?
if ($_POST['vvod']=='1')
{
if (!$_POST['email'] || $_POST['email']=="" || strlen($_POST['email'])>30) {$message='Вы не ввели email, любо ваш email более 30 знаков';}
else
{
//Открываем соединение с базой
mysql_connect("localhost", "root", "") or die ("Нет соединения с базой данных, обратитесь к администратору!");
mysql_select_db("patexexpert");
//Заносим инфу из формы в базу
$as_email=addslashes($_POST['email']);
$tr_email=trim($as_email);
$query="INSERT INTO mail(id, email) VALUES (null, '$tr_email')";
$result=mysql_query($query);
if (mysql_affected_rows()==1) {echo 'Информация добавлена в базу данных'; $noform_var=1;}
else {error_log(mysql_error()); echo 'Данные не внесены в базу, обратитесь к администратору!';}
}
}
//Выводим форму во всех случаях, кроме тех, когда передача формы заверашается успешно
if (!$noform_var)
{
$thisfile=$_SERVER['PHP_SELF'];
$message.='<p>Введите свой мейл:</p>
<form action="'.$thisfile.'" method="post">
<input name="email" type="text" size="25" />
<input name="q" type="text" size="12" value="'.$_POST['q'].'" />
<input name="vvod" type="hidden" value="1" />
<input name="submit" type="submit" value="Submit" />
</form>';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Тест</title>
</head>
<body>
<? echo $message;?>
</body>
</html>
1. mart-akm - 29 Ноября, 2007 - 03:50:12 - перейти к сообщению
2. Snic - 29 Ноября, 2007 - 04:40:52 - перейти к сообщению
ну естественно ну ты сказал цитирую "При обновлении браузера (например, клавишей F5) происходит повторное отправление данных из формы в базу"
ну ты даешь естественно добавляется повторно в базу
потому что при обновлении повторяется та операция которую ты производил до этого
если ты просто зашел на страницу и нажал F5 то нечего некуда не добавится
а если ты добавлял чтото и потом F5 то естественно процесс повторится
ну ты даешь естественно добавляется повторно в базу
потому что при обновлении повторяется та операция которую ты производил до этого
если ты просто зашел на страницу и нажал F5 то нечего некуда не добавится
а если ты добавлял чтото и потом F5 то естественно процесс повторится
3. EuGen - 29 Ноября, 2007 - 09:38:29 - перейти к сообщению
Этого легко избежать, если делать перенаправление после выполнения операция с базой.
В Вашем случае это будет выглядеть так:
В Вашем случае это будет выглядеть так:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?
- {
- $message=$_GET['success']?'Информация добавлена в базу данных':'Данные не внесены в базу, обратитесь к администратору!';
- echo($message);
- };
- if ($_POST['vvod']=='1')
- {
- {
- $message='Вы не ввели email, любо ваш email более 30 знаков';
- }
- else
- {
- //Открываем соединение с базой
- mysql_connect("localhost", "root", "") or die ("Нет соединения с базой данных, обратитесь к администратору!");
- //Заносим инфу из формы в базу
- $query="INSERT INTO mail(id, email) VALUES (null, '$tr_email')";
- $noform_var=0;
- $noform_var=1;
- else
- //Делаем перенаправление, обратите внимание, что я перенес Ваши сообщения об ошибках/успехе.
- }
- }
- //Выводим форму во всех случаях, кроме тех, когда передача формы заверашается успешно
- if (!$noform_var)//если было перенаправление, то $noform_var не задано и форма будет выведена
- {
- $thisfile=$_SERVER['PHP_SELF'];
- $message.='<p>Введите свой мейл:</p>
- <form action="'.$thisfile.'" method="post">
- <input name="email" type="text" size="25" />
- <input name="q" type="text" size="12" value="'.$_POST['q'].'" />
- <input name="vvod" type="hidden" value="1" />
- <input name="submit" type="submit" value="Submit" />
- </form>';
- }
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
- <title>Тест</title>
- </head>
- <body>
- <? echo $message;?>
- </body>
- </html>
И советую Вам делать перенаправление после обработки данных всегда.