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

По какой-то причине он всегда говорит, что переменная сессии не была установлена, и выполняет еще, если часть, если заявление в первом фрагменте кода.

Заранее спасибо.

+1

У вас есть 'session_start()' перед тем, как вы начнете ссылаться на сессии vars? Должен присутствовать во всех скриптах, создающих ссылки на сеанс var. –

+0

Да, 'session_start()' находится в коде выше того, что дано. – user2594218

+3

'$ _SESSIONS' не является суперглобальной переменной, но вы, кажется, относитесь к ней как к одному. Вы хотите '$ _SESSION'. –

ответ

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; 
    } 
} 

Вы можете либо удалить его или поместить его после сессии. Оба пути вам не нужны, потому что вы с ним ничего не делаете.

Смежные вопросы