2016-11-17 3 views
2

Подумайте, может ли кто-нибудь помочь мне. Я пытаюсь установить переменную сеанса из таблицы базы данных. По сути, что мне нужно сделать, это когда кто-то входит в систему, он берет значение из столбца «user_group» таблицы пользователя для пользователя, который вошел в систему и назначил его переменной сеанса. На данный момент он просто передает имя пользователя, которое вручную вводится пользователем при входе в систему.Установка переменной сеанса

Это мой текущий код для login.php. Я пробовал разные вещи и смотрел здесь для советов, но не имел никакой удачи.

<?php 
 

 
session_start(); 
 

 
$host = "localhost"; 
 
$user = "root"; 
 
$pass = ""; 
 
$db = "california"; 
 

 
mysql_connect($host, $user, $pass); 
 
mysql_select_db($db); 
 

 

 
\t $username = $_POST['name']; 
 
\t $password = md5 ($_POST['password']); 
 
\t // check to make sure both fields are entered 
 
if ($username == '' || $password == '') 
 
{ 
 
header("Location:login-fail.htm"); 
 
} 
 
else 
 
\t $sql = "SELECT * FROM users WHERE name='".$username."' AND password='".$password. 
 
\t "' LIMIT 1"; 
 
\t $res = mysql_query($sql); 
 
\t if (mysql_num_rows($res) == 1) { 
 
\t  $_SESSION['logged_in']= $username; 
 
\t \t header("Location:login-success.htm"); 
 
\t \t exit(); 
 
\t } else { 
 
\t \t header("Location:login-fail.htm"); 
 
\t \t exit(); 
 
\t } 
 

 
?>

+1

Назначить значение из '$ res' вместо' $ username' – Blinkydamo

+0

Кроме того, вы должны использовать что-то вроде функций 'mysqli' вместо' mysql'. – SaidbakR

+0

что sємsєм сказал, плюс: у вас есть дыры в безопасности. ваш код широко открыт для SQL-инъекций - представьте, что кто-то разместил имя пользователя '' DROP TABLE users; - ', вам следует избегать вашего параметра или даже лучше: использовать параметризованные запросы - и' md5' не является безопасным хэшем в течение некоторого времени, он может быть взломан - PHP предоставляет функции 'password_hash()' для создания безопасных хэшей и 'password_verify()' для проверки паролей на эти хэши. –

ответ

2

что произойдет, если вы добавляете

$row = mysql_fetch_assoc($res); 

после mysql_query и назначить группу на сессии

$_SESSION['logged_in'] = $row['user_group'] 

EDIT: Я также хочу сообщить y ou, что функции mysql_ * устарели. Кроме того, ваш запрос MySQL не защищен от SQL Инъекции

+0

Это сработало! Спасибо за вашу помощь. Я только начинаю изучать основы php. –

0

Вы должны использовать результат из БД:

//... 
$res = mysql_query($sql); 
while ($row = mysql_fetch_assoc($res)) { 
    $_SESSION['logged_in']= $row['user_group']; 
} 
//... 

EDIT: Попробуйте использовать Mysql PDO вместо mysql_ * функции. Они устарели: http://php.net/manual/en/ref.pdo-mysql.php

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