【问题标题】:check unique username when updating user details jquery modal更新用户详细信息 jquery modal 时检查唯一用户名
【发布时间】:2015-08-28 04:06:08
【问题描述】:

我正在使用 jQuery 模式为我的 laravel 项目创建和更新用户。创建新用户时,我会检查用户名的可用性。但是该功能不支持更新,当用户在不更改用户名的情况下保存数据时,它会给出用户名可用错误。请建议如何解决

我的控制器,

public function checkUsernameAvailability()
{
$user = DB::table('users')->where('username', Input::get('username'))->count();

if ($user > 0) {
    $isAvailable = FALSE;
} else {
    $isAvailable = TRUE;
}

echo json_encode(
    array(
        'valid' => $isAvailable
    ));

}


jQuery modal
                        username: {
                            validators: {
                                notEmpty: {
                                    message: 'The Username field is required'
                                },
                                rules : {
                                    username : { alphanumeric : true }
                                },
                                remote: {
                                    url: "{{ URL::to('/checkUsername') }}",
                                    data: function (validator) {
                                        return {
                                            username: validator.getFieldElements('username').val()
                                        }
                                    },
                                    message: 'The Username is not available'
                                },
                                stringLength: {

                                    max: 100,
                                    message: 'The Username must be  less than 100 characters long'
                                }
                            }
                        },

【问题讨论】:

  • 在 ajax 请求完成时禁用保存按钮,如果结果已经被获取,或者使用全局 js 变量并在 ajax 成功时设置 true/false 并在验证中使用变量。
  • @AbdullaChozhimadathil :问题是这个功能非常适合创建新用户。但是在更新用户时,即使用户更新个人资料而不更改用户名,它也会出错,请建议

标签: javascript php jquery laravel-5


【解决方案1】:

试试这个代码:

要添加的新代码

$(document).ready(function(){
    $('#username').data('actval',$('#username').val());
});

代码 Javascript 的变化

username: {
                        validators: {
                            notEmpty: {
                                message: 'The Username field is required'
                            },
                            rules : {
                                username : { alphanumeric : true }
                            },
                            remote: {
                                url: "{{ URL::to('/checkUsername') }}",
                                data: function (validator) {
                                    return {
                                        username: validator.getFieldElements('username').val(),
-----------------------                     actusername: $('#username').data('actval')
                                    }
                                },
                                message: 'The Username is not available'
                            },
                            stringLength: {

                                max: 100,
                                message: 'The Username must be  less than 100 characters long'
                            }
                        }
                    },

PHP 代码的变化

public function checkUsernameAvailability()
{
    $user = 0;
    if(Input::get('username') != Input::get('actusername')){
       $user = DB::table('users')->where('username', Input::get('username'))->count();
   }


if ($user > 0) {
    $isAvailable = FALSE;
} else {
    $isAvailable = TRUE;
}

echo json_encode(
    array(
        'valid' => $isAvailable
    ));

}

【讨论】:

    【解决方案2】:

    1-您可以在 ajax 中发送一些参数,因为您知道它是更新的还是新的。并且您可以在服务器端检查它,以便仅当它是新用户时才根据参数值调用 checkUsernameAvailability()。在更新的情况下,您不需要调用该方法。

    2- 或者,如果是用于检查用户可用性的更新情况,则不要调用 ajax。

    【讨论】:

    • 是的,我所做的是创建另一个函数 checkUsernameAvailability() 进行更新,但我想检查用户何时更新,如果 usernmae 没有随 db 发生变化,如果用户只更改 usernmae,它不会给出用户名可用的任何错误它应该与 db 有任何其他匹配。请建议
    • 你能告诉我你的表结构,以便我可以帮助你
    • 或者做一件事将用户名值作为 2 个参数传递 1 将是实际的,您可以将其保留在用户名 attr 上,例如 "$('#username').data('actval',$('# username').val()) 仅在第一次加载页面时,您可以通过使用 $('#username').data('actval'); 来获取它,并使用实际的 javascript 将其复制到您的数据函数中并获取基于 db 的数据并将 db 的用户名与 UI 中更改的用户名进行比较
    • 我的表结构是 id , usernmae, full_name , password
    • 你能告诉我如何在我的代码中采纳你的建议吗?
    【解决方案3】:

    我认为你应该在提交表单之前检查用户名是否已经存在于表中,jQuery的用户.on('blur')并调用函数checkusernameAvailability(),然后捕获响应并在此基础上更改功能创建用户或更新用户。希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2014-07-17
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多