2013-11-14 7 views
1

Я уже зарегистрировал имя пользователя в переменной $ _SESSION [имя_пользователя]. Как я могу дополнительно сохранить user_id в переменной $ _SESSION [user_id]. Я попытался использовать $ stmt-> fetch_array (MYSQLI_NUM); но не повезло.PHP login validator + сохранить идентификатор пользователя

У меня есть таблица MySQL, как, например:

Логин:

+---------------+-------------+-------------+-------------+ 
| auto_id | username | password | user_id | 
+---------------+-------------+-------------+-------------+ 
|  0  |  a  |  b  |  1  | 
+---------------+-------------+-------------+-------------+ 
|  1  |  c  |  d  |  2  | 
+---------------+-------------+-------------+-------------+ 
|  2  |  e  |  f  |  3  | 
+---------------+-------------+-------------+-------------+ 

мой PHP Войти валидатор:

<?php 
session_start(); 
require_once('php/config.php'); 

if(isset($_POST['submit'])){ 
    $username = $_POST['user_name']; 
    $password = $_POST['pwd']; 
    $user_id_col = "3"; 

    $stmt = $con->prepare("SELECT * FROM tapp_login WHERE username = ? AND password = ? LIMIT 1"); 
    $stmt->bind_param('ss', $username, $password); 
    $stmt->execute(); 
    $stmt->bind_result($username, $password); 
    $stmt->store_result(); 
    if($stmt->num_rows == 1) //To check if the row exists 
    { 
    while($stmt->fetch()) 
    { 
    $_SESSION['LOGIN_STATUS']=true; 
    $_SESSION['user_name'] = $username; 
    $_SESSION['user_id'] = $user_id; 
    echo 'true'; 
    } 
    } 
    else { 
    echo 'false'; 
    } 
    $stmt->close(); 
} 
else{ 
} 
$con->close(); 
?> 

ответ

0

$ stmt-> fetch() возвращает значение, но вы никогда не храните его в переменной.

Использование

while($data = $stmt->fetch()) { 
    $_SESSION['userid'] = $data['userid']; 
} 
+0

Я думаю, что это именно то, что мне нужно. Логика имеет смысл. Однако, когда я повторяю $ _SESSION ['user_id'], я ничего не получаю, но если я повторяю $ _SESSION ['user_name'], я получаю соответствующее имя пользователя. Любые другие мысли? – Rob

+0

Что говорит vardump ($ data)? Возможно, сделана опечатка? –

+0

возвращает NULL? – Rob

0

Переменная $user_id никогда не определяется в коде. Я предполагаю, что вы используете PDO для выполнения запросов, это должно сделать трюк

$row = $stmt->fetch(PDO::FETCH_ASSOC); 
$_SESSION['LOGIN_STATUS']=true; 
$_SESSION['user_name'] = $username; 
$_SESSION['user_id'] = $row['user_id']; 

Поскольку вы только ожидаете одного результата, вам не нужен While-цикл.

Если вы задаетесь вопросом о загадочном PDO::FETCH_ASSOC, вы можете прочитать об этом в manual.

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