Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > добавление записи после обновления страницы


Автор: *^angel^* 19.1.2005, 09:45
Добрый день!

я добавляю запись в БД, после чего появляется стрнаица с фразой "Новость создана. Вернуться к просмотру всех новостей" и ссылка на все новости. Если находясь на этой стрнаицы сделать refresh, то созданная запись продублируется и появится в БД (естественно со своим id).

Что нужно сделать, чтобы после обновления страницы запись не дублировалась?

Автор: Mont 19.1.2005, 09:55
Первое что пришло на ум - в сессиях хранить переменную, о том что добавилась новость... при выводе формы присвоить ей 0, при удачном занесении в БД - 1. И по ней потом ориентироваться при рефреше.

Второй вариант проверить в базе наличие такой новости.

Автор: Mal Hack 19.1.2005, 10:39
Все проще. Надо убить POST потоки.
header( "Location:" . $_SERVER['SCRIPT_NAME'] );
exit;

Автор: *^angel^* 19.1.2005, 12:58
2 Mal Hack

а куда вставлять?

Автор: Opik 19.1.2005, 13:01
*^angel^*
после запроса добавления в базу. Но перед выводом чего либо на экран.

Автор: *^angel^* 19.1.2005, 15:05
пишет ошибку:
Код

Warning: Cannot modify header information - headers already sent by (output started at
z:\home\wssite.ru\www\admin\addnews.php:11) in z:\home\wssite.ru\www\admin\addnews.php on line 25

это строка, где написан headr(...)

вот код
Код

<html>
<head>
<title>добавление новости</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel="StyleSheet" type="text/css" href="style.css">
</head>
<body>
<?php
include "../config.php";
// Проверим - достаточно ли информации для занесения в базу данных
if(empty($_POST['zagolov'])) links("Отсутствует заголовок");
if(empty($_POST['info'])) links("Содержание не введено");

// Заменяем одинарные кавычки обратными, чтобы избежать конфликта
// при добавлении информации в таблицу
$_POST['zagolov'] = str_replace("'", "`", $_POST['zagolov']);
$_POST['info'] = str_replace("'", "`", $_POST['info']);

// Формируем и выполняем SQL-запрос на добавление новости
$query = "INSERT INTO news (zagolovok, info, d_o_n) VALUES('$zagolov','$info', now())";
header( "Location:" . $_SERVER['SCRIPT_NAME'] );
exit;
$result = mysql_query($query);
// Выполнить запрос. Если произойдет ошибка - вывести ее.  
if ($result)
{
echo "<b>Новость добавлена в базу данных.</b><br>";
echo "<a href=\"index-a.php\">Перейти на страницу администрирования новостей</a>";
}
else puterror("Ошибка запроса к таблице новостей.");

?>

</body>
</html>

Автор: Opik 19.1.2005, 15:34
*^angel^*
читаем внимательнее:
Цитата
Но перед выводом чего либо на экран.
, а это значит, что должно быть так:

Код

<?php
include "../config.php";
// Проверим - достаточно ли информации для занесения в базу данных
if(empty($_POST['zagolov'])) links("Отсутствует заголовок");
if(empty($_POST['info'])) links("Содержание не введено");

// Заменяем одинарные кавычки обратными, чтобы избежать конфликта
// при добавлении информации в таблицу
//$_POST['zagolov'] = str_replace("'", "`", $_POST['zagolov']); лучше делать не так :)
//$_POST['info'] = str_replace("'", "`", $_POST['info']);
$zalogov = mysql_escape_string($_POST['zagolov']); // аналогично со вторым.

// Формируем и выполняем SQL-запрос на добавление новости
$query = "INSERT INTO news (zagolovok, info, d_o_n) VALUES('$zagolov','$info', now())";
$result = mysql_query($query);
header( "Location:" . $_SERVER['SCRIPT_NAME'] );
exit;
// Всё что после exit - не имеет смысла, т.к произойдет редирект

?>
<html>
<head>
<title>добавление новости</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel="StyleSheet" type="text/css" href="style.css">
</head>
<body>
а выводить значит ничего и не будет, значит "пихаем" это в отдельный файл :)
</body>
</html>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)