10

ページを更新するときに、データベースへのデータの挿入または送信を停止する方法を探しています。

ここに私のコードがあります:

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

}

そのため、確認ページを更新するたびに問題が発生します。php データはデータベースに送信されます。これを止める方法は?

4

11 に答える 11

19

ユーザーを新しいページにヘッダーします:

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。つまり、挿入が 2 回行われることはありません。

最善のアドバイス: 最初にユーザーが存在するかどうかを確認し、存在する場合は挿入しないでください。

于 2013-08-07T23:51:18.743 に答える
2

ここで何が起こっているかというと、ページを更新すると、フォームが 2 回送信されます。

これを防ぐために、セッションを使用できます。

session_start();

if( $_SESSION['submit'] == $_POST['submit'] && 
     isset($_SESSION['submit'])){
    // user double submitted 
}
else {
    // user submitted once
    $_SESSION['submit'] = $_POST['submit'];        
} 
于 2013-08-07T23:54:21.853 に答える
0

リダイレクトせずに停止できます。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';
 }
于 2015-11-20T05:13:27.963 に答える
0

コードで挿入または更新が完了したら、常に別のページにリダイレクトする必要があります。

その方法については、こちらを参照してください: How to make a redirect in PHP?

(Javascript や HTML のリダイレクトではなく、PHP のリダイレクトを使用することをお勧めします。なぜなら、これが機能するためには明らかに本当に必要だからです。)

確認ページは、挿入を行うものではなく、更新後にリダイレクトするものである必要があります。

于 2013-08-07T23:49:30.703 に答える
0

私はセッションを使用してこのソリューションを持っています

<?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>';
        }               
?>
于 2013-08-26T22:30:42.037 に答える