PHP foreach在第一次迭代中显示最后一条记录

时间:2017-07-10 14:00:36

标签: php laravel foreach

我在视图中有以下代码:

@foreach($totalUsers as $user)
    <tr>
        <td class="v-a-m ">
            <input type="checkbox" class="user" name="user" value="{{$user->id}}">
            <input type="hidden" name="city" value="{{$user->city}}">
        </td>
        <td class="v-a-m text-white">
            <span>{{$user->name}}</span>
        </td>
        <td class="v-a-m">
            <span>{{$user->cnic}}</span>
        </td>
   </tr>
@endforeach

一些Jquery:

$('input.user').on('change', function() {
    $('input.user').not(this).prop('checked', false);
});

hidden field未返回其iteration结果,而是返回数据库表格中最后一行的结果。

dd($request->all());会返回请求,但city具有表格最后一行的值,经过了充分测试。

我想要的是hidden字段应返回当前的迭代城市。

我在这里做错了什么?

4 个答案:

答案 0 :(得分:1)

只是您不能拥有多个具有相同名称的输入字段。

如果您将用户export class AppComponent{ menus: any[]; constructor() { this.menus = [ { name: 'home', status: 0 }, { name: 'about', status: 1 } ] } updateChecked(menu, event) { console.log(this.menus); // inspect menu, menus and event here } } 传递给控制器​​,或者您可以查询用户表的任何内容,那么您可以获得完全相同的用户的城市,您选中了复选框。

喜欢:

id

您应该将public function findUser(Request $request){ //You can pass anything here with `where()`, E.g name,username $user = \App\User::find($request->get('id')); //Do the rest... } 与雄辩first()

一起使用

答案 1 :(得分:0)

如果您需要用户选择其中一个选项,则需要将checkbox替换为radio按钮。 这样,只允许选择一个选项。

CSS和JS可以帮助您隐藏城市广播并使其与用户广播同步:

@foreach($totalUsers as $user)
    <tr>
        <td class="v-a-m">
            <label class="user-label">
                <input type="radio" class="user-radio" name="user" value="{{ $user->id }}"/>
                {{ $user->id }}
            </label>
            <input type="radio" class="city-radio" name="city" value="{{ $user->city }}"/>
        </td>
        <td class="v-a-m text-white">
            <span>{{ $user->name }}</span>
        </td>
        <td class="v-a-m">
            <span>{{ $user->cnic }}</span>
        </td>
    </tr>
@endforeach

<style>
    .city-radio {
        display: none;
    }
</style>

<script>
    $(document).ready(function() {
        $('.user-label').change(function () {
            $(this).parent().find('.city-radio').prop("checked", true);
        });
    });
</script>

答案 2 :(得分:0)

您可以通过用户输入“禁用/启用”要发送的城市,以便在您的更改事件中“允许/阻止”隐藏字段提交到服务器:

$('input.user').on('change', function() {
   $('input.user').not(this).attr('selected', false);
   $('input.city').attr('disabled','disabled');

   $(this).siblings('input.city').removeAttr('disabled');
});

您可以看到只有具有所选用户的相关城市将在提交操作中发送。

希望这有帮助。

$('input.user').on('change', function() {
   $('input.user').not(this).attr('selected', false);
   $('input.city').attr('disabled','disabled');

   $(this).siblings('input.city').removeAttr('disabled');
});

$(document).on('submit','form.remember',function(e){
   console.log($(this).serialize());
   return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="remember">
  <table>
    <tr>
      <td class="v-a-m ">
        <input type="radio" name="user" class="user" value="1" />
        <input type="hidden" name="city" class="city" value="city_1" disabled />
      </td>
      <td class="v-a-m text-white"><span>name 1</span></td>
      <td class="v-a-m"><span>cnic 1</span></td>
    </tr>
    <tr>
      <td class="v-a-m ">
        <input type="radio" name="user" class="user" value="2" />
        <input type="hidden" name="city" class="city" value="city_2" disabled />
      </td>
      <td class="v-a-m text-white"><span>name 2</span></td>
      <td class="v-a-m"><span>cnic 2</span></td>
    </tr>
    <tr>
      <td class="v-a-m ">
        <input type="radio" name="user" class="user" value="3" />
        <input type="hidden" name="city" class="city" value="city_3" disabled />
      </td>
      <td class="v-a-m text-white"><span>name 3</span></td>
      <td class="v-a-m"><span>cnic 3</span></td>
    </tr>
    <tr>
      <td class="v-a-m ">
        <input type="radio" name="user" class="user" value="4"/>
        <input type="hidden" name="city" class="city" value="city_4" disabled />
      </td>
      <td class="v-a-m text-white"><span>name 4</span></td>
      <td class="v-a-m"><span>cnic 4</span></td>
    </tr>
  </table> 
  
  <input type="submit" value="Submit values"/>
</form>

答案 3 :(得分:0)

您的表单不能包含多个具有相同名称的输入字段。它与复选框一起使用,因为它将值存储在具有相同名称的数组中。但是输入类型hidden将返回具有相同名称的表单的最后一个输入的值,这是表的最后一行。换句话说,该值被最后一个输入字段覆盖。

当您使用city[]时,它将返回所有城市的数组,这不是您想要的。

我们了解您将隐藏字段包含在用户所在城市的目的。你难道不能从你的控制器中检索这些数据吗?

foreach($request->user as $user) {
    $user->city // and do your login here. 
}