【问题标题】:One page CRUD form operation (Laravel6)一页CRUD表单操作(Laravel 6)
【发布时间】:2020-05-07 14:00:00
【问题描述】:

我的数据库中有一张包含联系方式的表格。在我的表单上,我有一个显示人员姓名的下拉菜单,一旦我点击姓名,就会使用数据 (ajax) 填写字段。

当我想对表单数据执行操作时,就会出现问题。

例如,我点击下拉菜单中的“M Bram Manu”(id = 1)。我的 Ajax 将使用此联系人的详细信息填写我的表单。

但当我想更新、删除或添加新联系人时,它无法正常工作。 所以,如果我点击“删除”,它不会删除我选择的联系人,而是删除下拉列表中的最后一个联系人。为什么???

所以我认为我的链接从我的下拉列表中检索最后一个 ID,所以我决定放置一个隐藏的输入,其中包含表单中显示的联系人 ID 的值。但我不知道如何检索此值以将其定义为要发送到控制器的 ID。

下拉栏和链接按钮:

<form class="col-md-9">
        <label class="col-md-2">Rechercher : </label>
        <select class="form-control select2 col-md-7" id="selInscrit" name="selInscrit" onchange="selectID()">
            <option value="0" selected="selected"></option>
            @foreach($inscrit as $inscrits)
            <option value="{{$inscrits->INS_ID}}">{{$inscrits->INS_CIVILITE}} {{$inscrits->INS_NOM}} {{$inscrits->INS_PREN}} {{$inscrits->INS_NUM_RUE}} {{$inscrits->INS_Rue}} </option>
            @endforeach
        </select>
    </form>




    <div class="btn-group btn-group-sm col-md-3" role="group">
        <form action="" method="GET">
        <button type="submit" class="btn btn-secondary btn-sm">Edit</button>
        </form>


        <button type="submit" form="registerForm" formmethod="POST" formaction="{{ route('inscrits.store') }}" class="btn btn-secondary btn-sm">Save</button>
        <button type="submit" form="registerForm" formmethod="POST" formaction="{{ route('inscrits.update') }}" class="btn btn-secondary btn-sm">Update</button>

        <form action="{{ route('inscrits.destroy') }}" method="POST">
        <input id="INS_ID" name="INS_ID" value="" type="hidden">        
        @method('DELETE')
        @csrf
        <button type="submit" class="btn btn-secondary btn-sm">Delete </button>

        </form>           
    </div>

Ajax 用于下拉:

<script>
$('#selInscrit').change(function() {
    var id = $(this).val();
    var url = '{{ route("inscrits.show", ":id") }}';
    url = url.replace(':id', id);

    $.ajax({

        url: url,
        type: 'get',
        dataType: 'json',
        success: function(response) {
            if (response != null) {
                $('#INS_ID').val(response.INS_ID);
                $('#INS_CIVILITE').val(response.INS_CIVILITE);
                $('#INS_NOM').val(response.INS_NOM);
                $('#INS_PREN').val(response.INS_PREN);
                $('#INS_NAISS').val(response.INS_NAISS);
                $('#INS_AGE').val(response.INS_AGE);
                $('#INS_NUM_RUE').val(response.INS_NUM_RUE);
                $('#INS_Rue').val(response.INS_Rue);
                $('#INS_TEL1').val(response.INS_TEL1);
                $('#INS_OBS').val(response.INS_OBS);
                $('#INS_DATE').val(response.INS_DATE);
                $('#INS_TEL2').val(response.INS_TEL2);
            }

        }

    }); 
});

路线:

// INSCRITS

/ route for index
Route::get('/inscrits', 'InscritController@index')->name('inscrits.index');

// route for dropdown bar
Route::get('/inscrits/show/{id}', 'InscritController@show')->name('inscrits.show');

// route for update
// Route::match(['put', 'patch'], '/inscrits/update','InscritController@update')->name('inscrits.update');
Route::post('/inscrits/update','InscritController@update')->name('inscrits.update');
// route for store
Route::post('/inscrits/store', 'InscritController@store')->name('inscrits.store');

//route for delete
Route::delete('/inscrits/destroy', 'InscritController@destroy')->name('inscrits.destroy');

表格:

<form id="registerForm">
@csrf
    <div class="form-group row">
        <div class="col-lg-1">
            <label for="INS_CIVILITE">Civilité</label>
            <select class="form-control form-control-sm" id="INS_CIVILITE" name="INS_CIVILITE">
                <option value="" selected="selected"></option>
                <option value="Mme">Mme</option>
                <option value="Mlle">Mlle</option>
                <option value="M.">M.</option>
            </select>
        </div>
        <div class="col-lg-4">
            <label for="INS_NOM">Nom</label>
            <input class="form-control form-control-sm" id="INS_NOM" name="INS_NOM" value=""  type="text">
        </div>
        <div class="col-lg-3">
            <label for="INS_PREN">Prénom</label>
            <input class="form-control form-control-sm" id="INS_PREN" name="INS_PREN" value=""  type="text">
        </div>
        <div class="col-lg-2">
            <label for="INS_NAISS">Année Naiss</label>
            <input class="form-control form-control-sm" id="INS_NAISS" name="INS_NAISS" value="" type="text">
        </div>
        <div class="col-lg-2">
            <label for="INS_AGE">Age</label>
            <input class="form-control form-control-sm" id="INS_AGE" name="INS_AGE" value="" type="text">
        </div>
    </div>
    <div class="form-group row">
        <div class="col-lg-1">
            <label for="INS_NUM_RUE"># Rue</label>
            <input class="form-control form-control-sm" id="INS_NUM_RUE" name="INS_NUM_RUE" value="">
        </div>
        <div class="col-lg-9">
            <label for="INS_Rue">Libellé voie</label>
            <select class="form-control form-control-sm" id="INS_Rue" name="INS_Rue">
                @foreach($rue as $rues)
                <option value="{{$rues->RUE_NUM}}">{{$rues->RUE_NOM}} ({{$rues->RUE_Type}})</option>
                @endforeach
            </select>
        </div>
        <div class="col-lg-2">
            <label for="INS_TEL1">Téléphone 1</label>
            <input class="form-control form-control-sm" id="INS_TEL1" name="INS_TEL1" value="" type="text">
        </div>
    </div>
    <div class="form-group row">
        <div class="col-lg-8">
            <label for="INS_OBS">Observation</label>
            <input class="form-control form-control-sm" id="INS_OBS" name="INS_OBS" value="" type="text">
        </div>
        <div class="col-lg-2">
            <label for="INS_DATE">Date d'inscription</label>
            <input class="form-control form-control-sm" id="INS_DATE" name="INS_DATE" value="" type="text">
        </div>
        <div class="col-lg-2">
            <label for="INS_TEL2">Téléphone 2</label>
            <input class="form-control form-control-sm" id="INS_TEL2" name="INS_TEL2" value="" type="text">
        </div>
    </div>

    <input id="INS_LIEU" name="INS_LIEU" value="WEB" type="hidden">
    <input id="INS_EID" name="INS_EID" value="" type="hidden">


</form>

控制器:

public function index()
{
    $inscrit = Inscrit::all();
    return view('index', compact('inscrit'));
}

public function store(Request $request)
{
    $storeData = $request->validate([
        'INS_CIVILITE' => 'max:15',
        'INS_NOM' => 'max:50',
        'INS_PREN' => 'max:50',
        'INS_NUM_RUE' => 'max:8',
        'INS_TEL1' => 'max:10',
        'INS_TEL2' => 'max:10',
        'INS_AGE' => 'numeric',
        'INS_OBS' => 'max:255',
        'INS_Rue' => 'max:255',
        'INS_DATE' => 'max:255',
        'INS_NAISS' => 'max:255',
    ]);
    $inscrit = Inscrit::create($storeData);

    return redirect('/inscrits')->with('completed', 'Nouvel inscrit !');
}

public function show($id = 0)
{
    $data = Inscrit::where('INS_ID', $id)->first();
    return response()->json($data);
}

    public function edit($id)
{
    $inscrit = Inscrit::findOrFail($id);
    return view('index', compact('inscrit'));
}

public function update(Request $request, $id)
{
    $updateData = $request->validate([
        'INS_CIVILITE' => 'max:15',
        'INS_NOM' => 'max:50',
        'INS_PREN' => 'max:50',
        'INS_NUM_RUE' => 'max:8',
        'INS_TEL1' => 'max:10',
        'INS_TEL2' => 'max:10',
        'INS_AGE' => 'numeric',
        'INS_OBS' => 'max:255',
        'INS_Rue' => 'max:255',
        'INS_DATE' => 'max:255',
        'INS_NAISS' => 'max:255',
    ]);
    $id = request()->input('INS_EID');
    Inscrit::where('INS_ID', $id)->update($updateData);
    return redirect('/inscrits')->with('completed', 'inscrit mis à jour');
}

public function destroy($id)
{
    $id = request()->input('INS_ID');
    $inscrit = Inscrit::where('INS_ID', $id)->delete();

    return redirect('/inscrits')->with('completed', 'inscrit supprimé');
} 

The form

Database

【问题讨论】:

  • 如果你需要获取所有的表单数据,你可以这样做:$form_datas = $request->all 然后做这样的事情:$form_datas['INS_CIVILITE'] 例如是你的问题?
  • 我把这个放在哪里了?例如在保存链接的href中?
  • 我的问题是:如何正确询问我的控制器“嘿,我想保存/升级/删除表单内的联系人!”
  • 控制器前:在控制器中使用 App\Inscrit:Inscrit::where('Id', $id)->update($updateData); ??
  • 示例:laravel.com/docs/5.8/queries DB::table('users') ->where('id', $user->id) ->update(['active' => true]);

标签: php jquery mysql ajax laravel


【解决方案1】:

类似:

public function edit ($id) {
        $inscritContent = Inscrit::where('id', $id)->firstOrFail();
        return view('admin.inscrit.edit.form', [
            'content' => $iscritContent
        ]);
    }

    public function update($id, Request $req) {
        $inscrit = Inscrit::findOrFail($id);
        $inscrit->update($req->all());
        return redirect(route('admin.inscrit.index'));
    }

admin.inscrit.edit.form 和 admin.inscrit.index 是刀片模板

【讨论】:

  • 我有一个编辑方法(我将它添加到这个问题的控制器部分)。但是我不能有2个模板,我需要在同一个页面的同一个表单中做所有的CRUD操作!
  • 这不是问题,您可以在同一个模板中制作(重定向并查看到同一个刀片)
  • 在您的刀片中,您可以只使用 id 值作为 value="{{$content->id}}" 进行隐藏输入,或者只是发送刀片中的所有联系人并创建一个 foreach 循环,然后每个联系人将有一个隐藏的输入 ID ;)
  • 所以我需要一个编辑按钮,单击它,编辑我的字段,然后单击另一个更新按钮?好的,但是我如何编码按钮或链接的“href”?因为我还有这个ID问题...
  • 在下拉栏的foreach循环中,联系人ID“INS_ID”是
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 2015-11-28
  • 1970-01-01
相关资源
最近更新 更多