2

我有一个 html 表单来保存 cakephp 中的项目。我想限制用户保存相同的项目名称。如果任何主体类型相同的项目名称,我在模型中应用了“唯一”验证,但如果有人在项目名称之前或之后输入带有空格的相同名称,它会接受它并存储到数据库中。这就是问题所在。我想在保存之前删除多余的空格。

请帮忙。

4

4 回答 4

8

从用户输入中删除空格的最佳位置,即在控制器级别trim()的回调中。beforeFilter()对于 PHP5+,数组函数array_walk_recursive()使这项工作变得非常容易。

例如:

public function beforeFilter()
{
    parent::beforeFilter();

    // remove leading and trailing whitespace from posted data
    if (!function_exists('trimItem')) {
        function trimItem(&$item,$key){
            if (is_string($item)){
                $item = trim($item);    
            }
        }
    }       
    array_walk_recursive($this->request->data, 'trimItem');                     
}

将此代码放入AppController,用户输入将在所有表单上被修剪

希望这可以帮助

于 2014-12-01T23:19:51.627 回答
3

使用trim它将从两侧修剪你的字符串

参考: http: //php.net/manual/en/function.trim.php

trim($str);
于 2013-01-29T04:33:52.987 回答
3

就像@Prasantn Bebdra 的回答一样,因为提问者不知道在哪里以及如何使用trim().

要修剪来自控制器中 POST 的所有数据(就在调用之前Model->save()),请执行以下操作:

foreach ($this->data as $key => $value) {
    $this->data[$key] = trim($value);
}

您还可以Model通过利用其中一个回调来使用它,例如beforeValidate()beforeSave()在您的情况下,最好使用 beforeValidate,因为您可能还想在之后验证此数据。

您还应该通知用户输入将被修剪,并且可能还会在客户端(在 POST 之前)进行此类修剪 - 检查这个 StackOverflow 答案

于 2013-01-30T09:07:33.040 回答
0

通过我的研究,我认为最好的解决方案是如果您的数据是数组格式,那么试试这个 => Stackoverflow: How to trim white spaces of array values in php

同时,如果您的数据不是数组,那么您可以简单地使用:

$data = trim($data);
于 2018-12-31T10:13:14.030 回答