Добрый день, мне необходимо создать авторизацию с логином (телефон/почта) и паролем. С паролем проблем нет, а вот с логином...Я не знаю как мне написать данный код, у меня есть вариант, но не уверенна, что сработает, да и написала немного не так) Может javascript подключить надо. Мне хотя бы ссылка нужна на какой нибудь сайт) Вот код: PHP: # Выборка из базы по ключу, который вводит пользователь через форму $sql = $dbh->prepare("SELECT * FROM user where email = ? and phone = ?"); if ($sql->execute($_GET['?'])) { while ($result = $sql->fetch()) { print_r($result); } }
Код (Text): SELECT * FROM user where (email = ? OR phone = ?) AND password = ? соответственно в параметры передавать email, phone и хеш пароля
И как это свойство поможет получить данные пользователя? Там, наверное, все же or, а не and. И это, конечно, тоже чудо какое-то:
Это не свойство, а метод. Получить можно до и после. Но в ООП, мое мнение - лучше делать по порядку. PHP: $sql = 'SELECT * FROM `user` WHERE (`email` = :name OR `phone` = :name) AND `password` = :pass'; $resource = $db -> select( $sql, [ ':name' => $input['name'], ':pass' => $input['password'] ] ); if ( ! $resource -> rowCount() ) { /* ... -> empty return null; */ } ... -> get( $resource );
Ну, пускай метод, один фиг. Я по привычке сказал, т.к. в mysqli_result соотв. значение хранится в свойстве. Смысл был в том, что более чем норм. использовать один метод вместо двух
А как мне лучше вывести переменные?Я имею ввиду, нужно из базы в код вывести email,phone и password. Я не пойму, как мне под этот код написать их. --- Добавлено --- Я уже начала писать, но запуталась немного PHP: <?php session_start(); require 'db.php'; if(isset($_SESSION['uid'])){ header('location: /'); } echo '<pre>'; var_dump($resource); echo '</pre>'; # проверяем какой метод используется на веб странице, если не POST завершаем обработку if ($_SERVER['REQUEST_METHOD'] == 'POST') { # подготавливаем данные из формы фильтруем их $rulles = [ 'email' => FILTER_VALIDATE_EMAIL, 'phone' => FILTER_DEFAULT, 'password' => FILTER_DEFAULT ]; # фильтруем данные при необходимости $filter = filter_input_array(INPUT_POST, $rulles); # создадим пустой массив, для хранения ошибок $errors = []; # авторизация $sql = 'SELECT * FROM `user` WHERE (`email` = :name OR `phone` = :name) AND `password` = :pass'; $resource = $pdo -> select( $sql, [ ':name' => $input['name'], ':pass' => $input['password'] ] ); if ( ! $resource -> rowCount() ) { $errors[] = 'Строки не верны!'; // /* // ... -> empty // return null; // */ } $result -> get( $resource ); # записываем в сессию все данные полученные из базы $_SESSION['uid'] = $result; header('location: /'); exit(); // //******************************************************************** */ // // # проверяем пустоту email и пароль // // if (empty($filter['email']) && empty($filter['password'])) { // // $errors[] = 'Введите телефон или почту и пароль!'; // // } // // # проверка существования email в базе // // $sql = $pdo -> prepare('SELECT `password` FROM `users` WHERE `email` = ?'); // // $sql -> execute([$filter['email']]); // // $result = $sql -> fetch(); // // # проверяем пустоту телефон и пароль // // if (empty($filter['phone']) && empty($filter['phone'])) { // // $errors[] = 'Введите телефон или почту и пароль!'; // // } // // # проверка существования телефон в базе // // $sql = $pdo -> prepare('SELECT `password` FROM `users` WHERE `phone` = ?'); // // $sql -> execute([$filter['phone']]); // // $result = $sql -> fetch(); // //*********************************************************************** */ // # проверяем хеш от пароля, если не равно хешу из базы ошибка // if (!password_verify($filter['password'], $result['password'])) { // $errors[] = 'email или пароль не правильный'; // } // # если количество ошибок больше нуля показываем их // if(count($errors) > 0){ // echo '<div id="errors" style="color:red;">' .array_shift($errors). '</div><hr>'; // }else{ // ?> <!DOCTYPE HTML> <HEAD> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> </HEAD> <BODY> <br><br><br> <form action="login.php" method="POST" > <strong>Телефон или адрес эл.почты</strong> <p> <input type="text" class ="name" value="<?= $input['name'];?>"><br/> <p> <strong>Пароль</strong> <p> <input type="password" name="password" value="<?=$input['password']; ?>"><br/> <p> <button type="submit" name="do_login">Войти</button> </form> </BODY> </HTML> --- Добавлено --- Еще и ошибка Fatal error: Uncaught Error: Call to undefined method PDO::select() in C:\OSPanel\domains\regustratandvhod\login.php:32 Stack trace: #0 {main} thrown in C:\OSPanel\domains\regustratandvhod\login.php on line 32
Начни с линухи и ангийского, без этих знаний будут постоянные проблемы, на решения которых ты будешь тратить целые дни. PHP тащит за собой сервер, сервер тащит за собой линукс, линукс тащит за собой английский, php ничего не знает про mysql. PHP это язык программирования, программирование это инженерия, инжеру надо знать очень много.