Прекратить вставку данных в базу данных при обновлении страницы
Я ищу способ прекратить вставку или отправку данных в базу данных при обновлении страницы.
вот мой код:
user_details_page.php
<form action="confirm_page.php" method="post" >
User Name:
<input type="text" name="username" >
User Email
<input type="text" name="useremail" >
Password:
<input type="text" name="password" >
<input type="submit" name="submit" >
</form>
confirm_page.php
if (isset($_POST['submit']))
{
$user= $_POST['username'];
$email = $_POST['useremail'];
$pass= $_POST['password'];
mysql_query("INSERT INTO table (username, useremail, email) VALUES ('$username','$useremail','$email');
}
так что проблема каждый раз, когда я обновляю страницу подтверждения. данные отправляются в базу данных. как это остановить?
11 ответов
Заголовок пользователя на новую страницу:
if (isset($_POST['submit']))
{
$user= $_POST['username'];
$email = $_POST['useremail'];
$pass= $_POST['password'];
mysql_query("INSERT INTO table (username, useremail, email) VALUES(`$username','$useremail','$email')");
}
//best outside the if statement so user isn't stuck on a white blank page.
header("location: landing_page.php");
exit;
При этом обновляющий пользователь будет обновлять landing_page.php
что означает, что он не будет делать вставку дважды.
Лучший совет: проверьте, существует ли пользователь первым, если это так, не вставляйте!
Здесь происходит следующее: когда вы обновляете страницу, форма отправляется дважды.
Чтобы предотвратить это, вы можете использовать сессии:
session_start();
if( $_SESSION['submit'] == $_POST['submit'] &&
isset($_SESSION['submit'])){
// user double submitted
}
else {
// user submitted once
$_SESSION['submit'] = $_POST['submit'];
}
Мы можем остановить это без перенаправления, лучший способ использовать PHP $_SESSION, например так:
if($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_SESSION['form_submit']) )
{
extract($_POST);
$sql=""INSERT INTO table (username, useremail, email) VALUES('$username','$useremail','$email')";
$_SESSION['form_submit']='true';
}
else
{
$_SESSION['form_submit']='NULL';
}
confirm_page.php:
if (isset($_POST['submit']))
{
$user= $_POST['username'];
$email = $_POST['useremail'];
$pass= $_POST['password'];
mysql_query("INSERT INTO table (username, useremail, email) VALUES ('$username','$useremail','$email')"); // <-- missing endquote and bracket here
header('Location: somewhere_else.php');
exit;
}
Быстрый способ - перенаправить страницу в ее текущее местоположение:
if (isset($_POST['submit']))
{
//do somthing
header("Location: $current_url");
}
Я столкнулся с той же проблемой. Пытался добавить данные, и каждый раз, когда я обновлял страницу, они снова добавлялись. Это происходит потому, что страница не загружается. Для этого вам нужно добавить:
<?php ob_start();?>
в файл заголовка, а затем включите заголовок в текущий файл, над которым вы работаете. После этого используйте приведенный ниже код
if (isset($_POST['submit']))
{
$user= $_POST['username'];
$email = $_POST['useremail'];
$pass= $_POST['password'];
mysql_query("INSERT INTO table (username, useremail, email) VALUES(`$username','$useremail','$email')");
//user it before if statement
header("location: onthesamepage/oranyotherpage.php");
}
У меня есть это решение с помощью сессии
<?php session_start();
if(isset($_POST[$_SESSION[a][count($_SESSION[a])-1]])){
echo "somthing....";
unset($_SESSION[a]);
}
else{
echo '<form method="post">';
$_SESSION["a"]=array();
$_SESSION["a"][0]="a".rand(1,100);
echo '<input name="'.$_SESSION["a"][0].'"><br>';
$_SESSION["a"][1]="a".rand(1,100);
echo '<input name="'.$_SESSION["a"][1].'"><br>';
$_SESSION["a"][2]="a".rand(1,100);
echo '<input name="'.$_SESSION["a"][2].'"><br>';
$_SESSION["a"][3]="a".rand(1,100);
echo '<input type="submit" name="'.$_SESSION["a"][3].'" value="submit"><br>';
echo '</form>';
}
?>
index.php
Решение той же проблемы | ЕСЛИ вы используете () внешний запрос, когда не используете обратную кавычку в значениях, используйте одинарную кавычку.
<?php
include 'connection.php';
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
$query = "INSERT INTO`login`(`username`,`password`)
VALUES('$username','$password')";
$insert_data= mysqli_query( $connection,$query);
}
?>
форма
<form method="post">
<br><br>
<div class="card">
<div class="card-header bg-dark">
<h1 class="text-white text-center">Insert Opration</h1>
<h2><a href="display.php">Data</a> </h2>
</div>
<label for="username">Username</label>
<input type="text" name="username" class="form-control"><br>
<label for="password">Password</label>
<input type="password" name="password" class="form-control"><br>
<button class="btn btn-success" name="submit" type="submit">Submit</button>
</div>
</form>
После того, как вставка или обновление сделаны в вашем коде, вам всегда нужно перенаправить на другую страницу.
Смотрите здесь, как это сделать: Как сделать редирект в PHP?
(Вы хотите использовать перенаправление PHP, а не Javascript или HTML, потому что вам, очевидно, это действительно нужно для работы.)
Страница подтверждения должна быть той, на которую вы перенаправляете после обновления, а не тем, что делает вставка.
Лучший способ предотвратить это - добавить заголовок ('Location: filename') после вашего запроса. Таким образом, в вашем случае,
if (isset($_POST['submit']))
{
$user= $_POST['username'];
$email = $_POST['useremail'];
$pass= $_POST['password'];
mysql_query("INSERT INTO table (username, useremail, email) VALUES ('$username','$useremail','$email');
//must be inside the condition to prevent too many redirects
header('Location: user_details_page.php');
}
if($_POST(submit)
{
//database insertion query
// if successful insertion
{
echo"<script language='javascript'>alert('successfully inserted')</script>";
echo"<script>document.location='your_page.php';</script>;
}
}