ページを更新するときに、データベースへのデータの挿入または送信を停止する方法を探しています。
これが私のコードです:
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を更新するたびに問題が発生し、データがデータベースに送信されます。これを止める方法は?
ユーザーに新しいページを表示する:
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回の挿入を行わないことを意味します。
ベストアドバイス:挿入しない場合は、ユーザーが最初に存在するかどうかを確認します。
ここで起こっていることは、ページを更新すると、フォームが2回送信されることです。
これを防ぐには、セッションを使用できます。
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';
}
高速な方法は、ページを現在の場所にリダイレクトすることです。
if (isset($_POST['submit']))
{
//do somthing
header("Location: $current_url");
}
私はセッションを使用してこの解決策を持っています
<?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>';
}
?>
コードで挿入または更新が完了したら、常に別のページにリダイレクトする必要があります。
その方法については、こちらをご覧ください: PHPでリダイレクトを行う方法
(あなたは本当にこれを動作させる必要があるので、PHPリダイレクトを使用したいのですが、JavaScriptやHTMLのリダイレクトではありません。)
確認ページは、挿入後に行うものではなく、更新後にリダイレクトする場所にする必要があります。
これを防ぐ最善の方法は、クエリの後に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');
}
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;
}
私も同じ問題に直面していました。一部のデータを追加しようとしていましたが、ページを更新するたびに再び追加されました。これは、ページが読み込まれていないために発生します。そのためには、以下を追加する必要があります。
<?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");
}