Mi formulario PHP no está aceptando datos después de agregar un código para no permitir que pasen datos vacíos. ¿Cuál es una mejor manera de codificar esto?

-1

Por lo tanto, mi formulario no aceptaba datos vacíos y eso, por supuesto, era bueno, pero cuando agregué un nombre de usuario y un correo electrónico, lo aceptaría sin la contraseña.

Al agregar este fragmento de código, pensé $username = $email = $password = "";que aceptaría la nueva entrada una vez que se completaran todos los campos, pero ahora no acepta ninguna entrada, incluso si se completan.

Parece que este código que agregué no permite nuevas entradas, esa no era mi intención. ¿Cuál sería un código más simple para hacer lo que intento hacer aquí?

<?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', '[email protected]',   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>
Daniel Cortes
fuente

Respuestas:

1

$ name = validateFormData ($ _ POST ["nombre de usuario"]);

Parece que $namedebería estar $usernameen esta línea, de lo contrario $usernamesiempre estará en blanco en el momento en que lo verifique para decidir si desea realizar su consulta SQL.

Ƭᴇcʜιᴇ007
fuente
Esta es la respuesta. Sin embargo, creo que el OP podría beneficiarse del uso de stackoverflow.com para cualquier otra pregunta de programación. (Lea también sobre ataques de inyección SQL)
Yorik
Esto tiene sentido, lo intentaré.
Daniel Cortes
Esa fue la respuesta Techie007, eres mi héroe hoy.
Daniel Cortes