0

同じ名前の複数の入力フィールドを持つフォームがあります。これらは for ループを使用して設定されます。

<input type="text" id="form_dest_numb[<?=$i?>]" name="form_dest_numb[<?=$i?>]" value="<?php echo $form_dest_numb[$i];?>" maxlength="15" size="15" />

同じコールバック関数を使用して、これらのフィールドに検証を適用しています。私の問題は、表示されたフォームエラーにあるようです。

現在、次のコードがあります。

<?php if(form_error('form_dest_numb['.$i.']')) { echo "<div class=\"error\"><span class=\"error\">" . form_error('form_dest_numb['.$i.']') . "</span></div>"; } ?>

エラーメッセージを特定のキーに表示できないようです。エラー メッセージで、配列内の影響を受ける行を強調表示する必要があります。キーを form_error 変数名に渡す方法はありますか?

4

2 に答える 2

1

いいえ、エラー関数を拡張して独自の関数を作成しない限り、ありませんForm_validation(これはフォーム ヘルパーform_error関数で使用されます) 。

このクラスの CIerror関数がフィールド名を引数に取る理由は、設定したルールのフィールド名は、 CI が名前にない$this->form_validation->set_rules('form_dest_numb[]','','callback_validate_dest_‌​numb');エラーを探しているなどです...form_dest_numb[]form_dest_numb[1], form_dest_numb[1]

これを修正するもう 1 つの方法は、各フィールドに検証ルールを設定することです (for ループも使用します)。

for(i=0;  $i<10; $i+2){ // +2 as example with fields not being properly indexed 

     $this->form_validation->set_rules('form_dest_numb['.$i.']','','callback_validate_dest_‌​numb');

}
于 2013-06-03T14:35:59.547 に答える
0

正しいElijan Sejicの答えに加えて、検証ルールの設定とエラーと値の取得に役立つ次の関数を作成しました。

MY_Form_validation.php で:

function set_rules_array($name, $label, $rules)
{
    for ($i = 0; $i < count($_POST[$name]); $i++)
    {
        $this->set_rules("{$name}[$i]", $label, $rules);
    }
}

私が呼んでいるヘルパーでform2

function form2_error($name)
{
    static $array_fields = array();

    // if the last 2 characters are [], then handle this as an array field.
    if (substr($name, -2) === '[]')
    {
        // If this field has been form2_error'd before, then increment the index, otherwise set to zero.
        $array_fields[$name] = ! isset($array_fields[$name]) ? 0 : $array_fields[$name] + 1;
        $name = substr($name, 0, -2) . '[' . $array_fields[$name]. ']';
    }
    return form_error($name);
}

function form2_set_value($name)
{
    static $array_fields = array();

    // if the last 2 characters are [], then handle this as an array field.
    if (substr($name, -2) === '[]')
    {
        // If this field has been form2_error'd before, then increment the index, otherwise set to zero.
        $array_fields[$name] = ! isset($array_fields[$name]) ? 0 : $array_fields[$name] + 1;
        $name = substr($name, 0, -2) . '[' . $array_fields[$name]. ']';
    }
    return set_value($name);
}

これは、フォームに「さらに追加」ボタンがあり、予想される配列要素の数がわからない場合に特に便利です。

于 2014-08-13T13:43:15.317 に答える