php - 在后台运行数据库查询功能

标签 php javascript jquery ajax

我目前正在尝试创建一个动态注册页面。所谓动态,我只是指输入的用户名和电子邮件将根据数据库进行检查以查看它们是否存在。我想在不重定向到另一个页面的情况下执行此操作,因此使用 jquery 的 ajax 是我最好的选择。

我的系统是这样工作的;

  • 执行查询以检查是否存在相同的用户名
  • 执行类似的查询以检查是否存在相同的电子邮件地址
  • 如果用户名存在,则返回字符串ERROR_USER_EXISTS
  • 如果电子邮件存在,则返回字符串 ERROR_EMAIL_EXISTS
  • 如果两者都不存在,则返回字符串USER_ADD_SUCCESS,注册完成
  • 无论返回什么状态,都会以数组的形式返回,如果注册成功,除了状态消息之外,还会在数组中返回额外的数据

我正在查看 this example answer通过“ClickUpvote”并尝试扩展,但我遇到了一点麻烦。在我的注册页面上,我有一个表格,为了简单起见,我用该答案中提供的链接替换了“提交”按钮。这是我对脚本做的简单扩展;

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">
    function makeAjaxRequest()
    {
       var url="./DoRegister.php";
       $.get(url,{},verifyDb);
    }

    function verifyDb(response)
    {
        if (response=="ERROR_EMAIL_EXISTS")
        {
            document.write('Email in use');
        }
        else if (response=="ERROR_USER_EXISTS")
        {
            document.write('Username in use');  
        }

        else if (response=="USER_ADD_SUCCESS")
        {
          document.write('Registration success');   
        }
    }
</script>
<?PHP
    echo '<form class="" method="post" action="./DoRegister.php">';
    echo '<div>'.EditBox('username','Username', False, True, True).'</div>';
    echo '<div>'.EditBox('password','Password', True, False, True) .'</div>';
    echo '<div>'.EditBox('email','Email Address', False, False, True, 'email') .'</div>';
    echo '<a href="#" onclick="makeAjaxRequest();">Check database</a>';
    echo '</form>';
    echo '</div></div>';
?>

注意 EditBox() 只是返回一个根据提供给它的参数预先格式化的 HTML 输入框。它只是让我更容易维护代码。

文件 DoRegister 与运行此脚本的目录位于同一目录中,如下所示;

<?PHP
    define("base_path", dirname(__FILE__).'/');
    include base_path.'/core/CMS_Functions.php';            
    $_pagearray = _registerUser($_POST['username'],$_POST['password'],$_POST['email']);

    if($_pagearray['msg'] == 'ERROR_EMAIL_EXISTS'){
        $msg = 'That email address is already in use. Please enter another.';
    }

    if($_pagearray['msg'] == 'ERROR_USER_EXISTS'){
        $msg = 'That username is already in use. Please enter another.';
    }

    if($_pagearray['msg'] == 'USER_ADD_SUCCESS'){
        $msg = 'Thankyou for registering <strong>'.$_pagearray['username'].'</strong>!<br>'.'Please click the activation link sent to your email address in order to activate your account.';
    }
    return $msg;
?>

注意 _registerUser() 仅接受注册帐户所需的 3 个参数,并返回上述状态字符串之一。它接受的参数不需要来自 POST

我的问题是,当我在字段中输入详细信息后单击链接时,“没有任何反应”。我想这是因为表单实际上没有通过 POST 提交,所以 DoRegister 从未真正看到值。这是我第一次接触 javascript、ajax 或 jquery,所以我觉得我无法靠自己解决这些问题(我倾向于发现我在过去几年中学习的所有语言都是从像这样简单的东西)。

如何扩展/修复脚本以便执行“动态”查找?

最佳答案

你需要在javascript中获取你想要发送的post数据,

javascript 不是我的专业领域,但让我们看看我是否能做到...

$("#yourForm").submit(function() {
    $.ajax({
        type: "POST",
        url: "DoRegister.php",
        data: "name=" + $("#name").val() + "&mail=" + $("#mail").val() + "&pw=" + $("#pw").val(),
        success: verifyDb
    });
});

像这样使用你的表单:

<form action="" id="yourForm" mehod="post">
    <input type="text" id="name" name="name" />
    <br />
    <input type="text" id="mail" name="mail" />
    <br />
    <input type="password" id="password" name="password" />
    <br />
    <input type="submit" value="Submit" />
</form>

应该可以,虽然我还没有测试过..

关于php - 在后台运行数据库查询功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014256/

相关文章:

javascript - Angular Flot - 通过 Alpha 传递十六进制颜色在 Google Chrome 中不起作用

javascript - 插入大量动态 DOM 元素时性能低下

jquery - 从 AJAX 提交中排除表单

php - PDO MySQL UTF-8 : Data read from database not showing correctly

php - 为什么我不能在我的托管域中使用 swiftmailer 发送邮件,但从我的本地主机服务器发送邮件时却没有错误

php - 使用 PHP 和 MySql 匹配两个表中的重复条目

php - 调用 REST api (Phalcon) 时出现 404 错误

javascript - 如何使用 jQuery 更改滚动上的类?

JavaScript - 获取 URL 路径的一部分

jquery - 主干 this.el 未定义