我有一个注册表单,我检查与AJAX响应onkeyup,如果用户名或电子邮件已经存在于我的数据库
你可以看到我是怎么检查的:
$query = $_GET ['query'];
$field = $_GET ['field'];
if ($field == "username")
{
$check = $db->prepare("SELECT * FROM users WHERE username = :query");
$check->bindParam(':query', $query);
$check->execute();
$count = $check->rowCount();
if ($count > 0)
{
echo '<font color=red>Username already exists</font>';
}
else
{
echo '<font color=green>Username avalable</font>';
}
}
if ($field == "email")
{
$check = $db->prepare("SELECT * FROM users WHERE email = :query");
$check->bindParam(':query', $query);
$check->execute();
$count2 = $check->rowCount();
if ($count2 > 0)
{
echo '<font color=red>Email already exists</font>';
}
else
{
echo '<font color=green>Email avalable</font>';
}
if (!filter_var($query, FILTER_VALIDATE_EMAIL)) {
echo '<font color=red><br />Please enter a valid Email</font>';
}
else {
echo '<font color=green><br />Valid email</font>';
}
}
我想创建另一个if语句,如果有任何错误,那么它应该禁用提交按钮。我不想给每个已经有的语句都加上disable,否则我可能会以这样的情况结束:
我输入一个存在的电子邮件,它禁用了提交按钮。然后我输入一个正确的用户名,它再次启用提交按钮,即使电子邮件仍然是错误的。
所以我不想创建这样的东西:
if ($count > 0 || $count2 > 0)
{
echo '<script id="cb" type="text/javascript">document.getElementById("regr_btn").disabled=true</script>'
}
else
{
echo '<script id="cb" type="text/javascript">document.getElementById("regr_btn").disabled=false</script>'
}
但是我不能访问我的计数,因为它们不是全局的。你们有谁能告诉我如何才能做到这一点吗?
别担心。当提交表单时,我还检查了错误。我知道用户自己可以很容易地激活提交按钮。
另外,如果我需要提供更多的代码,请让我知道。
编辑:验证功能:
<script type='text/javascript'>
function validate(field, query)
{
xmlhttp = new XMLHttpRequest(); // Creating Object
xmlhttp.onreadystatechange = function() // Checking if readyState changes
{
if (xmlhttp.readyState!=4 && xmlhttp.status==200) // Validation Under Process
{
document.getElementById(field).innerHTML = "Validating..";
}
else if (xmlhttp.readyState==4 && xmlhttp.status==200) // Validation Completed
{
document.getElementById(field).innerHTML = xmlhttp.responseText;
}
else // If an error is encountered
{
document.getElementById(field).innerHTML = "Unknown Error Occurred. <a href='index.php'>Reload</a> the page.";
}
}
xmlhttp.open("GET","check.php?field="+field+"&query="+query, false);
xmlhttp.send();
}
</script>
第一个代码块中的代码位于check。php文件
中我的电子邮件和用户名字段:
<div id='username'></div>
<input type="email" name="email" placeholder="Email" required="required" onkeyup="validate('email', this.value)"><br>
<div id='email'></div>
<input type="password" name="password" placeholder="Password" required="required" onkeyup="validate('password', this.value)"><br>
在两个if条件之外声明count变量。这样的:
$count = 0;
并在每个if条件的右括号前将$count的值重置为0
这样做:
$query = $_GET ['query'];
$field = $_GET ['field'];
// Set counter to 0
$count = 0;
// Store all messages here
$msg = "";
if ($field == "username")
{
$check = $db->prepare("SELECT * FROM users WHERE username = :query");
$check->bindParam(':query', $query);
$check->execute();
if ($check->rowCount() > 0)
{
$count += 1;
$msg = '<font color=red>Username already exists</font>';
}
else
{
$msg = '<font color=green>Username avalable</font>';
}
}
if ($field == "email")
{
$check = $db->prepare("SELECT * FROM users WHERE email = :query");
$check->bindParam(':query', $query);
$check->execute();
if ($check->rowCount() > 0)
{
$count += 1;
$msg .= '<br /><font color=red>Email already exists</font>';
}
else
{
$msg .= '<br /><font color=green>Email avalable</font>';
}
if (!filter_var($query, FILTER_VALIDATE_EMAIL)) {
$msg .= '<font color=red><br />Please enter a valid Email</font>';
}
else {
$msg .= '<font color=green><br />Valid email</font>';
}
}
if ($count > 0)
{
// Disable submit button here
// Alternatively you can add the javascript that disables the submit button to
// The $msg like so: $msg .= "<script></script>"; and echo it all together.
}
echo $msg;
如果它们在同一个函数中,$count
和$count2
不需要是全局的。
你没有告诉你如何调用第二段代码,但最常见的是
- 传入
$count
和$count2
作为参数 - 创建一个验证结果对象并传递它,其中包含该信息。