如何访问if语句中的变量

时间:2014-06-14 23:05:36

标签: javascript php ajax variables global-variables

我有一个注册表单,如果用户名或电子邮件已经存在于我的数据库中,我会使用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语句,如果有任何错误,则应该禁用提交按钮。我不想为我已经拥有的每个语句添加禁用,因为那样我可能会以这样的情况结束:

我输入了一个存在的电子邮件,它会禁用提交按钮。然后我输入一个正确的用户名,它再次启用提交按钮,即使电子邮件仍然是错误的。

所以我不想创造这样的东西:

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>

3 个答案:

答案 0 :(得分:1)

如果条件允许,请在两者之外声明你的计数变量。像这样:

$count = 0;

并在每个if条件的右括号之前将$ count的值重置为0。

答案 1 :(得分:1)

做到这一点:

$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;

答案 2 :(得分:0)

如果它们具有相同的功能,则$count$count2不需要是全球性的。

你不会告诉你如何调用第二块代码,但最常见的是

  • 传递$count$count2作为参数
  • 创建验证结果对象并传递该对象,其中包含该信息。
相关问题