【问题标题】:Undefined index:jawaban未定义索引:jawaban
【发布时间】:2023-03-29 19:49:01
【问题描述】:

我想使用数组向数据库输入多个数据,但我收到一条错误消息。代码如下:

集群控制器

$jawaban = $request->jawaban;

$data = [];
if($jawaban != null || $jawaban == false){
  for($i=1; $i<=count($jawaban['jawaban']); $i++){
     $data[] = array('jawaban' => $jawaban[$i]['jawaban']);
  }

  $store = Soal::where('cluster_id', $id)->update($data);
  return dd($store);
}

showexam.blade.php

    <form action="/jawaban/store/{{$model[$i]->id}}" method="post" enctype="multipart/form-data"> 
    @csrf
        <table id="datatable" style="width:100%">
        <tbody>           
            <tr>{{$i+1}}. </tr>
            <tr>{{$model[$i]->soal}}</tr>
            <ol type="A" style="">
                <li> {{$model[$i]->A}}</li>
                <li> {{$model[$i]->B}}</li>
                <li> {{$model[$i]->C}}</li>
                <li> {{$model[$i]->D}}</li>
                <li> {{$model[$i]->E}}</li>
            </ol>
            <input list="browsers" name="jawaban[]">
            <datalist id="browsers">
              <option value="A">
              <option value="B">
              <option value="C">
              <option value="D">
              <option value="E">
            </datalist>
        @endfor
            <button type="submit" class="btn btn-primary text-right" id="modal-btn-save">Done</button>
    </form>

【问题讨论】:

  • 如果您在控制器中使用 dd($request->file('jawaban')) 会得到什么??
  • 我没有看到名为string :S 的索引的任何用途。它说错误来自哪里?
  • 请添加完整的堆栈跟踪。
  • 边想:我认为 PHP 数组是 0 索引的?为什么不$i = 0; 我认为问题(如果不是另一个问题)在于您如何迭代该数组,请告诉我们$jawaban 的输出是什么。
  • $jawaban = $request-&gt;jawaban; dd($jawaban); 这给了你什么?我认为你应该count($jawaban)。我不认为你在这里处理关联数组。

标签: php arrays database laravel loops


【解决方案1】:

count($jawaban['jawaban'])

您已经有一个名为 jabawan 的数组,您使用 $jawaban = $request-&gt;jawaban; 检索到该数组

那个jabawan 会有一个正常的计数数组$jabawan = ['A', 'B']

它不会有一个名为 jabawan 的索引。

如果你做过类似的事情

$jabawan = post();

你可以使用你的代码,但你可以只使用

for($i=0; $i<count($jawaban); $i++){
   $data[] = array('jawaban' => $jawaban[$i]);
}

更改Soal::where('cluster_id', $id)-&gt;update($data);

进入

if ($soal_model = Soal::find( $id )) {
   $soal_model->update($data);
}

问题是您永远不会在查询对象上调用get(),或者在get() 返回的集合上调用first()

通过使用find(),您可以返回一个对象,如果它不存在,则返回 null。 通过将其包装在 if 语句中,更新只会在现有对象上执行,从而防止尝试更新空值时出错。

另外,您不能返回 dd()

我相信 dd 代表“转储和死亡”,至少我是这么读的,因为它就是这样做的。

它转储数据,然后终止进程。因此,在您的 dd() 调用之后,所有 laravel 返回处理程序都不会被调用。你杀死了进程。

【讨论】:

  • 嗨,我尝试了你的建议,然后出现了一个新错误。它说未定义的偏移量:15,我该怎么办?
  • @tasyadas 它是否在同一行给出相同的错误?还是在代码的不同部分?
  • 同一行,正好在行 $data[] = array('jawaban' => $jawaban[$i]);
  • 神圣的鳄梨酱。我从来没有检查过你的 for 循环是如何构建的......数组总是从 0 开始。从不从 1 开始。我修复了我的代码。 for($i=0; $i&lt;count($jawaban['jawaban']); $i++){ 也永远不要检查计数器是否小于或等于数组的长度。检查它是否小于数组的长度。我建议阅读ostraining.com/blog/coding/arrays
  • 它有效! :) @Tschallacka 但没有数据输入数据库
猜你喜欢
  • 2012-12-08
  • 2012-09-18
  • 1970-01-01
  • 2015-03-08
  • 2018-08-02
  • 2012-08-24
  • 2016-10-24
  • 2015-03-23
  • 2013-01-26
相关资源
最近更新 更多