PHP会话变量,检查然后删除


PHP session variable, check then delete

代码:

    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()不会停止脚本的执行。在header()命令之后,脚本将继续到您的isset()/unset()块。解决方案是对die之后的header():

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

我认为这只是输出和取消设置顺序的问题。

$_SESSION['test'] = 1;
echo "test session variable is: {$_SESSION['test']} <br />";
unset($_SESSION['test']);
echo "test session variable is: {$_SESSION['test']}";

将输出:

test session variable is: 1
test session variable is: