2

プロジェクトをcakephpに保存するためのhtmlフォームがあります。ユーザーが同じプロジェクト名を保存するように制限したい。ボディが同じプロジェクト名を入力した場合、モデルに「一意の」検証を適用しましたが、プロジェクト名の前後にスペースを入れて同じ名前を入力すると、それが受け入れられてデータベースに保存されます.それが問題です. 保存する前に余分なスペースを削除したい。

助けてください。

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);
}

beforeValidate()beforeSave( )などのコールバックModelの 1 つを利用して、これを使用することもできます。この場合、後でこのデータを検証する必要があるため、beforeValidate を使用することをお勧めします。

また、入力がトリミングされることをユーザーに通知し、クライアント側で (POST の前に) そのようなトリミングを行うことも必要です。この StackOverflow の回答を確認してください。

于 2013-01-30T09:07:33.040 に答える
0

私の研究を通じて、データが配列形式の場合は最善の解決策だと思います。次にこれを試してください=> Stackoverflow:phpで配列値の空白をトリミングする方法

一方、データが配列でない場合は、次を使用できます。

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