web-dev-qa-db-ja.com

ページの更新時にデータベースへのデータの挿入を停止する

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

これが私のコードです:

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

}

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

8
Mj Jam

ユーザーに新しいページを表示する:

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回の挿入を行わないことを意味します。

ベストアドバイス:挿入しない場合は、ユーザーが最初に存在するかどうかを確認します。

16
Sir

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

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

session_start();

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

リダイレクトせずに停止できます。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';
 }
0
Ak Memon

高速な方法は、ページを現在の場所にリダイレクトすることです。

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

私はセッションを使用してこの解決策を持っています

<?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

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

その方法については、こちらをご覧ください: PHPでリダイレクトを行う方法

(あなたは本当にこれを動作させる必要があるので、PHPリダイレクトを使用したいのですが、JavaScriptやHTMLのリダイレクトではありません。)

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

0
developerwjk

これを防ぐ最善の方法は、クエリの後にheader( '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');
}
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

私も同じ問題に直面していました。一部のデータを追加しようとしていましたが、ページを更新するたびに再び追加されました。これは、ページが読み込まれていないために発生します。そのためには、以下を追加する必要があります。

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