为了账号安全,请及时绑定邮箱和手机立即绑定

选中复选框时laravel非法运算符和值组合

选中复选框时laravel非法运算符和值组合

PHP
胡子哥哥 2021-10-22 14:11:27
当我通过 POST 方法发送我的表单时,我需要检查复选框是否被选中。在我的控制器中,我有 4 个 if 是我检查的地方,但是当我这样做时,我会出错非法的运算符和值组合。我的看法{!! Form::open(['action' => 'PersonsController@raport', 'method' => 'POST']) !!}    @csrf    <div class="form-group">        <label for="exampleFormControlFile1">Personel:</label>        <input class="form-control form-control-sm" type="text" name="data" id="data" value="{{date('Y-m-01')}}" width="100%" readonly/>        {!! $errors->first('data', '<strong><p style="color:red;" class="help-block">:message</p></strong>') !!}             <div class="form-check">            <input class="form-check-input" name="all" type="checkbox" value="1" id="all">            <label class="form-check-label" for="defaultCheck1">                All            </label>                    </div>    </div>    <div class="form-group">        <label for="exampleFormControlFile1">User </label>        {!! Form::select('users', $users, null, ['class'=>'form-control form-control-sm', 'placeholder'=>'All users']) !!}        {!! $errors->first('users', '<strong><p style="color:red;" class="help-block">:message</p></strong>') !!}    </div>    {{Form::submit('Raport', ['class'=>'btn btn-primary btn-sm'])}}    {!! Form::close() !!}和控制器 public function raport(Request $request)    {       //... some code        if($request->input('all') !== 'on' && empty($request->input('users')))        {           $raport = Users::where('data', '>=', $request->input('data'))            ->orderBy('id_users', 'asc')->get();        }        elseif($request->input('all') === 'on' && !empty($request->input('users')))        {            $raport = Users::where('id_users', $request->input('users'))              ->orderBy('id_users', 'asc')->get();        }}
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我建议首先重构这个代码:


public function raport(Request $request)

{

    //... some code

    if(!$request->has('all')){

        $date=date('Y-m-01');

        if(!$request->filled('users')){

            $query = Users::where('data', '>=', $date);

        }else{

            $query = Users::where('id_users', $request->input('users'))->where('data', '>=', $date);

        }

    }else{

        if(!$request->filled('users')){

            $query = Users::all();

        }else{

            $query = Users::where('id_users', $request->input('users'));

        }

    }

    $raport=$query->orderBy('id_users', 'asc')->get();

    //... another some code

}

它可能无法解决您的问题,但它更清楚。


笔记:


错误Illegal operator and value combination可能是由于空值和字段(例如日期时间)之间的比较

如果您想确定请求中是否存在某个值且不为空,您可以使用该filled方法


查看完整回答
反对 回复 2021-10-22
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

你有这个价值


   <input class="form-check-input" name="all" type="checkbox" value="1" id="all">

这意味着您发送值复选框 = 1


如果您没有设置该值,那么它的默认值是 = on


因此将整数与字符串进行比较导致您的错误


在您的情况下,laravel 在 request 中有方法,因此您可以检查表单中的复选框是否已选中


你可以像这样在你的代码中应用它


    if(!$request->has('all') && empty($request->input('users')))

    {

       $raport = Users::where('data', '>=', $request->input('data'))

        ->orderBy('id_users', 'asc')->get();

    }

    elseif($request->has('all') && !empty($request->input('users')))

    {

        $raport = Users::where('id_users', $request->input('users'))

          ->orderBy('id_users', 'asc')->get();

    }

    elseif($request->has('all') && empty($request->input('users')))

    {

        $raport = Users::orderBy('id_users', 'asc')->get();

    }

    elseif(!$request->has('all') && !empty($request->input('users')))

    {

        $raport = Users::where('id_users', $request->input('users'))

         ->where('data', '>=', $request->input('data'))

           ->orderBy('id_users', 'asc')->get();

    }


查看完整回答
反对 回复 2021-10-22
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

我遇到了同样的问题,我发现我在变量中传递了空值。


查看完整回答
反对 回复 2021-10-22
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信