Php Laravel 5.1-管理面板-更新用户

Php Laravel 5.1-管理面板-更新用户,php,laravel,laravel-5.1,Php,Laravel,Laravel 5.1,我在编辑注册用户时遇到问题,我需要更新用户信息,但我遇到问题: 更新电子邮件用户,(错误电子邮件存在),我需要忽略用户编辑的电子邮件 其他信息不更新 如果插入新密码,则更新密码 我正在使用资源控制器 UserController.php namespace dixard\Http\Controllers\Admin; use Illuminate\Http\Request; use dixard\Http\Requests; use dixard\Http\Controllers\Con

我在编辑注册用户时遇到问题,我需要更新用户信息,但我遇到问题:

  • 更新电子邮件用户,(错误电子邮件存在),我需要忽略用户编辑的电子邮件
  • 其他信息不更新
  • 如果插入新密码,则更新密码
我正在使用资源控制器

UserController.php

namespace dixard\Http\Controllers\Admin;

use Illuminate\Http\Request;

use dixard\Http\Requests;
use dixard\Http\Controllers\Controller;

// colleghiamo al modello

use dixard\User;

// ci serve per validare
use Validator;

//per aggionare password
use Hash;    


public function update(Request $request, User $user)
        {

            $id= $user->id;
            // i want ignora id of user edited
            $rules = [

                'name' => 'required',

                'lastname' => 'required',

                'username' => 'required|max:50|',

                'birth' => 'required',

                'country' => 'required',

                'usertype' => 'required',

                'email' => 'required|email|unique:users'.',email,' . $id,


            ];

            $messages = [


                'name.required' => 'Campo nome richiesto',
                'lastname.required' => 'Campo cognome richiesto',
                'username.required' => 'Campo username richiesto',
                'username.max' => 'Campo massimo 50 caratteri',
                'birth.required' => 'Campo nascita richiesto',
                'country.required' => 'Campo paese richiesto',
                'usertype.required' => 'Campo tipologia richiesto',
                'email.required' => 'Campo email richiesto',
                'email.email' => 'formato email errato ',

                'email.unique' => 'Email già esistente',
                'password.min' => 'Campo password minimo 4 caratteri',
                'password.max' => 'Campo password massimo 18 caratteri',



            ];


            $validator = Validator::make($request->all(), $rules, $messages);
            if ($validator->fails()){

                return redirect('admin/user')->withErrors($validator);

            }
            // if there is not any error go to update
            else{           

                // if email id different by input, so if email input update also email
                if( $user->email != $request->email ){

                $s = new User;

                $data = array(

                     'name'             => $request->get('name'),
                'lastname'     => $request->get('lastname'),
                'username'          => $request->get('username'),
                'email'         => $request->get('email'),
                'password'      => $request->get('password'),
                'birth'         => $request->get('birth'),
                'country'       => $request->get('country'),
                'usertype'          => $request->get('usertype'),


                );

                $s->where($id, $request->get('id'))->update($data);

                return redirect('admin/user')->with('message', 'Updated successfully');
                }

                // If email input doesnt change update all ( not email)
                else{

                $s = new User;

                $data=array(

                    'name'          => $request->get('name'),
                'lastname'     => $request->get('lastname'),
                'username'          => $request->get('username'),

                'password'      => $request->get('password'),
                'birth'         => $request->get('birth'),
                'country'       => $request->get('country'),
                'usertype'          => $request->get('usertype'),


                     );

                $s->where($id, '=', $request->get('id'))->update($data);

                return redirect('admin/user')->with('message-error', 'error');


                }

            }
        }
ROUTES.PHP

Route::resource('admin/user','Admin\UserController');



Route::bind('user', function($user){

    return dixard\User::find($user);
});
model USER.PHP

    protected $table = 'users';


    protected $fillable = [

    'name',
    'username',
    'lastname',
    'birth',
    'profile',
    'country',
    'usertype',
    'email',
    'password',
    'social',
    'confirm_token',
    'active',

    ];

    // Ogni utente HA tanti prodotti.

    public function products() 
    {

        return $this->hasMany('dixard\Product');    

    }


    protected $hidden = ['password', 'remember_token'];

    // setare la password ogni volta che viene cambiata

    public function setPasswordAttribute($valor){
        //se non è vuota viene applicato hash
       if(!empty($valor)) {

        $this->attributes['password']= \Hash::make($valor);   
       }


    }
EDIT.PHP查看页面

{!!Form::open(['route'=>'admin.user.update','class'=>'Form-horizontal-Form-label left']

                )!!}


                <input type="hidden" name="_method" value="PUT">


                  <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Nome<span class="required">*</span>
                    </label>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                      <input type="text"  id="name"  name="name" class="form-control col-md-7 col-xs-12" value="{{$user->name}}">
                    </div>
                  </div>


                  <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="lastname">Cognome<span class="required">*</span>
                    </label>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                      <input type="text" id="lastname"  name="lastname" class="form-control col-md-7 col-xs-12" value="{{$user->lastname}}">
                    </div>
                  </div>

                  .... So for all fields inputs


                      <a href="{{url('admin/user')}}" class="btn btn-warning">cancel</a>
                      <button type="submit" class="btn btn-success">update</button>
                    </div>
                  </div>


                {!! Form::close()!!}
)
诺姆*
同源的*
.... 所以对于所有字段输入
更新
{!!Form::close()!!}
谢谢你的帮助

变化:

'email' => 'required|email|unique:users'.',email,' . $id,
致:


更改您的路线,并向其添加用户id,因为这是一种更新方法:

{!! Form::open(['route'=> ['admin.user.update', $user->id], ...])!!}

您没有将用户id传递给路由,因此在控制器中,用户可能为空。在这种情况下,验证不会通过,因为id为null,所以不会跳过当前用户,它会检查用户表中的所有记录。

我在表单上添加了:{!!表单::打开(['route'=>['admin.user.update',$user->id],…])!!}现在我有了这个错误---->SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“45”(SQL:update
users
set
name
=test,
lastname
=test,
username
=test,
email
=test@test.com,
密码
=123456,
出生
=2008-07-24,
国家
=意大利,
用户类型
=0,
更新时间
=2016-05-06 17:24:54其中
45
i(空)
{!! Form::open(['route'=> ['admin.user.update', $user->id], ...])!!}