【问题标题】:How to Validate and Sanitize Form Checkbox Array?如何验证和清理表单复选框数组?
【发布时间】:2017-07-28 18:18:29
【问题描述】:

我正在使用基于LaravelTwigOctoberCMS

我有一个带有复选框 queued[] 的表单。使用 Laravel 循环提交和删除它们。

一切正常,但我如何validate 并清理阵列?

验证需要星号 *? '*' => Input::get('queued')?

清理,我收到错误trim() expects parameter 1 to be string, array given

表格

<form method="POST" action="{{ url_current() }}"> 
    <input type="hidden" name="_handler" value="onDelete" />
    <input type="checkbox" name="queued[]" value="item1" />
    <input type="checkbox" name="queued[]" value="item2" />
    <input type="checkbox" name="queued[]" value="item3" />
    <button type="submit" name="submit" value="delete">Delete Checked</button>
</form>

PHP

public function onDelete() {

    # Validator
    $validator = Validator::make(
        [
            '_handler' => Input::get('_handler'),
            'queued' => Input::get('queued'),
            'submit' => Input::get('submit')
        ]
    );
    if ($validator->fails()) {
        return Redirect::back()->withErrors($validator);
        exit();
    }

    # Sanitize
    function sanitize_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = strip_tags($data);
        $data = htmlspecialchars($data);
        return $data;
    }

    # Delete Checked
    $checkboxes = '';
    $checkboxes = isset($_POST['queued']) ? $_POST['queued'] : array();
    // Sanitize
    $checkboxes = $this->sanitize_input($checkboxes);

    foreach($checkboxes as $file) {        
        File::delete("$file");
    } 
}

【问题讨论】:

  • 我有验证解决方案,它可以像 'queued[]' =&gt; Input::get('queued'), 一样工作,请尝试一下
  • 你在sanitize_input方法中传入的$data是什么?
  • @recoverymen $data 只是传递给函数的任何表单输入。我将 $checkboxes 传递给它。我会更新代码。
  • 好的...这次验证对你有用吗?
  • @recoverymen 它通过了验证器,但是我怎么知道它是否已经验证了数组中的每个项目,或者它是否只是检查最后一个 queued[]?

标签: php html laravel laravel-5 octobercms


【解决方案1】:

您可以编写自己的自定义验证规则。 您可以像这样在插件boot() 方法中定义新规则:

Validator::extend('myCustomRule', function($attribute, $value, $parameters) {
    # check if the $value is in valid
    # return true if it is and return false if it is not valid
    return true;
});

您可以对数组进行 foreach,然后检查值。取决于您的验证规则,之后您可能不需要清理。

然后您可以通过您提供的名称使用自定义规则:

$validator = Validator::make(input(), [
    'queued' => 'myCustomRule',
    ]
);

【讨论】:

    猜你喜欢
    • 2018-02-19
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2017-02-02
    相关资源
    最近更新 更多