2013-11-16 4 views
0

Недавно я переключил свой код с mysql на mysqli OOP для лучшей практики. Я пытаюсь получить user_id из моей таблицы mysql и сохранить его в $_SESSION['user_id']. Я пробовал много разных итераций моего кода и работал над ним часами, но не повезло. На данный момент $_SESSION['user_id'] ничего не возвращает. Он работает с моим старым кодом mysql, поэтому я знаю, что это не проблема с моей таблицей. Я все еще новичок в mysqli, и я был бы очень признателен за любую помощь в этом вопросе.извлечение идентификатора пользователя из таблицы входа в систему SQL

Вот PHP:

<?php 

session_start(); 
$con = new mysqli("localhost","root","pw","db"); 

if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
exit(); 
} 

if(isset($_POST['submit'])){ 
    $query = "SELECT * FROM tapp_login WHERE username = ? AND password = ? LIMIT 1"; 
    $username = $_POST['user_name']; 
    $password = $_POST['pwd']; 

    $stmt = $con->prepare($query); 
    $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($row = $stmt->fetch()){ //fetching the contents of the row 
     $_SESSION['user_id'] = $row[1]; 
     $_SESSION['LOGIN_STATUS']=true; 
     $_SESSION['user_name'] = $username;    
     echo 'true'; 
    } 
    } 
    else { 
    echo 'false'; 
    } 
    $stmt->free_result(); 
    $stmt->close(); 
} 
else{ 
} 
$con->close(); 

?> 

Проверка работы и имя пользователя успешно хранится в сессии. Я думаю, что ошибка в $row = $stmt->fetch(), но я не могу понять это. Заранее спасибо!

+0

Что вы получаете с 'var_dump ($ строки);'? – kero

+0

У меня есть AJax, для которого требуется результат «истинного» эха. Когда я попытался поместить var_dump ($ row); внутри цикла while моя проверка больше не работает. Поэтому, если я делаю то же самое в печатной версии переменной строки за пределами цикла, я получаю «NULL». Я не уверен, что это хороший или даже правильный метод. – Rob

+0

При отладке Ajax вы можете просто сделать прямой вызов сценария в своем браузере, после чего вы сможете просмотреть результаты. –

ответ

0

Я думаю, что проблема эта линия:

$ _SESSION [ 'user_id'] = $ строки [1];

Я считаю, что это должно быть либо $ row [0], либо $ row ['user_id'].

(примечание: я использовал «user_id», но это было бы название столбца, который содержит идентификаторы)

+0

Кроме того, использование «*» неверно, чтобы получить 1 столбец из строки. Вы должны просто использовать имя столбца. –

+0

Я пробовал оба метода и не работал. – Rob

+0

Вижу. Ну, следующая очевидная проблема заключается в том, что ваш WHERE не дает никаких результатов. Вы можете сделать то, что сказал Кингкеро, использовать var_dump ($ row), чтобы увидеть, что там есть. Вы также можете закончить свой if ($ stmt-> num_rows == 1) с else {exit ('no record found'); }, чтобы проверить, что вы получаете результаты. –

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