0

Всем привет, я новичок в php, не могу понять где моя ошибка в check.php. строка 19. В БД есть колонки с login, name, pass. Если убрать

$user = User:findOne(['username = :login, 'password_hash = :pass'])
->addParams([':name' => $login, ':pass' => $pass])->limit(1);

то регистрация и авторизация проходит. Но мне нужно что бы при совпадающем Login (E-mail), регистрация не проходила повторно.

index.php

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewportt" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Форма регистрации</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<style>
body {
background: url(img/1.png) no-repeat;
-moz-background-size: 100%; /* Firefox 3.6+ */
-webkit-background-size: 100%; /* Safari 3.1+ и Chrome 4.0+ */
-o-background-size: 100%; /* Opera 9.6+ */
background-size: 100%; /* Современные браузеры */
}
</style>
<div class="container mt-4">
<div class="row">
<div class="col">
<h1>Форма регистрации</h1>
<form action="check.php" method="post">
<input type="text" class="form-control" name="login"
id="login" placeholder="E-mail"><br>
<input type="text" class="form-control" name="name"
id="name" placeholder="Введите имя"><br>
<input type="password" class="form-control" name="pass"
id="pass" placeholder="Введите пароль"><br>
<button class="btn btn-success"
type="submit">Зарегистрировать</button>
</form>
</div>
<div class="col">
<h1>Форма авторизации</h1>
<form action="auth.php" method="post">
<input type="text" class="form-control" name="login"
id="login" placeholder="E-mail"><br>
<input type="password" class="form-control" name="pass"
id="pass" placeholder="Введите пароль"><br>
<button class="btn btn-success"
type="submit">Войти</button>
</form>
</div>
</div>
</div>
</body>
</html>

check.php

<?php
$login = filter_var(trim($_POST['login']),
FILTER_UNSAFE_RAW);
$name = filter_var(trim($_POST['name']),
FILTER_UNSAFE_RAW);
$pass = filter_var(trim($_POST['pass']),
FILTER_UNSAFE_RAW);

if(mb_strlen($login) < 5 || mb_strlen($login) > 90) { echo "Недопустимя длина логина"; exit(); } else if(mb_strlen($name) < 3 || mb_strlen($name) > 50) { echo "Недопустимя длина имя"; exit(); } else if(mb_strlen($pass) < 6 || mb_strlen($pass) > 15) { echo "Недопустимя длина пароля. От 6-15"; exit(); } $user = User:findOne(['username = :login, 'password_hash = :pass']) ->addParams([':name' => $login, ':pass' => $pass])->limit(1); $mysql = new mysqli('localhost', 'root', '', 'register-bd' ); $mysql->query("INSERT INTO users (login, pass, name) VALUES('$login', '$pass', '$name')"); $mysql->close(); header('Location:/endreg.php'); ?>

Diamax
  • 1
  • 1
  • я не новичок, но тоже не пойму в чем ваша ошибка, пока вы не опишите, что вообще делает этот кода,, какое поведение вы ожидаете, и что получаете по факту. А если вы еще и код отформатируете с отступами, то вообще хорошо будет. – teran Apr 28 '22 at 07:16
  • User:findOne явно синтаксически некорректная конструкция – teran Apr 28 '22 at 07:17
  • если модель есть, то на какой вы потом на чистом sql вставляете данные? при этом всегда вставляете, не проверяя нашлось там чего-то или нет – teran Apr 28 '22 at 07:19
  • Если человек вводит при регистрации один и тот же емэил, то вывести сообщения, такой пользователь есть. Простая проверка из БД на повтор емэил. – Diamax Apr 28 '22 at 10:04

0 Answers0