mr-ZA
@mr-ZA

Авторизация на сайте, поможете?

Добрый вечер всем, недавно попросили написать простенький сайт с регистрацией и авторизацией. Сразу оговорюсь, много не знаю учусь непосредственно на практике параллельно штудируя мануалы. Регистрация проходит успешно логин/пароль в БД заносятся, коннект к базе на PHP написал все пашет. Авторизация тоже проходит успешно, логин и пасс из базы сверяется и ответ юзер получает. Вопрос состоит непосредственно в том, как сделать так, чтобы после авторизации пользователь видел перед собой сайт(index_0.php) как зарегистрированный пользователь, без кнопок авторизация и регистрация, чтобы на какую-бы страницу не кликнул юзер, сайт знал что он зарегистрирован и держал его данные как в сессии.

Ниже привожу код, авторизация (auth.php -> obrabotka_auth.php). Сам сайт (index_0.php, да я знаю что надо index.php, это тестовая версия!)

index_0.php

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8">                                          <!-- Кодировка сайта -->
	<title>test_homepage</title>
	<link href="css/style.css" rel="stylesheet" type="text/css">   <!-- Подключение файла со стилями -->
	<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon" />
</head>
<body>
	<header>
		<div id="logo">
			<a href="/index_0.php" title="На главную"><img src="img/home.png" width="50px" height="50px"></a>
		</div>
		<div id="Menu_head">
			<a href="/about.php" title="Обо мне">Обо мне</a>
		</div>
		<div id="regAUTH">
			<a href="/reg.php">
				<div>Регистрация</div>
			</a>
			<a href="/auth.php">
				<div>Войти</div>
			</a>
		</div>
	</header>
	
	<div id="wrapper">
		<div id="leftCol">											<!-- основной контент сайта -->
			<div id="bigArticle">
			
			</div>
			<div class="clear"></div>
			<div class="article">
			
			</div>
		</div>
		<div id="rightCol">                                         <!-- расположение баннеров на левой колонке от основного контента -->
			<div class="banner">
				<img src="img/banner1.png" alt="banner1" title="banner1">
			</div>
			<div class="banner">
				<img src="img/banner2.jpeg" alt="banner2" title="banner2">
			</div>
		</div>
	</div>
	
	<footer>
															<!-- подвал -->
		<div id="social">
			<a href="http://vk.com" title="мы вконтакте" target="_blank">
				<img src="img/if_vk.png" alt="Vk" title="VK">
			</a>
			<a href="http://facebook.com" title="мы в фэйсбук" target="_blank">
				<img src="img/if_facebook.png" alt="Facebook" title="FACEBOOK">		<!-- alt=надпись вместо картинки, title=при наведении -->
			</a>
			<a href="http://twitter.com" title="мы в twitter" target="_blank">
				<img src="img/if_twitter.png" alt="Twitter" title="Twitter">
			</a>
		</div>
		<div id="rights">
			<!-- &copy это значок копирайта, строка на php выводит текущий год, чтобы в будущем не править это каждый год -->
			Все права защищены &copy; <?php echo date ('Y')?>		<!-- 'php echo' можно заменить знаком '=' -->
		</div>
	</footer>
</body>
</html>


auth.php

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8">                                             		<!-- Кодировка сайта -->
	<title>test_homepage</title>
	<link href="css/style_reg.css" rel="stylesheet" type="text/css">   		<!-- Подключение файла со стилями -->
	<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon" />
	<?php include("includes/connectionDB.php"); ?>
</head>
<body>
	<h2>Вход:</h2>
	<div class="form_reg">
		<img src="img/i.png">
		<form action="obrabotka_auth.php" method="POST">
			<div class="input_data">
				<input type="text" name="login" id="login" placeholder="Введите логин">  <!-- placeholder=подсказка в поле -->
			</div>
			<div class="input_data">
				<input type="password" name="password" id="password" placeholder="Введите пароль">
			</div>
				<input class="submit_btn" type="submit" name="submit" value="Войти!">
				<!-- <a href="#">Восстановить пароль</a> -->
			</div>
		</form>
	</div>
<footer>
	
</footer>
</body>
</html>


obrabotka_auth.php

<?php			
    if (isset($_POST['login'])){
		$login = $_POST['login'];
		if ($login == '') {
			unset($login);
		} 
	} //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
    
	if (isset($_POST['password'])){
		$password=$_POST['password'];
		if ($password =='') {
			unset($password);
		}
	}
    
	//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
	if (empty($login) or empty($password)){ //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
		exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
    }
	
    //если логин и пароль введены, то обрабатываем их, чтобы теги, &/<> и скрипты не работали, мало ли что люди могут ввести
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
	$password = stripslashes($password);
    $password = htmlspecialchars($password);
	
	//удаляем лишние пробелы
    $login = trim($login);
    $password = trim($password);
 
	// подключаемся к базе
    include ("includes/connectionDB.php");
	
	//запрос из БД с данными которые мы вводим в форме(ed, 1234) -> 
	// -> SELECT password FROM user_db WHERE (login='ed') AND (password='1234')" 
	$sql = "SELECT login,password,id FROM user_db WHERE (login='$login') AND (password='$password')";
	
	//делаем запрос в БД
	//$result = $con->query($sql);
	$result = mysqli_query($con,$sql);
	
	//превращение в ассоциативный массив
	$row = mysqli_fetch_assoc($result);
	
	//Если введеный пароль и логин есть в базе то выводим это:
	if ($row["login"] == $login && $row["password"]==$password) {
		echo "<br />";
		print "------------------------------" . "<br>";
		echo "Login in DB: ";
		echo $row["login"];
		echo "<br />";
		echo "Password in DB: ";
		print $row["password"] . "<br>" . "------------------------------" . "<br>";
		echo "<br />";
		echo "Вы успешно авторизованы! Теперь вы можете зайти на сайт. <a href='/index_4_reged.php'>Главная страница</a>";
	}
	//Если нет то:
	else {
		print "<br>" . "<br>" . "--------------------------------------------------------------------";
		print "<br>" . "Пользователя: [" . $login . "] с паролем: [" . $password . "] НЕ СУЩЕСТВУЕТ!";
		print "<br>" . "Пожалуйста пройдите на страницу регистрации >"; 
		echo "<a href='http://site-dummy.zz/reg.php'>..register link..</a>";
		print "<br>" . "--------------------------------------------------------------------";
	}
	$con->close();
?>
  • Вопрос задан
  • 705 просмотров
Пригласить эксперта
Ответы на вопрос 6
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
тебе нужно этот блок
<div id="regAUTH">
      <a href="/reg.php">
        <div>Регистрация</div>
      </a>
      <a href="/auth.php">
        <div>Войти</div>
      </a>
    </div>

взять под if, то есть написать как-то
if (!isUserAuthenticated) {
  <nonAuthHeader />
}

чтобы этот код не вставлять на всех страницах, то header нужно вынести в отдельный файл, в нем добавить проверку и его уже инклюдить на каждой странице или на мастер-странице
Ответ написан
Комментировать
@oblogin
А может не стоит изобретать велосипед в данном случае и взять готовое решение? Laravel, Yii и т.д.
Ответ написан
irishmann
@irishmann
Научись пользоваться дебаггером
Почему сессии не используешь?
Ответ написан
@maddimas
В целом код весь стремный. Надо разделить код и вывод в html хотя бы в пределах одного файла. Echo убрать. Инклюды перенести наверх. Хедер, футер и главную область разделить на файлы. Exit с ошибкой это дурной тон имхо. Тримить пароль? А вдруг у меня пароль с пробелом? А где md5 пароля? А в целом, выше написали сделать if для блока с авторизацией и сессия вот и решение.
Ответ написан
@spocher
Сессии или куки
Ответ написан
Комментировать
@crazyhat
Web разработчик
Тут уже ответили по теме, но рекомендую сделать защиту от sql-инъекций. Если ты учишься, то это должно быть "в крови".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы