|
|
|
| При добавлении объявления пользователь получает сообщение "Данные успешно сохранены". Но если начать обновлять страницу то тоже самое объявление пишется в БД снова и снова - как от этого избавиться?
З.Ы. Извиняйте если слишком примитивный вопрос | |
|
|
|
|
|
|
|
для: Arfey
(31.08.2008 в 15:08)
| | добавлять к юрл гет,любое чтото, например rand(); | |
|
|
|
|
|
|
|
для: sl1p
(31.08.2008 в 15:12)
| | Вот вы опять свою инфу поместили, а вы понимаете суть этой проблемы? | |
|
|
|
|
|
|
|
для: sim5
(31.08.2008 в 15:18)
| | нет а шо | |
|
|
|
|
|
|
|
для: sl1p
(31.08.2008 в 16:08)
| | А шо тогда советуете? | |
|
|
|
|
|
|
|
для: sim5
(31.08.2008 в 16:12)
| | а чо
xD
сори со смеха катаюсь :) | |
|
|
|
|
|
|
|
для: sl1p
(31.08.2008 в 16:40)
| | Ни чо, не знаете, лучше молчите. Смеяться в новый открытый форум. | |
|
|
|
|
|
|
|
для: sim5
(31.08.2008 в 16:42)
| | да я просто пишу потом понимаю что это не то :D
мне кнопочка едит снится по ночам =D | |
|
|
|
|
|
|
|
для: Arfey
(31.08.2008 в 15:08)
| | После успешного добавления данных в базу, делайте перенаправление, например, на другую страницу. Это позволит сбросить GET, POST данные, решив вашу проблему. | |
|
|
|
|
|
|
|
для: sim5
(31.08.2008 в 15:20)
| | Можно на туже самую страницу, но только добавив в урл любой параметр, чтобы браузер думал, что это новая страница
Например
<?php
// Добавление данных и проверка на успешность
header('Location: ?rnd='.time());
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(31.08.2008 в 19:03)
| | Это я знаю. И совсем не обязательно time(). Можно вообще не прибегать к передаче параметра, если хотим скрыть "причину" перехода. | |
|
|
|
|
|
|
|
для: sim5
(31.08.2008 в 19:27)
| | Согласен с вами, просто это один из вариантов | |
|
|
|
|
|
|
|
для: mihdan
(31.08.2008 в 19:30)
| | Вот урезанный кусок проблемы:
Данные проверяются на корректность, и если все в порядке - вставляются в БД и на эту же страницу выводится сообщение "Данные добавлены". Как здесь воспользоваться вашими советами. Заранее благодарю
<?
$x=1;
if (!empty($submit) )
{
$db = mysql_connect("localhost", "root");
mysql_select_db("db1",$db);
if ($a!="")
{
$sql = "INSERT INTO table (a,b,c) VALUES ('$a','$b','$c')";
$result = mysql_query($sql);
echo "Данные добавлены";
$x=0;
}
else { $error_msg = "Вы не заполнили обязательные поля (выделены краным цветом)<br>"; }
}
if ($x==1)
{
?>
<form method="post" action="<? echo $PHP_SELF ?>">
<?
echo $error_msg;
$error_msg = 0;
?>
<TABLE>
<TR>
<TD>Введите a,b,c:</TD>
<TD>
<input name=a>
<input name=b>
<input name=c>
</TD>
</TR>
<TR>
<TD>
<input type="Submit" name="submit" value="Добавить">
</TD>
</TR>
</FORM>
</TABLE>
<?
}
?>
|
| |
|
|
|
|
|
|
|
для: Arfey
(31.08.2008 в 23:10)
| | Первое - register_globals установите в off и получайте данные из формы как $_POST['a'] и т.д..
Второе - вы хотя бы "для порядка" проверяли чего вам шлют, чего вы на веру все принимаете и записываете в базу.
Что касается вопроса перенаправления, то вы должны решить сразу - хотите ли вы передавать параметр по которому будете определять этот переход, либо нет. Во втором случае вам потребуется сессия, а значит ваш скрипт доолжен быть построен так, что все, что связано с выводом в браузер, должно происходить после старта сессии.
Сам механизм такой. В начале вы проверяте - был ли переход на странице, если это был параметр в адресной строке, например: header("location: ?ok"), то дожны проверить:
if (isset($_SET['ok'])) {
//сообщение об успешной операции
} else {
//проверяем получение формы
//если ошибки, устанавливаем ошибку
//если все ОК пишем в базу и перенаправляем
}
Далее проверяем, если форма не приходила или приходила, но были ошибки - выводим форму. Вот собственно и весь механизм. | |
|
|
|
|
|
|
|
для: Arfey
(31.08.2008 в 15:08)
| | первое нужно сначало проверять ошибки и только после этого записывать в бд
и при обнавлении перенаправлять на страницу записи. | |
|
|
|