【问题标题】:How to submit multiple forms in laravel?如何在 laravel 中提交多个表单?
【发布时间】:2020-03-02 21:32:05
【问题描述】:

我有一个简单的表单,其中包含一个用于在弹出模式中打开另一个表单的按钮,表单看起来像这样

现在您可以在上面看到预出价输入加号按钮,当用户单击加号按钮时,它会打开包含如下表单的模式。

现在我想按以下顺序提交表格

First submit: base form (norma way)

Second submit: form inside a pop up (via ajax)

这是我在页面控制器中提交表单的商店功能

  public function store(Request $request)
    {

        $page = Page::create([
            'title' => $request->get('title'),
            'articles' => $request->get('articles'),
            'status' => $request->get('status'),
        ]);

        // dd($request);
        $page->save();

        $bidder = Bidder::create('page_id' -> $page->id);

        // save bidders informtion to the database using ajax
        if($request->ajax())
        {
         $rules = array(
          'params_name.*'  => 'required',
          'params_value.*'  => 'required',
          'bidders_name.*'  => 'required',

         );
         $error = Validator::make($request->all(), $rules);
         if($error->fails())
         {
          return response()->json([
           'error'  => $error->errors()->all()
          ]);
         }

          $params_name = $request->params_name;
          $params_value =$request->params_value;
          $bidders_name =$request->bidders_name;

         for($count = 0; $count < count($params_name); $count++)
         {
          $data = array(
           'params_name'   => $params_name[$count],
           'params_value'  => $params_value[$count],
           'bidders_name'  => $bidders_name[$count],


          );
          $insert_data[] = $data; 
         }

         bidder_parameters::insert($insert_data);

         return response()->json([
          'success'  => 'Data Added successfully.'
         ]);
        }
        return redirect("/pages")->with("sucess", "data saved");
    }

这里是用于在弹出窗口中提交表单的 ajax

  $("#paramsForms").on('submit', function(e) {
    e.preventDefault();

    $.ajax({
        url: '/pages',
        type: "POST",
        data: $(this).serialize(),
        dataType: 'json',
        beforeSend:function() {
            $("#save").attr('disabled', 'disabled');
        },
        success:function (data) {
            console.log(data);
            alert('Data successfull saved');
        },
        error:function (error) {
            console.log(error)
          console.log('Data not saved');
        }
    })   
})

现在点击提交时出现以下错误

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'title' cannot be null (SQL: insert into `pages` (`title`, `articles`, `status`, `updated_at`, `created_at`) values (?, ?, ?, 2019-11-06 11:29:31, 2019-11-06 11:29:31))"

注意:在 store 函数中检查两个表单的 dd($request),我得到以下

+request: ParameterBag {#44
    #parameters: array:4 [
      "_token" => "Wgozk9jnyUnJkL35vPhso9sUr7lbMD8cSgMVuN2s"
      "bidders_name" => array:1 [
        0 => "Biden"
      ]
      "params_name" => array:1 [
        0 => "democratic"
      ]
      "params_value" => array:1 [
        0 => "10"
      ]
    ]
  }

注意:问题是当我在弹出模式上单击提交时,它首先尝试发送基本表单

我需要改变什么才能得到我想要的?

【问题讨论】:

  • 决定是否要将title 作为必填字段
  • 您的请求似乎没有发送标题,而您的插入需要它。您应该在尝试插入之前考虑验证请求
  • 你确定是 Laravel 本身有问题吗?您尝试过哪些措施来进一步缩小问题范围?
  • 问题是当我单击弹出模式上的提交按钮时,它会尝试发送基本表单,这就是我收到错误的原因,现在我想要发送这些表单的最佳方式@NicoHaase

标签: javascript php mysql ajax laravel


【解决方案1】:

注意:问题是当我在弹出模式上单击提交时,它首先尝试发送基本表单

这意味着 laravel 将您的两个表单视为一个表单,当您尝试提交弹出表单时,它提交了基本表单。请确保你们两个表格是分开的。 您可能没有关闭表单标签之一,弹出表单的保存更改按钮充当基本表单提交按钮。

【讨论】:

    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2018-03-09
    • 2013-02-13
    • 2013-08-19
    • 2021-08-11
    • 2019-06-07
    相关资源
    最近更新 更多