Вопрос повторной отправки формы PHP SQL

0

Если я вставлю новую запись в базу данных через PHP, а затем нажмите кнопку отправки, а затем каждый раз, когда я обновляю страницу, она добавляет недавно добавленную запись в базу данных. Как остановить это? Я также не хочу перенаправлять другую форму после кнопки отправки. Странно, если я дважды щелкнул кнопку отправки, а затем обновил форму, она не вставляет дубликаты в базу данных. Почему это? Пожалуйста, помогите: /thanks

Здесь код:

<div class="insertDiv">
<form method="POST" action="contracts.php">
<?php
if(empty($_POST['ContractDate']) && empty($_POST['ComputerId2']) && empty($_POST['CustomerId'])  && empty($_POST['ContractLevel']))
{
}
else
{
include("dbinfo.inc.php");
$comm=@mysql_connect(localhost,$username,$password);
$rs=@mysql_select_db($database) or die( "Unable to select database"); 

$contractDate=$_POST['ContractDate'];
$computerID=$_POST['ComputerId'];
$customerID=$_POST['CustomerId'];
$contractLevel=$_POST['ContractLevel'];

$sql="INSERT INTO contract VALUES ('','$contractDate','$computerID', '$customerID', '$contractLevel')";
$result=mysql_query($sql)or die("Insert Error: ".mysql_error());
mysql_close();
}
?>

<div class = "myButton">
Insert
</div>

<p></p>
Enter contract start date:&nbsp
<input type="date" name="ContractDate" size=30 class="input"><br><br>
Enter computerID:&nbsp
<input type="text" name="ComputerId" size=30 class="input"><br><br>
Enter customerID:&nbsp
<input type="text" name="CustomerId" size=30 class="input"><br><br>
Enter contract level:&nbsp
<input type="text" name="ContractLevel" size=30 class="input"><br><br>
<input type="reset" value="Reset" class="button">&nbsp&nbsp&nbsp&nbsp
<input type="submit" value="Submit" class="button">
</form>
</div>
Теги:
forms

3 ответа

0

проверьте с некоторым значением из формы, которая уже существует в таблице, если нет, тогда вставьте данные в таблицу

или

1.генерировать случайную строку и хранить ее в сеансе,

2. Затем выведите его в свою форму как скрытое значение,

3. Просмотрите представленную и сохраненную переменную, если совпадения обрабатывают ваш запрос,

4.go до 1.

0

Просто убедитесь, что форма была отправлена только один раз, используя сеансы. Это должно работать (я не смог проверить его)

<?php
// you should start the session before sending any output to the browser
session_start();
if($_SESSION['prevent'] && $_SESSION['prevent'] == $_POST['prevent'])$valid=true;
$_SESSION['prevent']=sha1(mt_rand(0,9999999));

?>
<div class="insertDiv">
<form method="POST" action="contracts.php">
<?php
if(empty($_POST['ContractDate']) && empty($_POST['ComputerId2']) && empty($_POST['CustomerId'])  && empty($_POST['ContractLevel']))
{
}
else
{

if($valid){

include("dbinfo.inc.php");
$comm=@mysql_connect(localhost,$username,$password);
$rs=@mysql_select_db($database) or die( "Unable to select database"); 

$contractDate=$_POST['ContractDate'];
$computerID=$_POST['ComputerId'];
$customerID=$_POST['CustomerId'];
$contractLevel=$_POST['ContractLevel'];

$sql="INSERT INTO contract VALUES ('','$contractDate','$computerID', '$customerID', '$contractLevel')";
$result=mysql_query($sql)or die("Insert Error: ".mysql_error());
mysql_close();
}
}
?>

<div class = "myButton">
Insert
</div>

<p></p>
Enter contract start date:&nbsp
<input type="date" name="ContractDate" size=30 class="input"><br><br>
Enter computerID:&nbsp
<input type="text" name="ComputerId" size=30 class="input"><br><br>
Enter customerID:&nbsp
<input type="text" name="CustomerId" size=30 class="input"><br><br>
Enter contract level:&nbsp
<input type="text" name="ContractLevel" size=30 class="input"><br><br>
<input type="reset" value="Reset" class="button">&nbsp&nbsp&nbsp&nbsp
<input type="hidden" value="<?php echo $_SESSION['prevent']; ?>">
<input type="submit" value="Submit" class="button">
</form>
</div>
  • 0
    Спасибо за ваш комментарий, Эмилио. Я не думаю, что смогу использовать session_start (), поскольку у меня есть другие php-операторы в форме: / вы знаете способ обойти это?
  • 0
    Ну, вы можете взглянуть на ob_start () и ob_end_flush () - вы можете использовать их, чтобы контент не отправлялся в браузер, пока вы не закончите рендеринг страницы (так что вы можете установить сеанс). Но опять же, вам нужно добавить хотя бы одну строку кода в существующие файлы.
Показать ещё 1 комментарий
0

Прочитайте эту статью, и она объяснит, как перенаправить, так что обновление не возвращает форму.

http://en.wikipedia.org/wiki/Post/Redirect/Get

  • 1
    -1, поскольку в ответе есть только ссылка (пожалуйста, добавьте объяснение / пример. Ссылка должна быть вспомогательной , а не единственной).
  • 0
    Спасибо за ваши комментарии. Я не совсем уверен, как реализовать шаблон post / redirect / Get. Означает ли это, что когда пользователь нажимает кнопку, он перенаправляет его в другую форму?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню