Моя форма PHP не принимает данные после того, как я добавил код, чтобы не пропускать пустые данные. Как лучше это кодировать?

-1

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

Я подумал, добавив этот фрагмент кода, $username = $email = $password = "";что он примет новую запись после того, как будут заполнены все поля, но вместо этого теперь он не принимает никаких записей, даже если они все заполнены.

Кажется, что этот код, который я добавил, не позволяет вводить новые записи, это не было моим намерением. Что будет более простым кодом, чтобы делать то, что я пытаюсь сделать здесь?

<?php 

    include('connection.php');

    if(isset($_POST["add"])) {

        // build a function that validates data
         function validateFormData($formData) {
            $formData = trim(stripslashes(htmlspecialchars($formData)));
            return $formData;
        }

        // check to see if inputs are empty
        // create variables with form data
        // wrap the data with our function

        // set all variables to empty by default
        $username = $email = $password = "";

        if(!$_POST["username"]) {
            $nameError = "Please enter a username <br>";
        } else {
            $name = validateFormData($_POST["username"]);
        }

        if(!$_POST["email"]) {
            $emailError = "Please enter your email <br>";
        } else {
            $email = validateFormData($_POST["email"]);
        }

        if(!$_POST["password"]) {
            $passwordError = "Please enter a password <br>";
        } else {
            $password = validateFormData($_POST["password"]);
        }

        // check to see if each variable has data
        if($username && $email && $password) {
                $query = "INSERT INTO users (id, username,  password,   email, signup_date, biography) VALUES (NULL,  '$username', '$password',     '$email', CURRENT_TIMESTAMP,  NULL)";

            if(mysqli_query($conn, $query)) {
                echo "<div class='alert alert-success'>New record in database!</div>";
            } else {
                echo "Error: ".$query."               <br>".mysqli_error($conn);
            }    
        }

    }



    /*
    MY SQL INSERT QUERY

    INSERT INTO users (id, username, password, email, signup_date,     biography) VALUES (NULL, 'jacksonsmith', 'abc123', 'jack@spade.com',   CURRENT_TIMESTAMP, 'Hello! I'm Jackson. This is my bio.');

    */

    ?>




    <!DOCTYPE html>

    <html>

        <head>

            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1">

            <title>MySQL Insert</title>

            <!--Bootstrap CSS-->
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

            <!--HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries-->
            <!--WARNING: Respond.js doesn't work if you view the page via file://-->
            <!--[if lt IE 9]>
                <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
                <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
                <![endif]-->
         </head>

        <body>
            <div class="container">
                <h1>MySQL Insert</h1>


            <p class="text-danger">* Required fields</p>
                <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]) ?>" method="post">
                    <small class="text-danger">*<?php echo $nameError; ?></small>
                    <input type="text" placeholder="Username" name="username"><br><br>

                    <small class="text-danger">* <?php echo $emailError; ?></small>
                    <input type="text" placeholder="Email" name="email">  <br><br>

                    <small class="text-danger">* <?php echo $passwordError; ?></small>
                    <input type="password" placeholder="Password" name="password"><br><br>

                    <input type="submit" name="add" value="Add Entry">
                </form>

            </div>

            <!--jQuery -->
            <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

            <!--Bootstrap JS-->
            <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>     
        </body>
    </html>
Даниэль Кортес
источник

Ответы:

1

$ name = validateFormData ($ _ POST ["username"]);

Похоже, $nameдолжно быть $usernameв этой строке, иначе $usernameвсегда будет пустым во время проверки, чтобы решить, хотите ли вы выполнить свой запрос SQL.

Ƭᴇcʜιᴇ007
источник
Это ответ. Я думаю, что OP может выиграть от использования stackoverflow.com для любых дальнейших вопросов программирования. (Также ознакомьтесь с атаками с использованием SQL-инъекций)
Йорик,
Это имеет смысл, я попробую.
Даниэль Кортес
Это был ответ Techie007, ты мой герой сегодня.
Даниэль Кортес