如何在表单提交前检查唯一用户名

时间:2018-04-01 20:53:35

标签: javascript ruby-on-rails ajax

我已经尝试了几个小时了。我想检查用户名是否已存在于DB中。如果是,请提醒并不要提交。如果没有,请提交。这是我的代码。

$(function() {
$("#new_user").on("submit", function() {
    var anyFieldIsEmpty = $('.newuser_input').filter(function() {
        return $.trim(this.value).length == 0;
    }).length > 0;
    if (anyFieldIsEmpty) {
        alert("There are empty fields!");
        return false;
    }
    else {
        check_curr_username();
        return false;
    }
});
});


function check_curr_username() {
var username = $("#user_username").val();
$.ajax({
    "url": "/checkusername",
    "data": {"name":username},
    "type": "get",
    "dataType": "json",
    "success": function(data) {
        alert('Username'+' '+data.username +' '+'is already taken' );
        $("#user_username").focus();
        return false;
    },
    "error": function() {
        $("#new_user").submit();
        return true;
    }
});
}

这是一个Rails表单。代码仅在用户名已存在时才有效。但如果没有,则表格不提交。

2 个答案:

答案 0 :(得分:0)

我们需要 checkusername 页面,但我认为表单未提交,因为未触发错误(即:未发生错误)。 如果用户名尚未使用,则 checkusername 页面应返回一个specfic值,然后您可以处理该表单。

答案 1 :(得分:0)

这是我检查唯一用户名的方法。我可能会投票,因为它不是Rails,而是PHP。

    <style>.nodisplay{display: none;}</style>

    <form id="usersigningup" name="usersigningup" method="post" action="">
    <input type='text' name='name' id='nose' pattern='[A-Za-z0-9_]{5,20}' required>
    <input type='text' name='password' id='password' pattern='[A-Za-z0-9_]{5,20}' required>
    <input class="nodisplay" type="submit" id="usersignup" name="usersignup" value="Go!"></form><br>
    <span id='response'></span>

在我的CSS中,提交按钮的默认显示设置为无。接下来我使用javascript keyup函数来收集id =&#39; nose&#39;的输入字段。 (这是用户名)并向php发送ajax帖子,然后在我的数据库上运行查询。

     $(document).ready(function(){
     $('#nose').keyup(function(){
     var name = $('#nose').val();
     $.ajax({
     type: 'post',
     data: {ajax: 1,name: name},
     success: function(response){
     $('#response').html(response);
     }});});});

接下来我使用mysqli查询。

    <?php include ('connect.php'); if( isset($_POST['ajax']) && isset($_POST['name']) ){
    $un = $_POST['name'];
    $sql51 = mysqli_query($conn, "SELECT username FROM mysite Where username = '$un'");
    if (mysqli_num_rows($sql51) > 0) {
    echo "<font color='red'>Sorry <b><i>" . $un . "</i></b> has been taken</font><script>document.getElementById('usersignup').style.display='none';</script>";
    } else {
    echo "<font color='green'><b>The Username <i>" . $un . "</i> is available</b></font><script>document.getElementById('usersignup').style.display='block';</script>";}
    exit;}?>

注意&#39; if&#39;查询中的语句;这将运行两个脚本之一。第一个是将提交按钮的显示保持为无,如果存在完全匹配并且回应&#39;抱歉(用户名)已被采取&#39;在一个带有id =&#39;响应&#39;的html元素中。第二个脚本将回显&#39;用户名(用户名)可用&#39;并将提交按钮样式的显示设置为&#39; display:block&#39 ;;使其可点击。

正如我所说,这一切都发生在一个keyup事件上,因此每次按下一个键时运行查询并放开它,你会看到你在响应元素中输入的字符;以及是否看到提交按钮。

这个例子中的PHP是一个例子,不被认为是安全的黑客;但是,在不允许大多数字符的形式中设置了一个模式属性。我希望这会有所帮助。