Я создаю сайт, где есть три разных уровня доступа
В форме входа мне удалось проверить, совпадает ли пароль (SHA1) с паролем в базе данных (который зашифрован), но не проверил идентификатор пользователя.
Когда пользователь или сотрудник / администратор зарегистрированы, их данные сохраняются в
отдельные таблицы, которые имеют более подробную информацию (Name, DateOfBirth, …).
Как бы я реализовать это в моем коде?
$result = mysql_query( $qs ) or die( mysql_error() );
while( $row = mysql_fetch_array( $result ) ){
$stored_password = $row['Password'];
if( $stored_password == sha1( $pw ) ){
$_SESSION['Status'] = $row['Status'];
if( $_SESSION['Status'] == 0 ){
echo "<h1>User Menu Loading...</h1>";
echo"<META HTTP-EQUIV='Refresh' Content='1;URL=http://***/'>";
}else{
echo "<h1>Incorrect Password.</h1>";
echo"<META HTTP-EQUIV='Refresh' Content='1;URL=http://**/login.php'>";
}
}
Есть ли способ, с помощью которого все эти три типа пользователей могут войти через страницу входа и получить данные из двух разных таблиц?
Я пробовал много способов, но постоянно получаю пустой экран или он говорит
неверный пароль
хотя пароль правильный.
переменные
$un = $_POST['User_ID'];
$sf = $_POST['Staff_ID'];
$pw = $_POST['Password'];
$st = $_POST['Status'];
если нет, то я думаю, что я должен создать отдельные зоны входа.
благодарю вас ( Я в настоящее время меняю MySQL на MySQL )
ADDED САМАЯ ПОСЛЕДНЯЯ ПОПЫТКА О $ QS
$qs="SELECT Cadets.Cadet_ID, Cadets.Password, Cadets.Status,
Staff.Staff_ID, Staff.Password, Staff.Status,
FROM Cadets, Staff
WHERE Cadets.Cadet_ID ='$un' AND Staff.Staff_ID = '$sf'";
Я обновлю свой ответ, когда вы отредактируете свой вопрос, чтобы добавить больше информации.
A) Вы не должны использовать библиотеку mysql, так как она небезопасна и не рекомендуется (скоро будет удалена): Почему я не должен использовать функции mysql_ * в PHP?
Вы должны использовать mysqli или библиотеку PDO.
Б) Sha1 не является безопасным, вы должны использовать что-то вроде password_hash () или же крипты () но я думаю, что sha1 подходит для образовательных целей.
C) Вопрос 1: Вам не нужно проверять удостоверение личности.
Ты используешь while ($row = mysql_fetch_array($result)) {
но так как вы ищете уникальное имя пользователя / комбинацию, должен быть только один результат или ни одного:
if ($record = mysql_fetch_array($result)) {
Кажется, вы только проверяете, верен ли пароль, но вам действительно нужно проверять уникальную комбинацию имени пользователя и пароля (что, если два пользователя имеют одинаковые пароли? sha1()
не помогает тебе там.
Таким образом, вы должны иметь что-то вроде:
$qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"
Или, если вы используете фактический идентификатор персонала в качестве имени пользователя:
$ qs = «SELECT * FROM пользователей, ГДЕ username = ‘$ id’ И пароль = ‘». sha1 ($ pw). «‘»
D) Вы не сможете увидеть это сообщение echo "<h1>User Menu Loading...</h1>";
как у вас есть перенаправление сразу после
E) Вопрос 2: вам нужно уточнить немного, есть ли 2 или 3 таблицы (поскольку вы упоминаете, что есть 3 типа пользователей).
В.1) Чтобы проверить идентификатор пользователя: Сначала проверьте ID пользователя в базе данных, а затем проверьте пароль
$db=new mysqli("host", "sqlusername","sqlpassword","database");
$stmt = $db->prepare("select * from your_table_name where user_ID = ?");
$stmt->bind_param("s",$un);
$stmt->execute();
$result=$stmt->get_result();
В.2) Да. Есть способ сделать это. Но вопрос немного неполный, добавьте несколько кодов.