Cómo mantener mi usuario en la misma página cuando un cierto valor no es correcto

votos
0

Por lo tanto, yo estoy tratando de crear un pequeño script que debe comprobar si los datos rellenados por el usuario es correcta o no, mi problema, sin embargo: incluso si no es correcto, se lanza la alerta y luego redirigir al usuario a TODAVÍA la página donde se realizará la comprobación (creo que tal vez por la acción de mi campo de formulario es para enviarle allí?). Mi pregunta: ¿Cómo puedo mantener al usuario en la misma página cuando la alerta aparece algo que no se ha llenado correctamente (sin perder los valores de los campos de entrada, ya sea)?

El código que tengo:

<?php
    if(!isset($_POST['submit'])) {
        header('Location: errorHandler.php');
        exit();
    } else {
            $email =$_POST['email'];
            $usrName =$_POST['userName'];
            $pwd =$_POST['password'];
            $pwdConfirm =$_POST['confirmPassword'];

        if ($email !== $email) {
            echo '<script language=javascript>';
                echo 'alert(It seems your email was not correct.)';
            echo '</script>';
        } else if ($usrName !== $usrName) {
            echo '<script language=javascript>';
                echo 'alert(It seems your username was not correct.)';
            echo '</script>';
        } else if ($pwd !== $pwdConfirm) {
            echo '<script language=javascript>';
                echo 'alert(it seems the passwords do NOT match)';
            echo '</script>';
        } else {
            include_once 'db.inc.php';

            $email = mysqli_real_escape_string ($conn, $_POST['email']);
            $usrName =  mysqli_real_escape_string ($conn, $_POST['userName']);
            $pwd =  mysqli_real_escape_string ($conn, $_POST['password']);
            $pwdConfirm =  mysqli_real_escape_string ($conn, $_POST['confirmPassword']);

            $sqli = INSERT INTO logindb (email, name, password) VALUES ('$email', '$usrName', '$pwd');

            mysqli_query($conn, $sqli);
        }
    }

¿Cómo se crean los campos de entrada:

function getEblock() {
    let eBlock = ($('<div/>', {
        'class': 'col-md-6 col-md-offset-3 well'
    }));
    return eBlock;
}

function getEmail() {
    let email = ($('<input/>', {
        'type': 'email',
        'name': 'email',
        'placeholder': 'Fill out your e-mail...',
        'required': true,
        'class': 'form form-control'
    }));
    return email;
}

function getUserName() {
    let userName = ($('<input/>', {
        'type': 'text',
        'name': 'userName',
        'placeholder': 'Fill out your username...',
        'required': true,
        'class': 'form form-control'
    }));
    return userName;
}

function getPassword() {
    let password = ($('<input/>', {
        'type': 'password',
        'name': 'password',
        'placeholder': 'Fill out your password...',
        'required': true,
        'class': 'form form-control'
    }));
    return password;
}

function getConfirmPassword() {
    let confirmPassword = ($('<input/>', {
        'type': 'password',
        'name': 'confirmPassword',
        'placeholder': 'Confirm your password...',
        'required': true,
        'class': 'form form-control'
    }));
    return confirmPassword;
}

function getConfirmBtn() {
    let submitBtn = ($('<button/>', {
        'type': 'submit',
        'name': 'submit',
        'class': 'btn btn-info',
        'id': 'submitBtn'
    })).text('Submit');

    return submitBtn;
}

Sí, conozco el camino Estoy insertando todo en la mesa de mi db chupa y sé que tengo para cifrar el pwd etc., pero por ahora me pregunto cómo puedo evitar que el usuario (todavía) va a save.php. Mi HTML no le mostrará mucho desde los campos de entrada, etc son hechos por el javascript.

Publicado el 19/09/2018 a las 17:18
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Como se ha mencionado por mi comentario, se puede hacer un poco de lado básico cliente validación antes de analizar los datos a la otra página.

A continuación, puede hacer una doble validación en su otra página si usted está comparando los valores de entrada de usuario a otras variables, por ejemplo los datos extraídos de la base de datos.

En mi exmple voy a utilizar notaciones general jQuery y AJAX.

Un marcado básico de la validación del lado del cliente:

function validate() {
    var email = $("[name='email']").val();
    var userName = $("[name='userName']").val();
    var password = $("[name='password']").val();
    var confirmPassword = $("[name='confirmPassword']").val();

    var result = true;

    if(/* some E-mail validation */) {
        result = false;
    }

    if(/* some userName validation */) {
        result = false;
    }

    if(/* some password validation */) {
        result = false;
    }

    if(/* some confirmPassword validation */) {
        result = false;
    }

    return result;
}

Y su función de AJAX:

function submitForm() {
    if( validate() ) {
        $.ajax({
            type : "POST",
            url : "/your_page.php",
            data : {
                submit: "1",
                email: $("[name='email']").val(),
                userName: $("[name='userName']").val(),
                password: $("[name='password']").val(),
                confirmPassword: $("[name='confirmPassword']").val()
            },
            success: function (html) {
                //do something on success
                if( html.includes('emailError') ) {
                    alert("It seems your email was not correct.");
                }
                else if( html.includes('userNameError') ) {
                    alert("It seems your username was not correct.");
                }
                else if( html.includes('passwordConfirmError') ) {
                    alert("it seems the passwords do NOT match")
                }
                else {
                    window.location.href = "/your_redirect_page.php";
                }
            }
        })
    }
}

La función AJAX en este caso se encapsula en otra función he elegido para nombrar submitForm () . Puede llamar a esa función a través de su botón utilizando onclick .

Ejemplo:

<button onclick="submitForm();">Click to submit</button>

Voy a explicar la función del éxito en la función de AJAX en un rato. Se trata básicamente de una lógica que gira en torno a su lado del servidor de validación que usted está haciendo.

Su página PHP con la validación:

if($_POST['submit'] != "") {
    $email = $_POST['email'];
    $usrName = $_POST['userName'];
    $pwd = $_POST['password'];
    $pwdConfirm = $_POST['confirmPassword'];

    if($email !== $email) {
        echo 'emailError';
    }
    else if($usrName !== $usrName) {
        echo 'userNameError';
    }
    else if($pwd !== $pwdConfirm) {
            echo 'passwordConfirmError';
    }
    else {
        include_once 'db.inc.php';

        $email = mysqli_real_escape_string ($conn, $_POST['email']);
        $usrName =  mysqli_real_escape_string ($conn, $_POST['userName']);
        $pwd =  mysqli_real_escape_string ($conn, $_POST['password']);
        $pwdConfirm =  mysqli_real_escape_string ($conn, $_POST['confirmPassword']);

        $sqli = "INSERT INTO logindb (email, name, password) VALUES ('$email', '$usrName', '$pwd')";

        mysqli_query($conn, $sqli);
    }
}

Si nos fijamos en la validación del código PHP, se puede ver que elijo hacer eco de una cadena en función de la validación. Nuestra función éxito AJAX' básicamente comprueba si el código HTML incluye cualquiera de esas cadenas y lanza el mensaje de error de acuerdo a eso. Si todo está bien, se seguirá haciendo la lógica de la base de datos, y redirigir a otra página.

Ahora, una parte del código es principalmente marcado para que se entienda, y en realidad no es lógicamente aplicable, ya que se comparan las exactas mismas variables entre sí en algunos casos. Sin embargo, debería ser más que suficiente para darle la idea general de cómo implementar una solución funcional.

Respondida el 19/09/2018 a las 18:53
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more