web-dev-qa-db-fra.com

arrête d'insérer des données dans la base de données lors de l'actualisation de la page

Je cherche un moyen d'arrêter d'insérer ou d'envoyer des données dans la base de données lors de l'actualisation de la page.

voici mon code:

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');

}

donc le problème chaque fois que j'actualise la confirmation page.php les données sont envoyées à la base. comment arrêter ça?

8
Mj Jam

En-tête de l'utilisateur sur une nouvelle page:

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;

En procédant ainsi, l'utilisateur qui actualise actualisera landing_page.php, ce qui signifie qu'il ne fera pas l'insertion deux fois.

meilleur conseil : vérifiez si l'utilisateur existe en premier si ne l'insérez pas!

16
Sir

Ce qui se passe ici, c'est que lorsque vous actualisez la page, le formulaire est soumis deux fois.

Pour empêcher cela, vous pouvez utiliser des sessions:

session_start();

if( $_SESSION['submit'] == $_POST['submit'] && 
     isset($_SESSION['submit'])){
    // user double submitted 
}
else {
    // user submitted once
    $_SESSION['submit'] = $_POST['submit'];        
} 
2
jh314

Nous pouvons l'arrêter sans redirection, meilleure façon d'utiliser PHP $ _SESSION comme ceci:

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';
 }
0
Ak Memon

Le moyen rapide est de rediriger la page vers son emplacement actuel:

if (isset($_POST['submit'])) 
{
//do somthing
header("Location: $current_url");
}
0
Eyal Sooliman

j'ai cette solution en utilisant session

<?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>';
        }               
?>
0
hazem

Une fois qu'une insertion ou une mise à jour est faite dans votre code, vous devez toujours rediriger vers une autre page.

Voir ici comment faire: Comment faire une redirection en PHP?

(Vous voulez utiliser une redirection PHP, et non une redirection Javascript ou HTML, car vous en avez évidemment besoin.

La page de confirmation doit correspondre à ce que vous redirigez après la mise à jour et non à l’insertion.

0
developerwjk

Le meilleur moyen d'éviter cela est d'ajouter un en-tête ("Emplacement: nom du fichier") après votre requête. Donc dans ton cas,

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');
}
0
Kim Barcelona

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;
}
0
Sammitch