【问题标题】:How can i prevent the form update from inspect changes如何防止表单更新检查更改
【发布时间】:2018-02-23 07:41:57
【问题描述】:

我有一个表单,当下面给出窗口加载代码时,我有 4 个字段全部被禁用:

<form action="user" method="post">
    {{csrf_field()}}

    <input type="text" class="hide first" value="{{$data->name}}"  name="name" id="name">
<input type="text" class="hide second" value="{{$data->age}}"  name="age" id="age">
    <input type="text" class="hide third" value="{{$data->city}}"  name="city" id="city">
    <input type="text" class="hide fourth" value="{{$data->class}}"  name="class" id="class">
    <input type="text" class="hide first" value="{{$data->lname}}"  name="lastname" id="name">

</form>

从表格中获取结果的脚本:

<script type="text/javascript">
    $(document).ready(function() {

        $('.hide').attr('disabled', true);

        $.ajax({
            url: "/getdata",
            type: "POST",
            dataType: "json",
            data: {
                "_token": "{{ csrf_token() }}"
            },
            success: function(data) {
                $('#upd').click(function() {
                    $.each(data, function(i, val) {

                        var getdata = val.split(",");
                        $('.' + getdata).attr('disabled', false);

                        $('.' + getdata).css('background-color', 'white');
                        $('.' + getdata).attr("style", "background-color:white!important");

                    })
                })
            }

        });
    })
</script>

获取数据的ajax url:

function getdata(Request $request) {

    $data = DB::table('demo') - > first();
    $result = array_keys((array) $data, 1);
    return response() - > json($result);
}

json 回复:[ " first "," second "]

控制器函数,我将从那里更新我的记录:

function save_record(Request $request) {

    echo "<pre>";
    print_r($request - > all());
    exit;
}

在所有代码中,我可以禁用我从函数中收到的所有字段,当我编辑文本值并提交表单时,它只显示我的 jquery 中未禁用的字段.

我的问题是,当任何人从检查中删除禁用属性并在这种情况下更新字段时,提交的表单也会更改值,但我不想要它..

那么我如何更新我从帖子而不是从检查 chnage 收到的那些值..我怎样才能防止检查更改表单有人可以帮我解决这个问题

【问题讨论】:

  • 使用两个 Laravel 版本?
  • 是的,使用 laravel 5.2 版
  • 恕我直言,确保您的用户不会篡改您的输入属性的最简单方法是首先不显示它们
  • 如果这个问题只是关于禁用检查工具,你不能。
  • 没有关于我正在获取哪些字段,只有那些值可以更新

标签: php jquery laravel laravel-5.2


【解决方案1】:

Laravel 提供了一种很好的方式来保护Mass Assignment

模型中有 1 个

class User  extends Model{

    protected $fillable = ['user_id',]; // your database fields that you allow to change

}

请求中的 2 个

您可以使用$request-&gt;only()方法接收并忽略其他未使用的。

【讨论】:

  • @Sneha 为什么要这些动态的?
  • @Sneha 不,你不能。您可以使用protected $guarded = [],所有模型属性都可以批量分配。 $guarded 必须为空数组。
  • 就像我们从表中处理它一样,如果添加了 1 个字段,那么我们需要在 $fillable 中添加一个字段??
  • 我们不能从模型中做到这一点吗?是否有任何控制器检查?因为从模型来看,在那种情况下处理起来会更困难..
  • @Sneha 你不能这样做。如果您更改您的数据库,那么您也必须更改可填充数组。
【解决方案2】:

您可以使用 session 来存储已被占用或存储的字段。
然后每次调用 ajax 时都会得到会话,然后从 $request 中删除字段

这是一个简单的例子

假设用户存储了年龄和姓名字段

$request->session()->put('fields', [
        'age' => true,
        'name' => true
    ]);

然后,每次发布表单时,您首先从 $request 中删除会话字段

$fields = array_keys($request->session()->get('fields'));
$request->except($fields);

那么你就可以轻松进行了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2011-11-20
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多