提交post表单并检查用户名是否重复后,如何将此信息发送到表单页上的javascript?

flseospp  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(245)

我试图让我的注册表显示一个消息,在同一页上的注册表,如果是采取了一个用户名后的形式提交。
我制作了一个注册表,将输入发布到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请求。在其他地方,我只需要输入一个网址就可以了。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题