0

index.phpという名前のページからデータを送信したいのですが、アクションは同じページで行われるため、$_POST['submitted']データを送信するとデータベースに正常に保存されますが、ページデータをリロードすると、index.phpにアクセスできます。データベースに保存します。私の質問は、データをリロードするときにデータの送信を回避する方法ですが、アクションは同じページで行われます(<?php echo $_SERVER['PHP_SELF'];?>)..?

ありがとう..

//page index.php
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
    <input type="hidden" name="submitted" value="1" />
    <input type="text" name="email_address"/>
    <input type="submit" value="submit"/>
</form>

//still in index.php
if(isset($_POST['submitted']) && $_POST['submitted']==1)
{
    //send data
}
4

3 に答える 3

0

使用する

if(isset($_POST['submit'])){ //send data}

非表示フィールドにvalue=1を指定したため、条件が常にtrueになっている場合です。

于 2012-11-12T06:50:06.877 に答える
0

最も信頼できる方法は、2つのわずかに異なるURLを使用することです。ページをリロードするときに問題が発生する理由は、ブラウザが、呼び出されたURLとまったく同じであると認識し、まったく同じリクエスト(post変数を含む)を実行するためです。これは、異なるURLでは発生しません。フォームのターゲットURLにクエリパラメータを追加するだけで十分です。そうすれば、URLは異なりますが、同じスクリプトが呼び出されます。そのダミーパラメータは無視してかまいません。投稿変数を処理した後(データベース内に保存した後)、クエリパラメーターのない通常のURLを指すリダイレクトヘッダーをブラウザーに送信します。このようにして、ブラウザは投稿変数を送信せずにページをリロードします。リダイレクトにはphpsheader()関数を使用できます。

于 2012-11-12T06:51:06.550 に答える
0

次のように、送信入力に名前を追加すると、問題が解決するはずです。

...    
<input type="submit" name="submit" value="submit"/>
if(isset($_POST['submit']) {
... 

一方で、次のようにすべきだと思います。

action="<?php $_SERVER[ 'PHP_SELF' ]; ?>"

「エコー」なしで。

お役に立てれば。

于 2012-11-12T07:07:46.103 に答える