После отправки формы сообщения и проверки имени пользователя на наличие дубликатов, как отправить эту информацию в javascript на странице формы?

Я пытаюсь заставить мою регистрационную форму показывать сообщение на той же странице, что и регистрационная форма, о том, что имя пользователя используется, если оно было принято после отправки формы.

Я сделал регистрационную форму, которая отправляет информацию в файл add-user.php. внутри моего файла add-user.php у меня есть две функции. -> nameTaken functions проверяет, есть ли имя пользователя в базе данных, и -> insert вставляет имена в базу данных, если они не взяты.

Вот код файла add-user.php:

<?php

header('Content-type: text/javascript');

$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);

if(!$app['database']->nameTaken($_POST['username'])){

$app['database']->insert('users', [

'name' => $_POST['username'],

'password' => $hash

]);
};

вот функция nameTaken, которая находится в другом файле:

 public function nameTaken($username){

$statement = $this->pdo->prepare('SELECT count(*) FROM users WHERE name = :name');

$statement->execute(array('name' => $username));

$res = $statement->fetch(PDO::FETCH_NUM);

$exists = array_pop($res);

if ($exists > 0) {

$json = array(
'success' => false
);

echo json_encode($json);

return true;

} else {
//the name can be made
$json = array(
'success' => true
);

echo json_encode($json);

return false;
}
}

Это работает правильно, но я не знаю, как отправить эту информацию в мой HTML, когда я перенаправлен обратно в файл с моей формой, чтобы он мог показать сообщение, если регистрация прошла успешно или не удалось, потому что имя пользователя уже занято.

Я попытался сделать вывод json для этого и получить его с обещанием, но сразу после отправки формы я перенаправлен на страницу формы, и вызов ajax пуст. Я только видел вопросы о том, как это сделать, пока имя пользователя / пароль вводятся в регистрационную форму здесь, но я хочу показать сообщение после отправки регистрационной формы. Как бы я это сделал?

мое обещание ajax запрос к файлу поста php:

window.onload = function(){

function get(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.onload = () => resolve(xhr.responseText);
xhr.onerror = () => reject(xhr.statusText);
xhr.send();
});
}

document.getElementById('register').addEventListener('submit', () => {
let promise = get('/controllers/contact.php').then((name) => {
console.log(name);
});
});
}

Я не могу использовать этот javascript, потому что он выполняется до загрузки php-файла, а затем после загрузки php-файла и перенаправления на страницу с моей формой, все в php-файле стирается, и мой обещанный ajax-запрос имеет уже был казнен.

мой HTML:

<form method='POST' action='/users' id='register'>

Username<input type='text' name='username' required>

Password<input type='password' name='password' required>

<button type='submit'>Submit</button>

</form>

Это ошибки, которые я получаю на своем сервере

[Thu Aug 16 17:38:07 2018] 127.0.0.1:36690 [200]: /
[Thu Aug 16 17:38:07 2018] 127.0.0.1:36694 [200]: /registerFail.js
[Thu Aug 16 17:38:10 2018] PHP Notice:  Undefined index: password in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php on line 5
[Thu Aug 16 17:38:11 2018] PHP Notice:  Undefined variable: app in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php on line 7
[Thu Aug 16 17:38:11 2018] PHP Fatal error:  Uncaught Error: Call to a member function nameTaken() on null in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php:7
Stack trace:
#0 {main}
thrown in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php on line 7
[Thu Aug 16 17:38:11 2018] 127.0.0.1:36734 [500]: /controllers/add-user.php - Uncaught Error: Call to a member function nameTaken() on null in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php:7
Stack trace:
#0 {main}
thrown in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php on line 7
[Thu Aug 16 17:38:11 2018] 127.0.0.1:36738 [302]: /users
[Thu Aug 16 17:38:11 2018] 127.0.0.1:36744 [200]: /
[Thu Aug 16 17:38:11 2018] 127.0.0.1:36750 [200]: /registerFail.js

Сначала я на главной странице ‘/’. Сразу же, когда я отправляю свою форму, запрос ajax запускается до загрузки php-файла, поэтому все не определено, затем, когда мой php-файл загружается и проверяет имя пользователя, все работает нормально, и имя пользователя либо отклоняется, либо помещается в мою базу данных. Затем я перенаправлен обратно в каталог ‘/’ с моей формой. Я не могу показать сообщение об ошибке, потому что ajax выполняется до загрузки php-файла, и я не знаю, как это исправить. Я хочу показать сообщение об ошибке при перенаправлении обратно на страницу формы после загрузки файла. Как будет выглядеть код для меня?

<?php

$router->get('', 'controllers/index.php');

$router->get('about', 'controllers/about.php');

$router->get('contact', 'controllers/contact.php');

$router->post('users', 'controllers/add-user.php');

$router->post('login', 'controllers/login.php');

Это мой роутер. controllers / add-user.php не существует, если я не отправлю ему запрос на публикацию. В других местах я могу просто ввести URL-адрес и перейти к ним.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]