【问题标题】:Checkbox in Laravel [duplicate]Laravel中的复选框[重复]
【发布时间】:2021-08-11 19:32:40
【问题描述】:

I need to create a checkbox, which when selected my user is considered as ACTIVE, and when this checkbox is not selected the user is considered as INACTIVE 我的数据库中有一个名为 (is_active) 的列,它是 tinyInteger,默认为 1,但如果我单击该复选框,它必须变为 0

我需要用一个复选框来做到这一点,我的代码是这样的

<form action="/is_active/save" method="post" class="lg:text-left">
@csrf
   <div class="mb-3">
     <div class="p-6 card bordered">
         <div class="form-control">
              <input type="checkbox" name="is_active">
              <label>Active</label><br/><br/>
         </div>
     </div>
   </div>
   <button type="submit"
    class="inline-flex mt-1 justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
    Save
   </button>
</form> 

我的表单被定向到

Route::post('/is_active/save', function () {
    $userId = auth()->user()->id;

    $is_active = request('is_active');
    
    $userId->is_active = $is_active;
    $userId->save();

    return redirect("people");

})->middleware(['auth']);

今天这是我保存表单后的结果

尝试在 int 上分配属性“is_active”

如何让我的复选框将值 1 更改为 0? 有人可以帮助我吗?谢谢!

【问题讨论】:

  • 勾选时没有value="" 的复选框会“打开”到服务器。未选中时,他们什么也不发送。此外,您将复选框命名为terms,所以我不确定request('is_active'); 应该引用什么。如果你做一个dd($request-&gt;is_active),你会得到什么?
  • 另外,当您分配$userId = auth()-&gt;user()-&gt;id; 时,$userId 是一个整数,您不能这样做$userId-&gt;is_active,因为您不能将属性分配给一个整数。您的代码需要大量重构...
  • 您好,感谢您的回复!已经调整了我的问题
  • 好的,你改好了名字,这是很好的第一步。检查我的其余 cmets;你还有一些问题要解决????
  • 用 dd,我得到一个空值

标签: php laravel


【解决方案1】:

将复选框的默认值设置为 0:

<input type="checkbox" name="is_active" value="0">

接下来,在后端处理这个值:

$isActive = $request->input('is_active', 1);

如果选中,这将导致 0,如果不选中,则返回 1(第二个参数作为后备)。

最后,正确分配它:

routes/web.php:

<?php

use Illuminate\Http\Request;

Route::post('/is_active/save', function (Request $request) {
  $user = auth()->user();
  $user->is_active = $request->input('is_active', 1);
  $user->save();

  return redirect('people');
})->middleware(['auth']);

使用此代码,如果您不选中该复选框,则用户的is_active 值将设置为1。如果您检查它,该值将设置为0

【讨论】:

  • $isActive = $request->input('is_active', 1);你能告诉我我把这段代码放在哪里吗?会在迁移中吗?
  • 否... 这与迁移无关。该代码仅供参考,本次更新的完整代码为以下 3 行:$user = auth()-&gt;user();,然后是 $user-&gt;is_active = $request-&gt;input('is_active', 1);,最后是 $user-&gt;save();
  • 我认为如果您查找一些有关 HTML、PHP 和 Laravel 的基本教程会非常有益;该语法非常基础,如果您没有很好地掌握它,那么您以后会遇到困难(我并不是说粗鲁,您只需要先学会走路才能跑步?)
  • 这是答案 Undefined variable $request
  • 啊,您使用的是request() 而不是$request。好的,1 秒,我也更新一下。
【解决方案2】:

如果你的复选框没有被选中,为了得到一个 0,你可以像这样使用三元运算符:

$userId->is_active = ($request->input('terms')) ? 1 : 0;

如果复选框选中,上面的代码将返回 1,如果复选框未选中

,则返回 0

【讨论】:

    【解决方案3】:

    您可以在请求中使用has。如果未选中该复选框,则根本不会传递输入,因此 has 将返回 false

    $user->is_active = $request->has('is_active'); // returns bool
    

    虽然我不确定整个部分是否已检查您是否希望它成为0 部分。如果选中,我认为这意味着1 (true)。

    您的错误本身是因为没有您的 User 对象,而是在变量中包含“id”:

    $user = auth()->user();
    $user->is_active = ...;
    

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多