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