在后台运行DB Query功能

时间:2013-06-09 21:17:03

标签: php javascript jquery ajax

我目前正在尝试创建动态注册页面。通过动态,我只是意味着将根据数据库检查输入的用户名和电子邮件,看它们是否存在。我想这样做而不重定向到另一个页面,所以ajax与jquery是我最好的镜头。

我的系统就是这样;

  • 执行查询以检查是否存在相同的用户名
  • 执行类似查询以检查是否存在相同的电子邮件地址
  • 如果存在用户名,则返回字符串ERROR_USER_EXISTS
  • 如果存在电子邮件,则返回字符串ERROR_EMAIL_EXISTS
  • 如果两者都不存在,则返回字符串USER_ADD_SUCCESS,并完成注册
  • 无论返回的状态如何,它都将以数组形式返回,如果注册成功,则会在状态消息旁边的数组中返回其他数据

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

<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,所以这不是我觉得我可以自己解决的问题(我倾向于发现过去几年我学到的所有语言都是从尽管如此简单。)

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

1 个答案:

答案 0 :(得分:2)

您需要获取要在javascript中发送的帖子数据,

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>

应该工作,但我还没有测试过这个......