2014-12-19 63 views
0

基本上我試圖設置一個會話變量作爲布爾值來確保用戶不能兩次完成一個函數。會話變量沒有設置

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方法發送,然後根據一個方面的信息獲取變量,稱號,創建一個新的會話變量。如果會話變量已經存在,則應該將該變量設置爲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語句否則,如果部分的代碼。

在此先感謝。

+1

在開始引用會話變量之前,你有'session_start()'嗎?必須存在於製作會話var引用的所有腳本中。 – 2014-12-19 05:11:52

+0

是的,'session_start()'在代碼的上面給出。 – user2594218 2014-12-19 05:13:35

+3

'$ _SESSIONS'不是一個超全球變量,但您似乎將其視爲一個整體。你想要'$ _SESSION'。 – 2014-12-19 05:14:49

回答

0

只需複製並過去。有用。

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']); 
    } 
} 
1

你寫die()您設置會話之前:

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

您可以刪除它或把它會話之後。你不需要這兩種方式,因爲你沒有做任何事情。