我试图让我的注册表显示一个消息,在同一页上的注册表,如果是采取了一个用户名后的形式提交。
我制作了一个注册表,将输入发布到add-user.php文件中。在add-user.php文件中,我有两个函数。->nametaken函数检查用户名是否已经存在于数据库中,如果没有,则->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调用为空。在这里,我只看到了在注册表中键入用户名/密码时如何执行此操作的问题,但我希望在提交注册表后显示消息。我该怎么做?
我对php post文件的承诺ajax请求:
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文件中的所有内容都被删除,我的promise 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不存在,除非我向它发出post请求。在其他地方,我只需要输入一个网址就可以了。
暂无答案!
目前还没有任何答案,快来回答吧!