簡體   English   中英

會話變量未保留

[英]Session variable is not remaining set

基本上,我試圖將會話變量設置為布爾值,以確保用戶無法兩次完成函數。

session_start()
if(isset($_GET['vote'], $_GET['title'], $_GET['user']))
{
    if(isset($_SESSION[$_GET['title']]))
    {
        $_SESSION[$_GET['title']] = true;
    }
    else if(!isset($_SESSION[$_GET['title']]))
    {
        $_SESSION[$_GET['title']] = false;
        add_title_vote($_GET['title'], $_GET['vote'], $_GET['user']);
    }
}

該代碼應采用在get方法中發送的信息,然后基於一個get變量title來創建一個新的會話變量。 如果會話變量已經存在,則應將其設置為true 如果該變量不存在,則將會話變量設置為false並調用依賴於該會話變量的值的函數。 僅當會話變量為false時才調用該函數。

如果會話變量為false則調用該函數:

function add_title_vote($title, $vote, $user)
{
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "Assignments";
    $connection = new mysqli($servername, $username, $password, $dbname);
    if($_SESSION[$title] == false)
    {
    if($vote === 'up')
    {
    $sql = "UPDATE `mi4` SET `relevance` = `relevance` + 1 WHERE `title`='$title'";
    $servername1 = "localhost";
    $username1 = "root";
    $password1 = "";
    $dbname1 = "Users";
    $connection1 = new mysqli($servername1, $username1, $password1, $dbname1);
    mysqli_query($connection1, "UPDATE `login` SET `score` = `score` + 1 WHERE `user` = '$user'");
    }
    else if ($vote === 'down' && $votedown[$title] == false)
    {
    $sql = "UPDATE `mi4` SET `relevance` = `relevance` - 1 WHERE `title`='$title'";
    $servername1 = "localhost";
    $username1 = "root";
    $password1 = "";
    $dbname1 = "Users";
    $connection1 = new mysqli($servername1, $username1, $password1, $dbname1);
    mysqli_query($connection1, "UPDATE `login` SET `score` = `score` - 1 WHERE `user` = '$user'");
    }
    mysqli_query($connection, $sql);
    $_SESSION['voted'] = true;
    header("Location: /mi4.php");
    die();
    $_SESSION[$title] = true;
    }
}

由於某種原因,它總是說尚未設置會話變量,並在第一段代碼中執行if語句的else if部分。

提前致謝。

在設置會話之前,您已經編寫了die()

    mysqli_query($connection, $sql);
    $_SESSION['voted'] = true;
    header("Location: /mi4.php");
    die(); <--
    $_SESSION[$title] = true; 
    }
}

您可以刪除它,也可以在會話后放置它。 兩種方式都不需要它,因為您沒有對其進行任何操作。

只需復制並過去。 有用。

session_start();
if(isset($_GET['vote'], $_GET['title'], $_GET['user']))
{
    if(isset($_SESSION[$_GET['title']]))
    {
        $_SESSION[$_GET['title']] = true;
    }
    else if(!isset($_SESSION[$_GET['title']]))
    {
        $_SESSION[$_GET['title']] = false;
        add_title_vote($_GET['title'], $_GET['vote'], $_GET['user']);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM