Переменные, не проходящие между операторами IF PHP

Итак, я пишу фрагмент кода, который проверяет ряд условий, заданных в инструкциях IF, чтобы отобразить кнопку для регистрации на веб-сайте. Однако переменные, которые я объявляю как истинные / ложные в моих операторах IF, похоже, не переносятся в оператор, где он определяет, все ли они являются истинными. Я посмотрел онлайн и, похоже, нигде не могу найти никакой проблемы, подобной этой, так что я не знаю, глуп ли я или есть настоящая проблема. Вот мой код:

<?php

include_once('db_conx.php');

//CHECKING USERNAME IS NOT TAKEN 

if(!empty($_POST["username"])) {

    $usernameAuth = false; 
    $username = $_POST['username'];

    $sql = "SELECT * FROM users WHERE username='$username'";
    $queryUname = mysqli_query($conn, $sql); 
    $username_check = mysqli_num_rows($queryUname);

    if($username_check>0){
        echo "Username Not Available.";
    } else {
        echo "Username Available.";
        $usernameAuth = true;
    }
}

//CHECKING EMAIL HAS NOT BEEN USED BEFORE

if(!empty($_POST["email"])) {

    $emailAuth = false;
    $email = $_POST['email'];

    $sql = "SELECT * FROM users WHERE email='$email'";
    $queryEmail = mysqli_query($conn, $sql); 
    $email_check = mysqli_num_rows($queryEmail);

    if($email_check>0){
        echo "Email already registered.";
    } else {
        $emailAuth = true;
    }
}

//CHECKING THAT THE PASSWORDS MATCH AND ARE VALID

if(!empty($_POST["password1"]) && !empty($_POST["password2"])) {

    $passAuth = false;
    $password1 = $_POST['password1'];
    $password2 = $_POST['password2'];

    if($password1 != $password2) {
        echo "Your passwords do not match.";
    } elseif(!preg_match("#[0-9]+#",$password1)) {
        echo "Your Password Must Contain At Least 1 Number!";
    } elseif(!preg_match("#[A-Z]+#",$password1)) {
        echo "Your Password Must Contain At Least 1 Capital Letter!";
    } elseif(!preg_match("#[a-z]+#",$password1)) {
        echo "Your Password Must Contain At Least 1 Lowercase Letter!";
    } else {
        $passAuth = true;
    }
}

//CHECKING TO SEE IF ALL THE VALIDATION CONDITIONS ARE MET

if(!empty($_POST["checkinput"])){

    if(($usernameAuth) && ($emailAuth) && ($passAuth)){
        echo '<button id="button" class="btn waves-effect waves-light" type="submit" onclick="signup()" name="action">Register<i class="material-icons right">send</i></button>';
    } else {
        echo 'shite';
    }
}
?>

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

ОБНОВИТЬ

Добавлены AJAX JQUERY и код index.php:

<!DOCTYPE html>

  <!--stylesheet -->
    <link rel="stylesheet" type="text/css" href="stylesheet.css">

  <!-- MaterializeCSS -->
    <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link type="text/css" rel="stylesheet" href="css/materialize.min.css"  media="screen,projection"/>

  <!-- fullPage.js -->
    <link rel="stylesheet" type="text/css" href="fullPage.js-master/jquery.fullPage.css" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="vendors/jquery.easings.min.js"></script>
    <script type="text/javascript" src="fullPage.js-master/vendors/jquery.slimscroll.min.js"></script>
    <script type="text/javascript" src="fullPage.js-master/jquery.fullPage.js"></script>

    <!--TILE SCROLLING-->
    <script type="text/javascript" language="javascript">
    $(document).ready(function() {
        $('#fullpage').fullpage({
            verticalCentered: true,
            sectionsColor: ['#1bbc9b', '#2c3e50', '#34495e'],
            anchors: ['homepage', 'Login', 'Register'],
            afterRender: function(){
                //playing the video
                $('video').get(0).play();
            }
        });
    });
    </script>
    <!-- VALIDATING THE NEEDED FIELDS -->
    <script type="text/javascript">
    //CHECKING USERNAME

        function UserAvailability() {
            jQuery.ajax({
            url: "scripts/validation.php",
            data:'username='+$("#username").val(),
            type: "POST",
            success:function(data){
                $("#user-availability-status").html(data);
                },
            error:function (){}
            });
        }

    //CHECKING EMAIL

        function EmailAvailability() {
            jQuery.ajax({
            url: "scripts/validation.php",
            data:'email='+$("#email").val(),
            type: "POST",
            success:function(data){
                $("#email-availability-status").html(data);
                },
            });
        }

    //CHECKING PASSWORDS MATCH

        function passwordCheck() {
            jQuery.ajax({
            url: "scripts/validation.php",
            data:'password1='+$("#password1").val()+'&password2='+$("#password2").val(),
            type: "POST",
            success:function(data){
                $("#password-status").html(data);
                },
            });
        }

    //SIGNUP

        function checkInput() {
            jQuery.ajax({
            url: "scripts/validation.php",
            data:'checkinput=success',
            type: "POST",
            success:function(data){
                $("#register-button").html(data);
                },
            });
        }

    //CHECKING LOGIN DATA IS VALID

        function register() {
            jQuery.ajax({
            url: "scripts/validation.php",
            data:'forename='+$("#firstName").val()+'&surname='+$("#lastName").val(),
            type: "POST",

            });
        }
    </script>
</head>
<body>
  <div id="fullpage">
    <div class="section " id="section0">
      <video autoplay loop muted id="myVideo">
        <source src="video/homeVideo.mp4" type="video/mp4">
      </video>
        <div class="layer">
            <ul id="menu">
                <li data-menuanchor="Login"><a href="#Login">Login</a></li>
                <li data-menuanchor="Register"><a href="#Register">Register</a></li>
            </ul>
        </div>
        <div class="layer">
            <h1>Title</h1>
        </div>
    </div>
    <div class="section" id="section1">
        <div class="loginCard">
            <form action ="scripts/login.php" method="post">
                <input type="text" id="usernameLogin" name="username" placeholder="Username">
                <input type="password" id="passwordLogin "name="password" placeholder="Password" onblur="loginCheck()">
                <span id="login-status"></span>
            </form>
        </div>
        <br>
        <div class="registerCard">
            <form action="scripts/signup.php" method="post" class="input-field" oninput="checkInput()">
                <input type="text" name="firstName" placeholder="First Name" id="first_name" class="validate" >
                <input type="text" name="lastName" placeholder="Surname">
                <input type="text" nenter code hereame="username" id="username" placeholder="Username" onkeyup="UserAvailability()">
                <span id="user-availability-status"></span>
                <input type="email" name="email" id="email" placeholder="Email" onkeyup="EmailAvailability()">
                <span id="email-availability-status"></span>
                <input type="password" name="password" id="password1" placeholder="Password">
                <input type="password" name="passwordVerify" id="password2" placeholder="Re-enter Password" onkeyup="passwordCheck()">
                <span id="password-status"></span><br>
                <span id="register-button"></span>
        </div>
    </div>
    </div>
</body>

1 ответ

То, как вы это делаете, когда эти параметры POST пусты, переменная никогда не инициализировалась.

Переменная, которая будет использоваться далее, а не только внутри этого оператора if, должна иметь начальное значение по умолчанию, инициализированное вне всех операторов if.

+ Изменить

if(!empty($_POST["username"])) {

    $usernameAuth = false; 

в

$usernameAuth = false; 
if(!empty($_POST["username"])) {

А ТАКЖЕ

if(!empty($_POST["email"])) {

    $emailAuth = false;

в

$emailAuth = false;
if(!empty($_POST["email"])) {

А ТАКЖЕ

if(!empty($_POST["password1"]) && !empty($_POST["password2"])) {

    $passAuth = false;

в

$passAuth = false;
if(!empty($_POST["password1"]) && !empty($_POST["password2"])) {

Или, что еще лучше, инициализируйте начальное значение по умолчанию для всех этих флагов в верхней части файла:

$usernameAuth = false; 
$emailAuth = false;
$passAuth = false;
...
if(!empty($_POST["username"])) {
...
if(!empty($_POST["email"])) {
...
if(!empty($_POST["password1"]) && !empty($_POST["password2"])) {

Это сделает логику более понятной и оставит меньше места для ошибки.

А затем проверьте наличие этих упущений.

Другие вопросы по тегам