Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当密码输入字段为空时,如何避免在Laravel中更新密码?_Php_Laravel - Fatal编程技术网

Php 当密码输入字段为空时,如何避免在Laravel中更新密码?

Php 当密码输入字段为空时,如何避免在Laravel中更新密码?,php,laravel,Php,Laravel,我在laravel中获得了此代码,允许管理员更新用户的密码: public function editarmembro(Request $dados) { $validatedData = $dados->validate([ 'name' => 'required', 'email' => 'required', 'credencial' => 'required',

我在laravel中获得了此代码,允许管理员更新用户的密码:

public function editarmembro(Request $dados)    {

        $validatedData = $dados->validate([

            'name' => 'required',
            'email' => 'required',
            'credencial' => 'required',

        ]);

        $dados = $dados->all();

        if (!empty($dados['password'])) {
            $dados['password'] = Hash::make($dados['password']);
        }

        DB::table('users')->where('id', $dados['id'])->update(
            [ 'name' => $dados['name'], 'email' => $dados['email'], 'credencial' => $dados['credencial'], 'password' => $dados['password'], 'sobre' => $dados['sobre'], 'updated_at' => Carbon::now(),  ]
        );

        return redirect()->route('membros')->with('mensagemSucesso',  'As informações do membro "'.$dados['name'].'" foram atualizadas com sucesso.');

    }
我的问题是,如果他将密码字段留空,我会看到一个错误屏幕,显示密码字段不能为空。如果他将密码字段留空,我希望我的代码不会更新密码,但如果他在密码字段中插入了内容,我希望代码会更新


请提供帮助。

如果它是空的,您可以将其从
$dados
数组中删除:

if (!empty($dados['password'])) 
    $dados['password'] = Hash::make($dados['password']);
else 
    unset($dados['password']);
或使用三元运算符

!empty($dados['password'])? $dados['password'] = Hash::make($dados['password']): unset($dados['password']);
而且,由于所有字段的名称都与请求的名称相匹配,并且
updated\u at
字段应该自动完成,因此不需要重新组装数组进行更新

DB::table('users')->where('id', $dados['id'])->update($dados);

如果仍要重新组装阵列,可以这样做

$update_dados = [ 
        'name' => $dados['name'], 
        'email' => $dados['email'], 
        'credencial' => $dados['credencial'], 
        'sobre' => $dados['sobre'], 
        'updated_at' => Carbon::now(),  
];

if (!empty($dados['password'])) 
    $update_dados['password'] = Hash::make($dados['password']);

DB::table('users')->where('id', $dados['id'])->update($update_dados);

您只需将所有值(密码除外)合并到数组中,密码仅在存在/设置为:

    $your_array = [ 
        'name' => $dados['name'], 
        'email' => $dados['email'], 
        'credencial' => $dados['credencial'], 
        'sobre' => $dados['sobre'], 
        'updated_at' => Carbon::now(),  
    ];
    DB::table('users')->where('id', $dados['id'])->update(
        empty($dados['password']) ? $your_array : array_merge($your_array, ['password' => $dados['password']])
    );