0

PHP

    $thisfile=$_SERVER["REQUEST_URI"];
    
    if(isset($_POST['comment'])&&!empty($_POST['comment'])){
    if($id!=0){
    $comment=$_POST['comment'];
    
    if ($comment_query=mysql_query("INSERT INTO `photosite`.`comments` VALUES ('$id', '', '$firstname', '$surname', '$photo_id', '$comment', '$time')")){
    
    header('Location: photopage.php?photo_id='.$photo_id.'', true, 303);
    exit;
    
    }else {
    echo 'Could not add comment';
    }
    }else {
    echo'Please Log In to add a Comment';
    }
    }       

なぜ私の

header('Location: photopage.php?photo_id='.$photo_id.'', true, 303);
    exit;       

ユーザーがデータを再送信することはできますか? これはコメントを追加するためのものであるため、同じページにリンクされているため、ユーザーがコメントを追加すると、ページが同じページに更新されます。しかし、もう一度更新すると、コンテンツが再送信されます。なぜでしょうか?

更新:同じドキュメント内のこのすべてのコードの前にエコー アウトするものがありますそれが問題ですか?

わかりました、フォームのアクションを処理する別のページに変更しました。問題だったページに出力する以前のものがありました!

4

3 に答える 3

0

OK、私はあなたの問題を見つけたようです..エラーレポートがオフになっていると思うので、ヘッダーに関する警告「ヘッダー情報を変更できません-ヘッダーは既に送信されています...」は表示されません。
ヘッダーを送信したり、ヘッダーを変更したりすることはできません。そのため、バッファリングをオンにする必要があります。ob_start()コードの先頭で使用します。このように見える必要があります

<?php
ob_start();
..

の前に空白を使用しないでください<?php

そして、ヘッダー関数からパラメーター true、303 を削除します。

header('Location: photopage.php?photo_id='.$photo_id);
exit();

http://www.php.net/manual/en/function.ob-start.php

于 2013-03-05T23:07:52.233 に答える
0

試す

...
header('Location: /photopage.php?photo_id='.$photo_id.'', true, 303);
...
于 2013-03-05T22:44:00.343 に答える
0
 header('Location: photopage.php?photo_id='.$photo_id.'&added='.time());
    exit;

動作するはずです。あなたが提供したコードも機能するはずです。header->location は POST コンテンツを削除するため、後でページを更新しても再送信されません。

戻るボタンを押すことは別の話です。すべてのフォーム要求に対して一意のトークンを使用していない限り、それを解決することはできません.

例:

 //check if the token in the session matches the token in the post
 if( isset( $_POST['token'], $_SESSION['token']) 
     && $_SESSION['token'] == $_POST['token'] ){
    //handle your post data
     [...]
 }

 //set the token
 $_SESSION['token'] = sha1(time().mt_rand());

 //process your form
 ?>
 [...]
 <input type='hidden' name='token' value='<?php echo $_SESSION["token"];?>'/>
 [...]
于 2013-03-05T22:55:48.383 に答える