如果选择的用户名已存在,则提醒用户

时间:2015-01-16 05:23:53

标签: javascript php mysql

此代码位于由表单的onsubmit事件触发的JavaScript函数内。

var username = document.register.username.value;
var phpUsernameFree = <?php 
    $username = "<script>document.write(username)</script>";
    $resultTempUsers = mysql_query("SELECT * FROM tempUsers WHERE username = '$username' ") or die(mysql_error());
    if( mysql_num_rows($resultTempUsers) == 0 ){
        echo 1;
    };
?> ;

if( phpUsernameFree == 0){
    toggleNew('usernameAlreadyExists', 1);
    usernameCounter = 1;
}

我希望如果用户名已存在于数据库中,则会显示一个窗口,告诉用户该用户名已存在。

我尝试删除所有的PHP代码,只需将其替换为“回声1”和“回复1”。或者&#39;回显0&#39;,这是有效的,所以我知道代码执行。

我认为尝试从数据库中读取信息存在问题。

编辑:

好的,我已经尝试过使用Ajax,到目前为止还没有工作。我下载了jQuery,现在我正在尝试这个代码:

usernameTaken = checkUserExistence(username, 'username');
if( usernameTaken == 1){
    toggleNew('usernameAlreadyExists', 1);
    usernameCounter = 1;
}

function checkUserExistence(str, type){
    var dataString = 'str=' + str + '&type=' + type;
    if($.trim(str).length>0 && $.trim(type).length>0){
        $.ajax({
            type: "POST",
            url: "existance.php",
            data: dataString,
            cache: false,
            beforeSend: function(){ $("#submit").val('Sending...');},
            success: function(data){
                if(data){
                    return 1;
                }else{
                    return 0;
                }
            }
        });
    }
    return false;
}

我的existance.php看起来像这样:

<?php

*include connection to database here*

$data = $_POST["data"];
$type = $_POST["type"];
$resultUsers = mysql_query("SELECT * FROM users WHERE username = '$data' ") or die(mysql_error());
if( mysql_num_rows($resultUsers) == 1 ){
    echo 1;
}
?>

目前使用此代码时会发生什么情况,当我按下提交按钮时,值会更改为“发送...”&#39;与beforeSend属性一样,但没有其他事情发生。

3 个答案:

答案 0 :(得分:0)

最好的方法是使用ajax。你应该做这样的事情:

$("#inputId").keyUp(function(){
   //This event, raised when the textbox value changed
   //inside this event, you can call ajax function and check user existance and if result is false you can disable the submit button
});

答案 1 :(得分:0)

如果您不想使用Jquery,则需要AJAX才能执行此操作。 像这样:

<script>
function Login(str) {
    if (str.length == 0) { 
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("Msg").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "Login.php?q=" + str, true);
        xmlhttp.send();
        }
}
</script>

的login.php:

$username = $_REQUEST["q"];
$resultTempUsers = mysql_query("SELECT * FROM tempUsers WHERE username = '$username' ") or die(mysql_error());
if( mysql_num_rows($resultTempUsers) == 0 ){
    echo "User free";
}else{
echo "User exist";
} 

类似的东西,不起作用但是一个想法。

答案 2 :(得分:0)

代替提交按钮使用普通按钮,根据响应值在ajax响应后提交表单。

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <script>
        function checkUserExistence(){
            var username = document.register.username.value;
            var xmlhttp;
            if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest();} else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 ) {
                    if(xmlhttp.status == 200){
                        phpUsernameFree = xmlhttp.responseText;
                        if( phpUsernameFree == 0){
                            alert("username Already Exists");
                        } else {
                            alert("username available.");
                            register.submit();
                        }
                    } else if(xmlhttp.status == 400) {
                        alert("There was an error 400");
                    } else {
                        alert("something else other than 200 was returned");
                    }
                }
            }
            xmlhttp.open("GET", "service.php?username=" + username, true);
            xmlhttp.send();
        }
        </script>
    </head>
    <body>
        <form id="register" name="register" method="post">
            <input type="text" name="username" id="username" value="check" />
            <input type="button" id="save" name="save" value="Save" onclick="checkUserExistence();" />
        </form>
    </body>
</html>

<!-- service.php -->
<?php
$username = $_REQUEST["username"];
$resultTempUsers = mysql_query("SELECT * FROM tempUsers WHERE username = '$username' ") or die(mysql_error());
if( mysql_num_rows($resultTempUsers) == 0 ){
    echo 1;
};
?>