Member 13367945 Ответов: 2

Где добавить оператор if, который перенаправляет пользователя на разные страницы в зависимости от их типа?


Я хочу добавить оператор if, на который перенаправляется user_type=1 admin.html и user_type=0 перенаправляется на user.html. Но я не знаю, где и как это написать. Код, который у меня есть, работает только для обычных пользователей.

<?php
	require_once ('../../connect.php');
	$user_email = $_POST['user_email'];
	$user_password = $_POST['user_password'];

	if ($user_email != NULL AND $user_password != NULL) 
	{
		$login = "SELECT * FROM tblusers where user_email = '$user_email' AND user_password = '$user_password' AND user_type=0";
		$result = mysqli_query($dbc, $login);

		if (mysqli_num_rows($result) >0)
		{
			setcookie('user_email', $user_email);
			setcookie('user_password', $user_password);

			echo ' window.location ="user.html<b></b>"; ';
		}

		else
		{
		echo ' alert("The email or password you have entered may be incorrect"); window.location ="login.html"; ';	
		}
	}

	else
	{
		echo ' alert("Please enter your email and password in the relative fields"); window.location ="login.html"; ';		
	}

	mysqli_close($dbc);
?>


Что я уже пробовал:

<?php
    require_once ('../../connect.php');
    $user_email = $_POST['user_email'];
    $user_password = $_POST['user_password'];

    if ($user_email != NULL AND $user_password != NULL) 
    {
        $login = "SELECT * FROM tblusers where user_email = '$user_email' AND user_password = '$user_password' AND user_type=0";
        $result = mysqli_query($dbc, $login);

        if (mysqli_num_rows($result) >0 ) 
        {
            setcookie('user_email', $user_email);
            setcookie('user_password', $user_password);

            echo ' window.location ="user.html"; ';
        }

        else
        {
        echo ' alert("The email or password you have entered may be incorrect"); window.location ="login.html"; ';  
        }
    }

    else ($user_email != NULL AND $user_password != NULL) 
    {
        $login = "SELECT * FROM tblusers where user_email = '$user_email' AND user_password = '$user_password' AND user_type=1";
        $result = mysqli_query($dbc, $login);

        if (mysqli_num_rows($result) >0 ) 
        {
            setcookie('user_email', $user_email);
            setcookie('user_password', $user_password);

            echo ' window.location ="admin.html"; ';
        }

        else
        {
        echo ' alert("The email or password you have entered may be incorrect"); window.location ="login.html"; ';  
        }
    }

    else
    {
        echo ' alert("Please enter your email and password in the relative fields"); window.location ="login.html"; ';      
    }

    mysqli_close($dbc);
?>

Richard Deeming

НИКОГДА храните пароли в виде обычного текста, а также НИКОГДА храните пароли в файле cookie!

Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]

Это может быть только простой школьный проект, но никогда не бывает слишком рано, чтобы начать делать все правильно! :)

2 Ответов

Рейтинг:
1

Richard Deeming

Я не разработчик PHP, но что-то вроде этого должно работать:

<?php
    require_once ('../../connect.php');
    $user_email = $_POST['user_email'];
    $user_password = $_POST['user_password'];
 
    if ($user_email != NULL AND $user_password != NULL) 
    {
        if ($stmt = mysqli_prepare($dbc, "SELECT user_type FROM tblusers where user_email = ? AND user_password = ?"))
        {
            mysqli_stmt_bind_param($stmt, 'ss', $user_email, $user_password);
            
            mysqli_stmt_execute($stmt);
            
            mysqli_stmt_bind_result($stmt, $user_type);
            
            if (mysqli_stmt_fetch($stmt))
            {
                // TODO: Use a more secure authentication mechanism.
                // NB: *NEVER* store the password in a cookie!
                setcookie('user_email', $user_email);
                
                if ($user_type == 1)
                {
                    echo ' window.location ="admin.html"; ';
                }
                else
                {
                    echo ' window.location ="user.html"; ';
                }
            }
            else
            {
                echo ' alert("The email or password you have entered may be incorrect"); window.location ="login.html"; '; 
            }
            
            mysqli_stmt_close($stmt);
        }
    }
    else
    {
        echo ' alert("Please enter your email and password in the relative fields"); window.location ="login.html"; ';      
    }
    
    mysqli_close($dbc);
?>

Но, как я уже упоминал в комментариях, вы должны никогда храните пароли в виде обычного текста. И абсолютно не храните пароль в файле cookie!

Реализация безопасной аутентификации пользователей в PHP-приложениях с длительной персистентностью (вход с помощью файлов cookie" Remember Me") - Paragon Initiative Enterprises Blog[^]

GitHub-PHPAuth/PHPAuth: PHPAuth-это безопасный класс аутентификации PHP, который легко интегрируется в любой сайт.[^]


Mohibur Rashid

Чтобы добавить к вашему ответу, ввод электронной почты пользователя в файл cookie будет иметь некоторые проблемы. взгляните на сеанс

Рейтинг:
0

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]


Member 13367945

Я знаю об этой проблеме, но я строю ее для простого школьного проекта. Я ценю ваш вклад. Но не могли бы вы помочь мне с моим вопросом?

Patrice T

Обновил свой вопрос с помощью форматирования кода.