尝试从用于提交多个记录的表单中插入user_id和数组时收到错误

时间:2018-03-12 22:01:10

标签: php mysql laravel eloquent

我正在尝试制作一个简单的表单,让用户在表单中键入多个“isbn”条目。提交后,每个字段都应在数据库中输入新记录,包括输入的isbn和登录用户的ID。我尝试了很多搜索,但没有提到的解决方案对我有用。

控制器:

首先,我测试了下面的代码,以确保它捕获了id和输入的isbn,但当然我给它添加了一个user_id来插入,这不是我想要的 -

public function wanted(Request $request)
    {
        $uid = Auth::user()->id;
        $booklist = Input::get('isbn');
            foreach($booklist as $onebook) {
                \DB::insert('insert into wantedbooks (isbn,user_id) values(?,2)', array($onebook));
            }
        return response("submitted for user ID: " . $uid);
    }

一旦我确认捕获了该信息,我就尝试了以下内容 -

Controller(导致数组到字符串转换错误):

    public function wanted(Request $request)
    {
        $uid = Auth::user()->id;
        $booklist = Input::get('isbn');
            foreach($booklist as $onebook) {
                \DB::insert('insert into wantedbooks (isbn,user_id) values(?,?)', [array($onebook),$uid)];
            }
        return response("submitted for user ID: " . $uid);
    }

视图中的表格:

<form action='wanted' method='POST'>
     <div class='form-group'>
             <input type="text" name="isbn[]" placeholder="enter isbn...">
             <input type="text" name="isbn[]" placeholder="enter isbn...">
             <input type="text" name="isbn[]" placeholder="enter isbn...">
             <input type="hidden" name="_token" value="{{ csrf_token() }}">
         <button type="submit" id="submit" class="btn btn-default">Add books</button>

我老老实实地忘记了我尝试过的东西,但这些是我认为我记得很准确的东西。关于我做错了什么的任何建议或信息?我是一个初学者,因为我现在肯定很明显。

编辑: 工作代码,但允许空白字段仍然会产生错误

public function wanted(Request $request)
    {
        $uid = Auth::user()->id;
        $booklist = Input::get('isbn');
            foreach($booklist as $onebook) {
                if($onebook === '') continue;
                DB::table('wantedbooks')->insert(['isbn' => $onebook, 'user_id' => $uid]);
            }
        return response("submitted for user ID: " . $uid);
    }

2 个答案:

答案 0 :(得分:1)

array($onebook)替换为$onebook,不要编写原始SQL:

DB::table('wantedbooks')->insert(['isbn' => $onebook, 'user_id' => $uid]);

答案 1 :(得分:0)

我会建议一种稍微不同的方法,实质上与你开始时没有太大的不同。

  1. 为您的表创建一个模型。您可以手动执行此操作,也可以通过CLI执行此操作。
  2. php artisan make:model WantedBook

    1. 编辑模型,添加表格,可填写的字段等。我将提供一个示例,相应调整,不要复制粘贴(因为你不会那样学习,我故意做错了)。 / LI>

      档案:WantedBook.php

      <?php
      
      namespace App;
      
      class WantedBook extends Eloquent
      {
          protected $table = 'wantedbooks';
          // The rest is up to you, there's only 1 or 2 lines of code missing here
      }
      
      1. 在控制器中写下更少的代码。更少的代码=更快阅读,更快理解,除非你是一个故意使一切都不可读的时髦程序员,不要那个人。
      2. 控制器动作(可以更短,但这个可读性很好):

        public function wanted(Request $request)
        {
            $booklist= $request->input('isbn', []);
        
            foreach($isbn as $isbn)
            {
                $record = App\WantedBook::create(['isbn' => $isbn, 'user_id' => Auth::user()->id]);
            }
        
            return response("submitted for user ID: " . Auth::user()->id);
        }
        

        免责声明:我没有发布开箱即用的代码,原因是没有人复制粘贴它。如果您认为使用模型概念的方法对您来说没问题,那么请尽可能多地从这个示例中删除。

        如果您只是修改了代码,那么会出现一个善意的灵魂来提供它。

        祝Laravel和PHP好运!