Возникли проблемы при создании системы регистрации / входа с помощью операторов PDO в PHP - PullRequest
0 голосов
/ 17 сентября 2018

Я попытался создать систему регистрации / входа, используя PHP и MySQL, но наткнулся на проблему с операторами PDO.Невозможно заставить работать часть кода «fetch», поскольку я не знаком с инструкциями PDO, поэтому буду признателен за помощь.Кроме того, я был бы очень признателен за объяснение того, как переменные-заполнители работают в операторах PDO и как мы проверяем, есть ли уже имя пользователя в базе данных с помощью метода "fetch" в операторах PDO.

База данных MySQLэто довольно просто.Он включает в себя поле «id» (первичный ключ) с автоинкрементом, поле «firstname», поле «lastname», поле «email», поле «username» и «password» соответственно.

Вот HTML-часть кода:

<form class="signUp" action="signup.inc.php" method="POST">
<input type="text" name="first" placeholder="First name" class="firstname" required>
<input type="text" name="last" placeholder="Last name" class="lastname" required>
<input type="text" name="email" placeholder="E-mail" class="email" required>
<input type="text" name="username" placeholder="Username" class="username" required>
<input type="password" name="password" placeholder="Password" class="password" required>
<input type="submit" class="submit" name="submit" value="Sign up">
</form>

А вот неудачная попытка проверки PHP с помощью операторов PDO (очевидно, она не работает):

<?php

if (isset($_POST['submit'])){
include_once 'init.php';

$first = $_POST['first'];
$last = $_POST['last']
$email = $_POST['email']
$username = $_POST['username']
$password = $_POST['password']

if (empty($first) || empty($last) || empty($email) || empty($username) || empty($password)){
    header("Location: signup.php?signup=empty");
    exit();
} else{
    if (!preg_match("/^[a-zA-Z]*$/", $first) || !preg_match("/^[a-zA-Z]*$/", $last)){
        header("Location: signup.php?signup=invalid");
        exit();
    } else{
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
            header("Location: signup.php?signup=invalidEmail");
            exit();
        } else{
            $query = $db->prepare("SELECT * FROM users WHERE username = :username");
            $query->execute(['username' => $username]);
            $results = $query->fetch();

            if ($query->rowCount()>0){
                header("Location: signup.php?signup=usernameTaken");
                exit();
            } else{
                $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
                $query = $db->prepare("INSERT INTO users (firstname, lastname, email, username, password) VALUES ('$first', '$last', '$email', '$username', '$hashedPassword'))";
                $query->execute();
                header("Location: signup.php?signup=success");
                exit();
            }
        }
    }
}

} else{
header("Location: signup.php");
exit();
}

Спасибо!

1 Ответ

0 голосов
/ 17 сентября 2018

Вы не обязательные параметры.Это где заполнитель вступить в разговор.Заполнитель ? используется для привязки параметров.Вы не можете подготовить оператор с переменными php, но только с заполнителями.Взгляните на переписывание соответствующего фрагмента вашего кода:

// note that the 
$query = $db->prepare("INSERT INTO users (firstname, lastname, email, username, password) VALUES (?, ?, ?, ?, ?)");
$query->bindParam(':firstname', $first);
$query->bindParam(':lastname', $last);
$query->bindParam(':email', $email);
$query->bindParam(':username', $username);
$query->bindParam(':password', $hashedPassword);
$query->execute();

Если вы не хотите самостоятельно изучать этапы валидации, потому что вы хотите учиться самостоятельно, вы можете подумать о поискев библиотеке как GUMP для проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...