【发布时间】:2020-07-24 14:34:37
【问题描述】:
我正在尝试更新 Laravel 应用程序的用户个人资料表单部分中的单个字段。
我可以在数据库中正确保存字段,但输入值和占位符的值错误。在每次点击保存中,值不会改变,它们取自最后列出的用户配置文件详细信息。在我的情况下,这是用户#3。问题是当我使用用户的#1 凭据登录时,值和占位符取自用户#3。当我使用用户 #2 登录时,再次从用户 #3 登录。只有 user#3 的值是正确的,我可以在两个字段中毫无问题地操作它。
当我使用用户#1 更新配置文件字段时,它会保存输入的一个字段,但由于第二个字段继承了用户#3 的输入详细信息,它会将其保存在用户#1 的字段 2 中,这会导致输入错误。默认情况下,我不能在这些字段中保留 null。我的群众作业有人看守。
如何在刀片模板中只保存/更新单个字段而不影响表单中的其他字段?
我的路线:
Route::get( '/profile', 'userController\\profileEdit@profileEdit')->name('profileEdit');
Route::post('/profile', 'userController\\profileEdit@update')->name('update');
我的控制器:
namespace App\Http\Controllers\userController;
use App\Model\Hause_users;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class profileEdit extends Controller
{
function profileEdit (Request $request){
$user = Hause_users::all();
$name = $request->session()->get('name');
$request->session()->keep([request('username', 'email')]);
return view('frontview.layouts.profile',['user'=>$user])->with('username' , $name );
}
function update (Request $request){
$user = Hause_users::where('username', $request->session()->get('name'))->first();
$user->fill(['email' => request('Email')]) ;
$user->save();
$user->phone;
//dd($user->phone->phone);
if ($user->phone === null) {
$user->phone->phone->create(['phone' => request('tel')]);
}
else{
$user->phone->update(['phone' => request('tel')]);
}
return back()->withInput();
}
刀片文件:`
@extends('frontview.layouts.userView')
@extends('frontview.layouts.default')
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@section('title')
@endsection
@section('content')
@foreach($user as $v )
@endforeach
<h2 class="form-group col-md-6">Здравей, {{$username }} </h2>
<form class = "pb2" method="POST" name = 'profile' action='profile' >
{{ csrf_field()}}
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputEmail4">Поща</label>
<input type="email" class="form-control" name = "Email" id="inputEmail4"
value="{{$v['Email']}}"
placeholder="{{$v->Email}}">
</div>
<div class="form-group col-md-6">
<label for="inputPassword4">Промени Парола</label>
<input type="password" class="form-control" id="inputPassword4" placeholder="Парола">
</div>
</div>
<div class="form-group">
<label for="inputAddress">Address</label>
<input type="text" class="form-control" name = "Adress" id="inputAddress" placeholder="Снежанка 2">
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputAddress">Телефон</label>
<input class="form-control" type="text" name = 'tel' value="{{$v->phone['phone']}}"
placeholder="{{$v->phone['phone']}}"
id="example-tel-input" >
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputCity">Град</label><input type="text" class="form-control" id="inputCity">
<label for="inputCity">Квартал</label><input type="text" class="form-control" id="inputCity">
</div>
{{--<div class="col-md-6" >--}}
{{--<label for="image">Качи снимка</label>--}}
{{--<input type="file" name = "image">--}}
{{--<div>{{$errors->first('image') }}</div>--}}
{{--</div>--}}
</div>
{{--<div ><img src="https://mdbootstrap.com/img/Photos/Others/placeholder-avatar.jpg"--}}
{{--class="rounded-circle z-depth-1-half avatar-pic" alt="example placeholder avatar">--}}
{{--</div>--}}
{{--<div class="d-flex justify-content-center">--}}
{{--<div class="btn btn-mdb-color btn-rounded float-left">--}}
{{--<span>Add photo</span>--}}
{{--<input type="file">--}}
{{--</div>--}}
{{--</div>--}}
{{--</div>--}}
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="gridCheck">
<label class="form-check-label" for="gridCheck">
Запомни ме!
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Запази</button>
</form>
@endsection
@section('name')
{{ $username }}
@endsection
输出摘要:
在 img#1 上是正确的条目详细信息。这是其他部分而不是配置文件编辑部分。当前登录的用户是 U#1,但如图 2 所示,两个字段的值和占位符都用于 U#3。当我点击蓝色按钮时,U#1 保存了 U#3 的未触及字段输入。当我使用 U#2 登录时也是如此。
【问题讨论】:
-
用户 1 和用户 3 是否同名?我看到您按名称选择(
$user = Hause_users::where('username', $request->session()->get('name'))->first();),而使用 ID 更为传统(以防止找到错误的记录)。另外,您正在使用$request->session()->get('name')来检索表单数据,而我认为您想使用$request->get('name'),因为您将其与表单一起发布。 -
不,它们有不同的名称。据我所知,first() 不支持填充方法。如果我将 Email 列设置为 nullable() 会发生什么?
标签: laravel updates laravel-blade