2016-10-26 5 views
1
<?php 
session_start(); 

include 'dbConnection.php'; 

$uid = $_POST['uid']; 
$pwd = $_POST['pwd']; 

$sql = "SELECT * FROM user WHERE uid='$uid' and pwd='$pwd'"; 
$result = $conn->query($sql); 


if(!$row = $result->fetch_assoc()) 
{ 
    echo '<script language="javascript">'; 
    echo 'alert("Username or Password Incorret!")'; 
    echo '</script>'; 
    header("Location:index.php"); 

} 
else{ 

$_SESSION['id']= $row['id'];  
echo '<script language="javascript">'; 
echo 'alert("Logged!")'; 
echo '</script>'; 

} 
?> 

Hello community, Код, приведенный выше, - это простой логин, который я пытаюсь разработать. Я новичок в PHP, все еще учась, скрипт отлично работает (но отсутствует шифрование), следующий шаг для входа в систему - , добавьте роль, но я не знаю, где добавить или адаптировать мой код! Если у кого-то есть предложения, они все приветствуются!PHP логин добавление роли

+0

Что означает добавление роли? – Shiv

+0

Добавление роли (admin, student) в случае, если admin отправляется в xxx.php, студент-студент отправляется на yyy.php –

+0

нет вывода перед заголовками, это должно быть изгиб ошибок – nogad

ответ

1

Исходя из того, что вы сказали в комментариях:

Во-первых добавить колонку для «роли» в таблице базы данных.

Тогда ваш скрипт PHP мог бы просто добавить следующее в успешный блок входа.

if($row['role'] == "Admin"){ 
    header('Location: admin.php'); 
}elseif($row['role'] == "Student"){ 
    header('Location: student.php'); 
} 

Как уже говорили другие, вы действительно должны использовать надлежащую систему аутентификации, которая заботится о побеге SQL запросов, безопасность, хэширования паролей и т.д.

+0

Пожалуйста, не тратьте время на ответы на слишком широкие вопросы. –

+0

@JayBlanchard ok. Я буду помнить об этом. Я просто помню время, когда я был новым для SO и чувствовал, что все были суровыми: p – Shiv

+1

Я понимаю, но это не о том, чтобы быть суровым. –

-1

Чтобы получить это правильно, вы будете нуждаться в отдельную таблицу в базе данных для ролей и дополнительный столбец в пользовательской таблице с user_role, где вы храните идентификатор из таблицы ролей, которую пользователь должен был назначить ему. При извлечении данных вы присоединяете две таблицы к идентификатору и получаете другую информацию о роли, например имя.

Таким образом, роль-таблица будет содержать что-то вроде: ROLE_ID, role_name вы можете, конечно, иметь другую информацию здесь, а также, как user_level (INT), но это для более продвинутого проекта.

В таблице пользователя вы добавляете столбец user_role, в котором вы храните идентификационный номер из таблицы ролей.

Чтобы получить реальное имя роли, вы должны объединить эти две таблицы, что-то, как это будет делать: $sql = "SELECT * FROM user t1 LEFT JOIN role t2 ON t1.user_role = t2.role_id WHERE uid='$uid' and pwd='$pwd'";

Таким образом, вы будете иметь другой результат в возвращаемой информации из базы данных, содержащий роль.

+0

Пожалуйста, не тратьте время на слишком широкие вопросы. –

0

Я вижу некоторые серьезные проблемы со сценарием:

  1. Не использовать MySQLi - это осуждается и не должны использоваться. Используйте PDO istead.
  2. Вы должны использовать ваши пароли. Читайте о password_hash().
  3. Не создавайте 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. Если вы попытаетесь удалить роль, которая назначена, все еще назначенная для любой пользовательской базы данных, это не позволит.

Этот ответ предполагает, что ваш пользователь может иметь только одну роль. Если вы хотите, чтобы у вас было несколько роли для пользователя, вам нужно научиться сопоставлять отношения «многие ко многим» в базе данных.

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