Проверка PHP не работает. Даже с хорошими данными (закрыто) - PullRequest
0 голосов
/ 07 октября 2019

Для моего сайта я хочу зарегистрироваться. И все идет хорошо, пока не пришло время для проверки. Итак, мне нужно все это в разных файлах (проверка в validation.php, регистрация в registration.php и форма регистрации в registrationForm.php). В Registration.php у меня есть что-то вроде этого:

<?php

    session_start();

    include 'validation.php';
    include "mail.php";
    include 'dbConnection/dbconn.php';

    if (isset($_POST['submit'])) {

        $name = $_POST['name'];
        $surname = $_POST['surname'];
        $username = $_POST['username'];
        $password1 = $_POST['password1'];
        $password2 = $_POST['password2'];
        $email = $_POST['email'];

        //sendMail("test", "test");

        if (validateName($name) && validateSurname($surname) && validateEmail($email) && validatePassword($password1) && validateUsername($username) && checkIfPasswordsAreMatching($password1, $password2)) {
            echo "Worked";
        } else {
            echo "Not worked";
            header("Location: registrationForm.php");
        }

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

?>

И моя проблема в том, что независимо от того, положил я хорошие данные или совершенно неправильные данные, моя проверка всегда говорит, что это неправильно.

Здесьмой код проверки (validation.php):

<?php

    session_start();

    $allChecked = true;

    function validateName($string) {

        if (strlen($string) < 2) {
            $allChecked = false;
            $_SESSION['nameError'] = "Your name is too short. It has to be at least 2 characters long.";
        }

        if (preg_match('[\W]', $string)) {
            $allChecked = false;
            $_SESSION['nameError'] = "Your name cannot contain any special character.";
        }

        return $string;

    }

    function validatePassword($string) {

        if (strlen($string) < 8 || strlen($string) > 20) {
            $allChecked = false;
            $_SESSION['passwordError'] = "Your password must be between 8 and 20 characters long.";
        }

        if (preg_match('/(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]/', $string) == false) {
            $allChecked = false;
            $_SESSION['passwordError'] = "Your password must contain at least 1 big letter, 1 special character, 1 number and 1 small letter.";
        }

        return $string;

    }

    function validateSurname($string) {

        if (strlen($string) < 2) {
            $allChecked = false;
            $_SESSION['surnameError'] = "Your surname is too short. It has to be at least 2 characters long.";
        }

        if (preg_match('[\W]', $string)) {
            $allChecked = false;
            $_SESSION['surnameError'] = "Your surname cannot contain any special character.";
        }

        return $string;

    }

    function validateUsername($string) {

        if (strlen($string) < 2 || strlen($string) > 20) {
            $allChecked = false;
            $_SESSION['usernameError'] = "Your username must be between 2 and 20 characters";
        }

        /*
        $sql = "SELECT * FROM Users WHERE username = '$string'";
        $sql = $conn->query($sql);
        $nameExists = $result->fetch();
        if($nameExists) {
            $allChecked = false;
            $_SESSION['usernameError'] = "Name is already taken";
        }
        */

        return $string;

    }

    function validateEmail($string) {

        $em = filter_var($string, FILTER_VALIDATE_EMAIL);
        if (!$em){
            $allChecked = false;
            $_SESSION['emailError'] = "Your email has to be valid.";
        }

        /*
        $sql = "SELECT * FROM Users WHERE mail = '$string'";
        $result = $conn->query($sql);
        $emailExists = $result->fetch();
        if($emailExists) {
            $allChecked = false;
            $_SESSION['emailError'] = "Email is already taken";
        }
        */

        return $allChecked;

    }

    function checkIfPasswordsAreMatching($password1, $password2) {
        if ($password2 != $password1) {
            $allChecked = false;
            $_SESSION['passwordError'] = "Passwords must be the same";
        }

        return $allChecked;
    }

?>

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

В ваших функциях validateName, validateSurname, validatePassword, validateUsername вы возвращаете исходную строку вместо результата проверки. В validateEmail и checkIfPasswordsAreMatching вы возвращаете $ allChecked, но он не инициализируется значением, если все проверки пройдены, поэтому вместо него возвращается null.

Вы должны переписать свои функции проверки, чтобы они выглядели так

function validateName($string) {
    if (strlen($string) < 2) {
        $_SESSION['nameError'] = "Your name is too short. It has to be at least 2 characters long.";
        return false;
    }

    if (preg_match('[\W]', $string)) {
        $_SESSION['nameError'] = "Your name cannot contain any special character.";
        return false;
    }

    return true;
}
0 голосов
/ 07 октября 2019

В каждом из ваших return операторов отметьте $allChecked и, если оно НЕ установлено, верните true вместо $allChecked.

return (isset($allChecked) ? $allChecked : true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...