【问题标题】:Update single field in a Profile Update Form in Laravel 5在 Laravel 5 中更新个人资料更新表单中的单个字段
【发布时间】: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-&gt;session()-&gt;get('name'))-&gt;first();),而使用 ID 更为传统(以防止找到错误的记录)。另外,您正在使用$request-&gt;session()-&gt;get('name') 来检索表单数据,而我认为您想使用$request-&gt;get('name'),因为您将其与表单一起发布。
  • 不,它们有不同的名称。据我所知,first() 不支持填充方法。如果我将 Email 列设置为 nullable() 会发生什么?

标签: laravel updates laravel-blade


【解决方案1】:

其实这里的答案很简单。我做错的是我没有正确地将当前登录用户的值传递给视图。在我的 profileEdit 方法中,我使用$user = Hause_users::all();,然后将所有 id 循环到视图中,然后获取每个字段。但是因为视图不知道哪个用户传递了数据,所以无论哪个用户当前登录,foreach 总是返回数组中的最后一个用户 ID 及其输入。然后数据被错误的输入覆盖。 解决方法也很简单。 而不是$user = Hause_users::all(); 我用过了 $user = Hause_users::where('username', $request-&gt;session()-&gt;get('name'))-&gt;first();

然后进入视图,我反对 $user 变量,没有任何这样的循环:

 <form class = "pb2" method="POST" name = 'profile' action='profile'  >
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        {{--<input type="hidden" name="_method" value="PATCH">--}}
        <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="{{$user->Email}}"
                       placeholder="{{$user->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="{{$user->phone['phone']}}"
                   placeholder="{{$user->phone['phone']}}"
                   id="example-tel-input" >

基本上这是对所有不使用 Laravel 内置 Auth 系统的详细解释

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多