Задать вопрос
@killsxs

Что не так в коде?

Перестала работать проверка на авторизованного пользователя при регистрации.
В общем, раньше, когда регистрировался под одним и тем же юзернеймом выходила ошибка. А сейчас спокойно можно создавать пользователя с одним и тем же юзернеймом. Хотя, код изменен не был. Вот код:
<?php
session_start();
require('connect.php');

if (isset($_POST['username']) and isset ($_POST['password'])){
	$username = $_POST['username'];
	$email = $_POST['email'];
	$password = $_POST['password'];
	$role = $_POST['role'];

	$query = 'INSERT INTO users SET username="'.$username.'", email="'.$email.'", password="'.$password.'", role="user"';

	$result = mysqli_query($connection, $query);

	if ($result){
		header('Location: index.html');
		$smsg = "Регистрация прошла успешно";
	} else { 
		$fsmsg = "Ошибка";
	}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <link rel="stylesheet" href="style.css">
    <title>Регистрация</title>
</head>
<body>
	<div class="container">
		<form class="form-signin" method="POST">
			<h2>Регистрация</h2>
			<?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"><?php echo $smsg; ?></div><?php }?>
			<?php if(isset($fsmsg)){ ?><div class="alert alert-danger" role="alert"><?php echo $fsmsg = "Ошибка: " . mysqli_error ( $connection ); ?></div><?php }?>

			<input type="text" name="username" class="form-control" placeholder="Username" required>
			<input type="email" name="email" class="form-control" placeholder="Email" required>
			<input type="password" name="password" class="form-control" placeholder="Password" required>
			<button class="btn btn-lg btn-primary btn-block" type="submit">Зарегистрироваться</button>
			<a href="login.php" class="btn btn-lg btn-primary btn-block">Авторизоваться</a>
		</form>
	</div>
</body>
</html>


Вод таблица БД, если это поможет решить вопрос:
5ea933791e9ef641662217.png
  • Вопрос задан
  • 117 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
dima9595
@dima9595
Junior PHP
У вас нет банальной проверки на существования пользователя (юзернейма) в БД. При регистрации нового пользователя соответственно не проходит проверка, есть ли такие данные в БД.
Так же, возможно, в самой таблице, в ячейках username, email нет уникального ключа. Соответственно регистрация происходит без ошибок.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Раньше был уникальный индекс в таблице на юзернейм, а сейчас нету.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@kur4chyt
Качественный говнокод от производителя
Допишите строчку в начале перед тем как создавать юзера.

if ( mysqli_query($connection, "SELECT * FROM `users` WHERE `username` = '$username'")->num_rows < 1 ){
//нет такого юзера все ок создаем нового
}else{
//такой юзер есть выдаем ошибку
}
Ответ написан
Stimulate
@Stimulate
могу
if (isset($_POST['username']) and isset ($_POST['password'])){
	$username = $_POST['username'];
	$email = $_POST['email'];
	$password = $_POST['password'];
	$role = $_POST['role'];

	$query = "SELECT 
		`u`.`id`
	FROM `users` AS `u`
	WHERE
		`u`.`username`='" . mysqli_real_escape_string($connection, $_POST['username']) . "'
		OR
		`u`.`email`='" . mysqli_real_escape_string($connection, $_POST['email']) . "'
	";
	
	$result = mysqli_query($connection, $query);
	
	if (mysqli_num_rows($result) == 0) {
		$query = "INSERT INTO `users`
		(
			`username`,
			`email`,
			`password`,
			`role`
		)
		VALUES (
			'" . mysqli_real_escape_string($connection, $_POST['username']) . "',
			'" . mysqli_real_escape_string($connection, $_POST['email']) . "'
			'" . mysqli_real_escape_string($connection, $_POST['password']) . "'
			'user'
		)";

		$result = mysqli_query($connection, $query);

		if ($result) {
			header('Location: index.html');
			$smsg = "Регистрация прошла успешно";
		} 
		else { 
			$fsmsg = "Ошибка";
		}
	}
	else {
		$fsmsg = "Повтор";
	}
}
Ответ написан
Ваш ответ на вопрос

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

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