PHPセッション変数、チェックしてから削除する

コード:

    if(!$picture) $error = $error."<div>This is a photo site, we require you select a photo.</div>";
    if(!$imgname) $error = $error."<div>You must enter a name for your photo.</div>";
    if(!$description) $error = $error."<div>You must enter a description for your photo.</div>";
    else if(strlen($description) > 500) $error = $error."<div>Your descriptions to long. 500 characters max.</div>";

    if(!$error) {
        $case = 2;

        $max_width_new = 190;

        $make_thumb=1; $make_medium=1; $make_original=1;

        $imagename = "picture";

        $folders = "accounts/".$dbid."/";

        if(!file_exists($folders)) 
            mkdir($folders);

        include("scripts/php/uploadpicture.php");

        if($file) {
        $connect = mysql_connect("localhost","headinth_admin","adobe1234");
        mysql_select_db("headinth_core");
        mysql_query("INSERT INTO pictures (id, uploader, name, description, location, picture, date) VALUES('','$dbid','$imgname','$description','$location','$file_name','$date')");
        $_SESSION['uploaded'] = 1;

        header("location: ?upload");
        }
    } else echo "<div class='green f18 fl coolvetica' style='text-align:left;'>".$error."</div><div class='c20'></div>";
}
if(isset($_SESSION['uploaded'])) {
    echo "<div class='white f18 fl coolvetica' style='text-align:left;'>Your picture was uploaded.</div><div class='c20'></div>";
    unset($_SESSION['uploaded']);
}
?>

だから、すべてが成功すれば$ _SESSION [‘uploaded’] =
1と宣言します。意味があります。ヘッダーはページをリフレッシュするので、次に、$ _SESSION
[‘uploaded’]が存在するかどうかをチェックして、写真がアップロードされたばかりかどうかを確認します。そうだった場合は、「写真がアップロードされました」というメッセージを送信する必要があります。それから$
_SESSION
[‘uploaded’]変数を削除しなければならないので、ページがリフレッシュされたか、無効な投稿が行われた場合に再び表示されません。

問題は、if(isset($ _ SESSION
[‘uploaded’]))行をスキップしてセッションを単に解除することです。だから、成功メッセージをエコーし​​ない。それが機能しない設定を削除すると、セッション全体が破棄されるまで常に表示されます。だから目標は、ページのリフレッシュ上の変数を持って、それをエコーし​​、それを削除します。

ベストアンサー

header() doesn’t halt execution of your script.
After the header() command, the script continues to
your isset()/unset() block. The solution is to
die after the header():

header("location: ?upload");
die;

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です