PHP 如何将表单输入与数据库值进行比较 |拉拉维尔

Posted

技术标签:

【中文标题】PHP 如何将表单输入与数据库值进行比较 |拉拉维尔【英文标题】:PHP how to Compare Form inputs with database values | Laravel 【发布时间】:2018-03-26 08:11:12 【问题描述】:

我需要将数据库值与表单中的输入进行比较,这是我的代码的一部分

 public function update($id, Request $request)

    $requestData = $request->all();
    $website_info = WebsiteInfos::findOrFail($id);

        if ( $website_info->all() == $request->all()) 
            Session::flash('alert-info', 'No Change have been made');
            return redirect('admin/website_infos');

         else 

           $website_info->update($requestData);

            Session::flash('alert-success', 'WebsiteInfos updated!');

            return redirect('admin/website_infos');

        




我需要将 $request->all() 与 db 值进行比较!我试试这个! if 被忽略并始终向我显示成功警报

【问题讨论】:

【参考方案1】:

我会这样做。由于存在主键、日期或外键,数据库记录永远不会等于传入请求。您应该提取要与请求进行比较的数据库值,如下所示

$db_records =$website_info->pluck(['name', 'url','any_other_field'])->toArray(); 
$incoming_request =$request->all(); //assumes this contains name, url, and any_other_field

if ( $db_records == $incoming_request) 
            Session::flash('alert-info', 'No Change have been made');
            return redirect('admin/website_infos');

          

【讨论】:

我试试这个但不工作,我尝试dd($db_records); 来验证我得到了什么,它告诉我array:1 [▼ 55318152 => "Tunisia Rent a car" ]Tunisia Rent a car (website_title) 55318152 is column (mobile 1) $db_records = $website_info->pluck('website_title', 'mobile1', 'mobile2', 'email', 'adresse')->toArray(); 我刚刚做了一些修改`pluck(['name', 'url','any_other_field'])` 我遇到了这个错误ErrorException (E_WARNING) strtolower() expects parameter 1 to be string, array given 你在哪里打电话 strtolower 我认为你应该在 laravel 文档 here 尝试或尝试 dd($incoming_request)$db_records。告诉我你那里有什么 感谢您帮助我使用 parth 在下面的答案中提供的解决方案,效果很好【参考方案2】:

最简单的方法是在查询中查找记录。

$website_info = WebsiteInfos::where([
    ['id', '=' ,$id],
    ['name', '=', $request->name],
    ['email', '=', $reqest->email]
])->first();

if ($website_info != null) 
    Session::flash('alert-info', 'No Change have been made');
    return redirect('admin/website_infos');
 else 
    $website_info->update($requestData);
    Session::flash('alert-info', 'No Change have been made');
    return redirect('admin/website_infos');

【讨论】:

这看起来适用于第一个条件,但是当我进行更改时,我收到此错误Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Call to a member function update() on null 你能检查$requestData的函数更新和值吗?我认为您需要根据查询传递参数。 $website_info = WebsiteInfos::findOrFail($id); 只需将此行添加到其他条件

以上是关于PHP 如何将表单输入与数据库值进行比较 |拉拉维尔的主要内容,如果未能解决你的问题,请参考以下文章

如何显示具有相同值的最后一行的总数? (拉拉维尔)

拉拉维尔 5.4。调用错误:php artisan db:seed

如何使用 AJAX 渲染部分内容?拉拉维尔 5.2

更新或创建行数据库。拉拉维尔

如何在 json 响应中发送多个参数? (拉拉维尔)

选择 2 不显示选定选项。 (拉拉维尔)