Хобрук: Ваш путь к мастерству в программировании

Переменные, не проходящие между операторами 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>


  • Вы открыты для SQL-инъекций. Ваша форма отправляет POST? Я думаю, что вашу логику также можно немного упростить. 08.01.2016
  • да, я сейчас не беспокоюсь об инъекциях, мой приоритет - просто разобраться с этим. И это потому, что это часть формы JQUERY AJAX, которая проверяет имя пользователя и адрес электронной почты в базе данных и пароли друг против друга, и я не мог придумать способ сделать все это в одном запросе. 08.01.2016
  • Это правильно? if($username_check›0){ echo Имя пользователя недоступно.; } 08.01.2016
  • Можете ли вы опубликовать часть AJAX? Где это в настоящее время терпит неудачу? 08.01.2016
  • Обновлено частью AJAX. 08.01.2016
  • Правильно ли работает AJAX? Где в PHP он терпит неудачу или не доходит до PHP? 08.01.2016
  • Да, все AJAX и PHP работают отлично, проверяя электронную почту, имя пользователя и пароли. Единственная проблема заключается в том, что usernameAuth, passAuth и emailAuth не передаются из операторов IF, и я получаю сообщение об ошибке, когда он пытается отобразить кнопку для необъявленных переменных usernameAuth, emailAuth и passAuth. 08.01.2016
  • Вы получаете уведомления о неопределенных переменных, а затем shite? Ваши три случая ($usernameAuth) && ($emailAuth) && ($passAuth) никогда не будут выполнены сразу, потому что вы отправляете каждое поле отдельно. 08.01.2016
  • Однако я думал, что после того, как переменная была объявлена ​​​​как «истина», она останется в этом состоянии до тех пор, пока не будет изменена? так что, если все они изменены на истинные, даже если это не в одной функции, она все равно должна признать, что все они верны? 08.01.2016

Ответы:


1

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

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

Изменять

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

    $usernameAuth = false; 

to

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

А ТАКЖЕ

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

    $emailAuth = false;

to

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

А ТАКЖЕ

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

    $passAuth = false;

to

$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"])) {

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

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

07.01.2016
  • Я пробовал ваше последнее решение, и происходит то, что все они остаются ложными, а кнопка все еще не отображается. Кажется, существует проблема, когда при изменении состояния переменных на «истина» оно не передается в окончательный оператор IF, где проверяется, что все они верны. 08.01.2016
  • @RossMuego Поместите несколько эхо-сигналов в ветки else, которые устанавливают значения true ... вы, вероятно, никогда их не вводите. 08.01.2016
  • Поэтому, установив для них значение true, попробуйте повторить их, чтобы увидеть, меняются ли они? 08.01.2016
  • Новые материалы

    Краткое руководство для начинающих по простому сквозному тестированию с помощью Cypress
    Автоматизированное тестирование, требующее только базовых навыков JavaScript. Цель этой статьи - показать, как с минимальными усилиями вы можете добавить полезные сквозные (E2E) тесты в свой..

    Руководство по быстрой разработке рекомендательной системы промышленного уровня
    В этой статье я намерен предоставить краткий обзор методов, которые можно использовать для разработки хорошо работающей рекомендательной системы. Я начал работать над Recommender Systems около 6..

    Arshaw FullCalendar для AngularJS — проблемы, с которыми столкнулись, и найденные решения для их устранения
    Arshaw FullCalendar — это полноразмерный календарь событий с возможностью перетаскивания, использующий jQuery. Подробнее об этом можно узнать здесь . Директива ui-calendar — это полная..

    Простое руководство по Redux для разработчиков React
    Понимание строительных блоков Redux Redux — это инструмент управления состоянием, который чаще всего используется с React или React Native. Когда я впервые начал использовать его год назад,..

    присоединение к атрисмаркетингу
    присоединение к атрисмаркетингу И много дополнительных привилегий. маркетинг — реклама-хорошие отзывы клиентов-доверие-счастье-лояльность и опытные сотрудники устойчивые лесозаготовительные..

    КОВАРИАНТНОСТЬ И КОРРЕЛЯЦИЯ
    ВВЕДЕНИЕ В этом посте мы обсудим ковариацию и корреляцию. Это играет важную роль при выборе функций. Статистические корреляции говорят нам как о силе связи между двумя переменными, так..

    Использование матриц Вигнера в случаях машинного обучения, часть 8
    Равномерный локальный закон для матриц Вигнера (arXiv) Автор: Джорджо Чиполлони , Ласло Эрдеш , Доминик Шредер . Аннотация: Мы доказываем общий локальный закон для матриц Вигнера, который..