Если я вставлю новую запись в базу данных через 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: 
<input type="date" name="ContractDate" size=30 class="input"><br><br>
Enter computerID: 
<input type="text" name="ComputerId" size=30 class="input"><br><br>
Enter customerID: 
<input type="text" name="CustomerId" size=30 class="input"><br><br>
Enter contract level: 
<input type="text" name="ContractLevel" size=30 class="input"><br><br>
<input type="reset" value="Reset" class="button">    
<input type="submit" value="Submit" class="button">
</form>
</div>
проверьте с некоторым значением из формы, которая уже существует в таблице, если нет, тогда вставьте данные в таблицу
или
1.генерировать случайную строку и хранить ее в сеансе,
2. Затем выведите его в свою форму как скрытое значение,
3. Просмотрите представленную и сохраненную переменную, если совпадения обрабатывают ваш запрос,
4.go до 1.
Просто убедитесь, что форма была отправлена только один раз, используя сеансы. Это должно работать (я не смог проверить его)
<?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: 
<input type="date" name="ContractDate" size=30 class="input"><br><br>
Enter computerID: 
<input type="text" name="ComputerId" size=30 class="input"><br><br>
Enter customerID: 
<input type="text" name="CustomerId" size=30 class="input"><br><br>
Enter contract level: 
<input type="text" name="ContractLevel" size=30 class="input"><br><br>
<input type="reset" value="Reset" class="button">    
<input type="hidden" value="<?php echo $_SESSION['prevent']; ?>">
<input type="submit" value="Submit" class="button">
</form>
</div>
Прочитайте эту статью, и она объяснит, как перенаправить, так что обновление не возвращает форму.