Я вижу некоторые серьезные проблемы со сценарием:
- Не использовать MySQLi - это осуждается и не должны использоваться. Используйте PDO istead.
- Вы должны использовать ваши пароли. Читайте о
password_hash()
.
Не создавайте SQL-выражения conca3. Вы вводите строку из пользовательского ввода. Это воодушевляет к sql-инъекции. Вы должны использовать заполнители.
$stmt = $db->prepare("SELECT * FROM user WHERE uid=:uid AND password=:password");
$stmt->execute(array(':password' => $password, ':uid' => $uid));
$rows = $stmt->fetchAll();
Если вы хотите более подробный обзор вашего кода вы можете разместить на codereview.
Что касается реализации ролей, вы можете создать дополнительную таблицу ROLE с одним столбцом NAME. Например (в MySql):
CREATE TABLE role (
name varchar(255) NOT NULL
)
ALTER TABLE role ADD PRIMARY KEY ('name');
INSERT INTO role (name) VALUES
('ADMIN'),
('STUDENT');
Затем можно добавить дополнительный столбец в таблице пользователей с внешним ключом к роли таблицы.
ALTER TABLE user ADD (
role varchar(255) NOT NULL,
FOREIGN KEY(role) REFERENCES role(name)
)
Десять вы могли бы просто получить имя роли и перенаправить в нужное место.
if($row['ROLE'] == "ADMIN"){
header("Location: http://example.com/admin.php");
die();
} else {
....
}
В чем преимущества этого подхода? У вас есть все ваши роли, перечисленные в одной таблице, и из-за внешнего ключа вы сохраните целостность данных. В столбце ROLE таблицы USER вы сможете сохранить только роль, которая также хранится в таблице ROLE. Если вы попытаетесь удалить роль, которая назначена, все еще назначенная для любой пользовательской базы данных, это не позволит.
Этот ответ предполагает, что ваш пользователь может иметь только одну роль. Если вы хотите, чтобы у вас было несколько роли для пользователя, вам нужно научиться сопоставлять отношения «многие ко многим» в базе данных.
Что означает добавление роли? – Shiv
Добавление роли (admin, student) в случае, если admin отправляется в xxx.php, студент-студент отправляется на yyy.php –
нет вывода перед заголовками, это должно быть изгиб ошибок – nogad