检查表单提交上是否存在用户名

时间:2012-12-12 16:35:11

标签: php javascript ajax

这是我的代码。

的.js

$(document).ready(function() {

    $("#username").focusout(function() {

        $.ajax({
            type:'post',
            url:site_url()+'/client/checkUserName',
            data:{'username':$("#username").val()},
            dataType:'json',
            success:function(result){
                if(result != 'false'){
                  $('#message').text('Username exists');  
                }

            }
        });  
    });

html的

<form id='form1'  method="post">
        <input type="text" name="username" id="username"/>
        <span id="message" style="color:red"></span>
        <input type="submit" value="submit" id="regis" class="btn"/>
</form>

它在焦点上工作得很好。 如果用户名存在,如何使表单不提交?

假设表格中有隐藏字段,请说

   <input type="text" hidden id="type" value="<?php echo $type;?>">

然后,如果隐藏字段中存在值,则无需检查用户名是否已存在。

4 个答案:

答案 0 :(得分:0)

如果您只检查javascript中是否存在用户名,则您的网站将不安全。黑客无需实际点击按钮或执行客户端代码即可进行提交。

这意味着当提交已经发生时,您需要在服务器端检查用户名是否存在。在这种情况下,javascript检查没有太大的收获。

您也不希望为黑客提供一种方法来检查哪些用户名存在,哪些用户名不存在。如果您在提交后进行检查,则黑客不知道用户名是否无效,或者密码是否错误。

编辑:到目前为止,@КонстантинРекунов提供了唯一可能有效的JavaScript。但是,请参阅我在回答中关于解决方案脆弱性的评论。任何像这样的解决方案本质上都是脆弱的。

做这样的事情的唯一合理理由是在注册过程中建议替代方案。即便如此,也是不好的做法。我建议你改变你的设计。

答案 1 :(得分:0)

您只需停用提交按钮

即可
$(document).ready(function() {

$("#username").focusout(function() {

    $.ajax({
        type:'post',
        url:site_url()+'/client/checkUserName',
        data:{'username':$("#username").val()},
        dataType:'json',
        success:function(result){
            if(result != 'false'){
              $('#message').text('Username exists');
              $('#regis').attr('disabled','disabled');
            } else {
              $('#regis').removeAttr('disabled');
            }
        }
    });  
});

答案 2 :(得分:0)

您可能需要将js代码放入函数中,并在检查失败时添加:return false;,然后添加onsubmit = "[functionName]";

答案 3 :(得分:0)

你应该添加return false,以及你调用函数的地方

 if(result != 'false'){
                  $('#message').text('Username exists'); 
                   return true; 
                    }
                    else
                    {
                      return false;
                    }