wake-up-neo.net

sie beenden das Einfügen von Daten in die Datenbank, wenn Sie die Seite aktualisieren

Ich suche nach einer Möglichkeit, das Einfügen oder Senden von Daten in die Datenbank beim Aktualisieren der Seite zu stoppen.

hier ist mein 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');

}

das Problem wird also jedes Mal, wenn ich die Bestätigungsseite aktualisiere, die Daten an die Datenbank gesendet. wie kann ich damit aufhören?

8
Mj Jam

Übertragen Sie den Benutzer auf eine neue Seite:

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;

Dadurch aktualisiert der Benutzer, der die Aktualisierung durchführt, landing_page.php, was bedeutet, dass die Einfügung nicht zweimal ausgeführt wird.

bester Rat : Prüfe, ob der Benutzer zuerst existiert, wenn nicht!

16
Sir

Was hier passiert ist, dass das Formular beim Aktualisieren der Seite zweimal gesendet wird.

Um dies zu verhindern, können Sie Sitzungen verwenden:

session_start();

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

Wir können es ohne Umleitung stoppen, am besten verwenden Sie PHP $ _SESSION wie folgt:

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

Der schnellste Weg ist, die Seite an den aktuellen Ort umzuleiten:

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

ich habe diese Lösung mit 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

Sobald ein Insert oder ein Update in Ihrem Code erstellt wurde, müssen Sie immer auf eine andere Seite umleiten.

Sehen Sie hier, wie das geht: Wie man eine Umleitung in PHP macht?

(Sie möchten eine PHP-Weiterleitung verwenden, keine Javascript- oder HTML-Weiterleitung, da Sie dies offensichtlich benötigen.)

Die Bestätigungsseite sollte das sein, worauf Sie nach dem Update weiterleiten, nicht das Einfügen.

0
developerwjk

Dies können Sie am besten verhindern, indem Sie nach Ihrer Abfrage einen Header ('Location: Dateiname') hinzufügen. Also in Ihrem Fall

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

Ich hatte das gleiche Problem. Ich habe versucht, einige Daten hinzuzufügen, und jedes Mal, wenn ich die Seite aktualisiert habe, werden sie erneut hinzugefügt. Es passiert, weil die Seite nicht geladen wird. Dazu müssen Sie hinzufügen:

<?php ob_start();?> in Ihrer Header-Datei und fügen Sie dann den Header in die aktuelle Datei ein, an der Sie arbeiten. Verwenden Sie danach den folgenden Code

    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");
}
0
jsLearner