проблема с отправкой данных формы ajax на php - PullRequest
0 голосов
/ 06 августа 2020

Я не могу отправить данные формы с ajax на php. Он всегда обновляет sh страницу. Я использую модальное окно bootstrap для регистрации формы, и я хочу отображать сообщение об ошибке (если есть) в верхней части формы. Всегда обновляйте sh страницу, и если я снова нажму кнопку «Регистрация», чтобы открыть модальное окно, я увижу сообщение об ошибке. Как это сделать без refre sh страницы? Есть идеи, как я могу это сделать?

форма:

<?php echo display_error(); ?>
                                
<form  id="regform" class="form-signin" action="#" method="post">
                                
                                
<input type="text" id="username" class="form-control" placeholder="username" name="username" required autofocus>
                                
 <input type="email" id="email" class="form-control" placeholder="email" name="email"required autofocus>
                                
<input type="password" id="pass1" class="form-control"  placeholder="password" name="password_1" required>
                            
<input type="password" id="pass2" class="form-control" placeholder="password again" name="password_2" required>
                                </br>

<button class="btn btn-lg btn-primary btn-block" type="submit"  name="register_btn">Register</button>

</form> 

js ajax

$('#register_btn').click(function(){

    var data = {};
    data.username = $('#username').val();
    data.email = $('#email').val();
    data.password_1 = $('#pass1').val();
    data.password_2 = $('#pass2').val();


    $.ajax({
        type: "POST",
        url: "functions.php",
        data: data,
        cache: false,
        success: function (response) {

        }
    });
        return false;
});

});

функции . php

include 'db_config.php';

    session_start();

// connect to database

// variable declaration
$username = "";
$email    = "";
$errors   = array(); 

// call the register() function if register_btn is clicked
if (isset($_POST['register_btn'])) {
    register();
}


// REGISTER USER
function register(){
    global $db, $errors;

// receive all input values from the form
$username    =  e($_POST['username']);
$email       =  e($_POST['email']);
$password_1  =  e($_POST['password_1']);
$password_2  =  e($_POST['password_2']);

// form validation: ensure that the form is correctly filled
if (empty($username)) { 
    array_push($errors, "Username is required"); 
}
if (empty($email)) { 
    array_push($errors, "Email is required"); 
}
if (empty($password_1)) { 
    array_push($errors, "Password is required"); 
}
if ($password_1 != $password_2) {
    array_push($errors, "The two passwords do not match");




}

// register user if there are no errors in the form
if (count($errors) == 0) {
    $password = md5($password_1);//encrypt the password before saving in the database

    if (isset($_POST['user_type'])) {
        $user_type = e($_POST['user_type']);
        $query = "INSERT INTO users (username, email, user_type, password) 
                  VALUES('$username', '$email', '$user_type', '$password')";
        mysqli_query($db, $query);
        $_SESSION['success']  = "New user successfully created!!";
        header('location: home.php');
    }else{
        $query = "INSERT INTO users (username, email, user_type, password) 
                  VALUES('$username', '$email', 'user', '$password')";
        mysqli_query($db, $query);

        // get id of the created user
        $logged_in_user_id = mysqli_insert_id($db);

        $_SESSION['user'] = getUserById($logged_in_user_id); // put logged in user in session
        $_SESSION['success']  = "You are now logged in";
        header('location: index.php');              
    }

}

}

function display_error() {
    global $errors;

if (count($errors) > 0){
    echo '<div class="error">';
        foreach ($errors as $error){
            echo $error .'<br>';
        }
    echo '</div>';
}

}

1 Ответ

0 голосов
/ 06 августа 2020

Селектор JQuery, который вы используете, использует идентификатор, измените кнопку с name="register_btn" на id="register_btn".

РЕДАКТИРОВАТЬ: при дальнейшем просмотре вашего кода вам не хватает значения предотвращения по умолчанию для , я бы вместо этого заменил слушателя на форму и предотвратил значение по умолчанию. Форма отправляется на текущую страницу, что является поведением по умолчанию, поэтому похоже, что страница просто перезагружается.

См. Ссылку ниже для моего кода, который я использую для сообщений формы через AJAX: http://aspintech.ca/journal/?entry_id=77

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...