コード:
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;