【问题标题】:ErrorException (E_NOTICE) Array to string conversion in LaravelLaravel 中的 ErrorException (E_NOTICE) 数组到字符串的转换
【发布时间】:2020-05-15 05:34:23
【问题描述】:

我出现此错误:ErrorException (E_NOTICE) 数组到字符串的转换

这是我从输入发送数据的视图。

<div class="row">
@foreach ($candidates as $key => $candidate)
<input type="hidden" name="candidate_id[]" value="{{ $candidate->cdtid }}">
    <div class="col-12 col-md-6 col-xl-4">                                
        <div class="card">
            <div class="card-body" style="background-image: url('{{ URL::asset('img/politicparties/' . $candidate->ppbgi) }}');">
                <div class="form-group row">
                    <div class="col-md-6" style="text-align: left">
                        <img src="{{ URL::asset('img/politicparties/' . $candidate->ppimg) }}" alt="{{ $candidate->ppimg }}" width="40%" height="80%">                                                
                    </div>
                    <div class="col-md-6" style="text-align: right">
                        <img src="{{ URL::asset('img/candidates/' . $candidate->cdtav) }}" alt="image" width="50%" height="100%">                                        
                    </div>                                            
                </div>
                <div class="form-group row">
                    <div class="col-md-12">
                    <h5 class="card-title">{{ $candidate->ppn }}</h5>
                    </div>
                </div>   
                <div class="form-group row">
                    <div class="col-md-8">                   
                        <h5 class="card-title">{{ $candidate->cdtn }} {{ $candidate->cdtln }}</h5>
                    </div>
                    <div class="col-md-4">
                        <input type="number" class="form-control" id="InputNumber" name="total[]" value="0">
                    </div>
                </div>
            </div>                                
        </div>
        <br>                               
    </div>
@endforeach

这是控制器中的方法。

/**
* Store a newly created resource in storage.
*
* @param  \Illuminate\Http\Request  $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
   $candidates = CandidatePoliticParty::candidates()->orderBy('id', 'ASC')->get();

   $procedings = ElectoralRecord::create([
       'electoralprecint_id'     => $request->get('electoralprecint_id'),
       'user_id'                 => $request->get('user_id'),
   ]);

   $inputs = $request->all();

   foreach ($inputs as $key => $value) {
       $votes = new VotingResult; 
       $votes->proceding_id              = $procedings->id;       
       $votes->candidate_id              = $request->input('candidate_id');
       foreach ($candidates as $key => $candidate) {
           $votes->politicparty_id           = $candidate->id;
       }            
       $votes->total                     = $request->input('total');
       $votes->save();
   };
}

这里我尝试存储记录id(proceding_id)、候选人id(candidate_id)、政党id(politicparty_id),以及表格中记录的值total(total)字段。

我提出的缺点是我没有正确地将数组转换为生成以下错误的字符串。

【问题讨论】:

  • 这里有很多代码,是否都与特定问题相关,或者您可以将其缩小到导致问题的代码。
  • 对于名称为 total[] 的字段,$request-&gt;input('total') 是什么?如果是这样,那是一个数组,可能会导致此问题。与candidate_id[] 相同。还有很多没有意义的事情,比如循环遍历$inputs 而不是(可能)循环遍历输入数组,例如totalcandidate_id
  • 我理解并非常感谢您对@Nigel Ren 的观察,但我试图提供必要的信息来解释一下这个案例,以便它可以服务,以便您可以了解我想要做什么,所以你可以指导我一点,告诉我我在哪里犯了错误。
  • 非常感谢@apokryfos 的观察,在这种情况下,我尝试发送一个数组,其中包含表单中每个候选人的值并将它们存储在数据库中以获得结果每个记录的值,我有点困惑,因为它应该构造将它们插入相应表的方式。
  • 这里有很多可以改进的地方。太多了,无法对这个问题做出任何合理的答案(不是一个对其他人通常也有用的答案)。但突出的一件事是user_id 是一个隐藏字段。恶意用户可以只发送一个不同的 id,并且根本不会进行服务器端验证。您应该只在服务器端使用 auth()-&gt;id() 而不是传递隐藏字段。

标签: php laravel laravel-5.8


【解决方案1】:

我在项目中组织了一些事情,并通过做一些研究来纠正问题,并能够解决如下问题。

我希望它将成为未来案例的有用资源。

$data = $request->all();

$proceding = $procedings->id;
$candidates = $data['candidate_id'];
$politicparties = $data['politiparty_id'];
$totals = $data['total'];

$rows = [];

foreach($candidates as $key => $input) {
    array_push($rows, [
        'proceding_id' => $proceding,
        'candidate_id' => isset($candidates[$key]) ? $candidates[$key] : '',
        'politicparty_id' => isset($politicparties[$key]) ? $politicparties[$key] : '',
        'total' => isset($totals[$key]) ? $totals[$key] : '' 
    ]);
}

VotingResult::insert($rows);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 2020-09-10
    • 2018-03-13
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多