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

PHP Laravel 如何检查控制器中是否选中了复选框

PHP Laravel 如何检查控制器中是否选中了复选框

PHP
回首忆惘然 2021-07-03 15:10:20
我正在构建一个laravel连接mailchimp到联系表单的应用程序。用户必须接受条件,并有可能通过选中复选框来接收时事通讯。现在,当用户同时接受条件和时事通讯时,表单提交成功,但是当用户不选中时事通讯复选框时,表单未提交,我真的不知道为什么。这里的输入<input name="conditions" value="1" type="checkbox" class="custom-control-input" id="applyConditions" required><input type="checkbox" name="newsletter" class="custom-control-input" id="contactNewsletterSubscribe">和我的控制器:class ContactController extends Controller{public function store(){    $validator = Validator::make(request()->all(), [        'email' => ['required', 'email'],        'name' => ['required', 'string'],        'phone' => ['string'],        'subject' => ['required', 'string'],        'message' => ['required', 'string'],        'conditions' => ['accepted', 'boolean'],    ]);    if ($validator->fails()) {        return response()            ->json($validator->messages(), 400);    }    if (request()->has('newsletter')) {        Newsletter::subscribePending(request()->email);        if (!Newsletter::lastActionSucceeded()) {            return response()                ->json($validator->messages(), 400);        }    }    Mail::to('my@mail.com')        ->send(new ContactUsMessage([            'email' => request()->email,            'name' => request()->name,            'phone' => request()->phone,            'subject' => request()->subject,            'message' => request()->message,        ]));    return response()->json('OK', 200);}}当我同时选中conditions和newsletter复选框时,表单数据返回:conditions: 1newsletter: on当条件被接受但通讯复选框未被选中时,表单数据返回:conditions: 1newsletter: undefined有人能告诉我我做错了什么吗?
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

有人能告诉我我做错了什么吗?


首先,你的 jQuery 代码用处不大:


if ($('#contact input[name="newsletter"]:checked')) {

    formData.append(

       "newsletter",

       $('#contact input[name="newsletter"]:checked').val()

   );

} else {

    formData.append(

       "newsletter",

       $('#contact input[name="newsletter"]').val()

    );

}

在这两种情况下,您都试图获取value不存在的属性。并且您得到的on只是因为On当<input>标签没有value属性时,将值分配给选中的复选框是浏览器的默认行为。


此外,如果您设置该属性,则无论checked复选框的状态如何,您都将始终获得其值;)。自己试试看。


接下来,我将使用一个简单的代码,如下所示:


formData.append(

    "newsletter",

    $('#contact input[name="newsletter"]:checked').length

);

没有任何条件。在控制器中,您将获得1要么0。


然后,在控制器中,您可以这样做:


if (!empty(request()->newsletter)) {

    ...

}


查看完整回答
反对 回复 2021-07-09
  • 2 回答
  • 0 关注
  • 189 浏览

添加回答

举报

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