2014-12-19 65 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; 
    } 
} 

您可以删除它或把它会话之后。你不需要这两种方式,因为你没有做任何事情。