0

サーバー側の検証のために、 GUMP https://github.com/Wixel/GUMPをサイトに組み込みたいと思いました。残念ながら、ドキュメントは軽く、私は PHP を初めて使用します。

ここに私の検証コードがあります:

//Validation
$gump = new GUMP(); 
$rules = array(
    'dept'     => 'required|numeric',
    'hosp'     => 'required|numeric',
    'subhosp'  => 'required|numeric',
    'user'     => 'required|numeric',
    'gpo'      => 'required|boolean|exact_len,1',
    'clin'     => 'required|valid_name',
    'clinmail' => 'required|valid_email',
    'comp'     => 'required|alpha_dash',
    'cpt'      => 'required|alpha_dash',
    'past'     => 'required|boolean|exact_len,1',
    'latex'    => 'required|boolean|exact_len,1',   
);
$validated = $gump->validate($_POST,$rules);
print_r($validated); // Something went wrong

上記のコードからの出力は、FireBug で AJAX 応答を見ているときに、次のような配列を提供します。

Array
(
    [0] => Array
        (
            [field] => clin
            [value] => .-0
            [rule] => validate_valid_name
        )

    [1] => Array
        (
            [field] => clinmail
            [value] => %$sd
            [rule] => validate_valid_email
        )

)

そして、私が必要とするのは次のようなものです:

<div class="error-msg">You did not enter a valid email address</div><br>
<div class="error-msg">You did not enter a valid username</div><br>

私が得るドキュメントから:

    if($validated === TRUE)
{
    // Do something, everything went well
}
else
{   
    // This is where I am stuck. Do I have to loop through and put my <div> tags here?
}

私の質問は、コミュニティがこのクラスでエラー メッセージの出力をどのように処理するかということです。私の唯一の考えは、上記の結果をループし、フィールドと違反したルールに応じて異なるメッセージを出力するということですが、それは面倒なようです。スタンドアロンの PHP 入力検証を行うより良い方法または使用するより良いクラスはありますか? 非常に使いやすい別のクラスを使用していましたが、インライン PHP から AJAX に移行したときに壊れ始めました。

4

3 に答える 3

4

コードを次のように編集します。

$gump = new GUMP(); 
$rules = array(
'dept'     => 'required|numeric',
'hosp'     => 'required|numeric',
'subhosp'  => 'required|numeric',
'user'     => 'required|numeric',
'gpo'      => 'required|boolean|exact_len,1',
'clin'     => 'required|valid_name',
'clinmail' => 'required|valid_email',
'comp'     => 'required|alpha_dash',
'cpt'      => 'required|alpha_dash',
'past'     => 'required|boolean|exact_len,1',
'latex'    => 'required|boolean|exact_len,1',   
);

$error_texts = array(
'dept'     => 'You must enter a numeric value',
'hosp'     => 'You must enter a numeric value',
'subhosp'  => 'You must enter a numeric value',
'user'     => 'You must enter a numeric value',
'gpo'      => 'You must enter a boolean value',
'clin'     => 'You must enter a valid name',
'clinmail' => 'You must enter a valid email',
'comp'     => 'You must enter a valid alpha dash',
'cpt'      => 'You must enter a valid alpha dash',
'past'     => 'You must enter 1 char',
'latex'    => 'You must enter 1 char',
);

$validated = $gump->validate($_POST,$rules);

if($validated === TRUE)
{
   echo "Every thing is ok";
}
else
{
    foreach($validated as $key=>$error)
    {
        echo '<div class="error-msg">' . $error_texts["{$error['field']}"] . '</div><br />';
    }
}
于 2012-05-07T23:59:28.597 に答える
1

検証が 2 回失敗した場合、たとえば、値が必要で、10 文字を超えて存在する必要がある場合、@semsems回答は同じフィールドに対して複数の行を出力することを追加したいと思います。

上記のコードを変更して追加しました:

$_validated = array();
foreach($validated as $key=>$error)
{
    if ( !in_array($error['field'], $_validated) )
    {
        print '<div class="error-msg">' . $error_texts["{$error['field']}"] . '</div>';
        $_validated[] = $error['field'];
    }
}
于 2012-06-11T22:03:27.520 に答える