0

ユーザーがフォームに値を入力して直接送信するか、フィールド値をテンプレートに保存して後で送信できる小さなサイトがあります。後でフォームを送信するために、彼は以前に保存したテンプレートをロードできます。そのために、テンプレートのロード/テンプレートの保存/フォームの送信の3つのボタンがあります。

Codeigniterのフォーム検証組み込み機能を使用しているため、以前に保存されたテンプレートをフォームに入力したいときに問題が発生します。

フォームフィールドはすべて次のように設定されます

$name = array(
'name'  => 'name',
'id'    => 'name',
'value' => set_value('name', $form_field_values['name'])
);

変数$form_field_valuesは、テンプレートがロードされた場合のロードされたテンプレートの値、またはフォームが最初にロードされたときのデフォルト値のいずれかからの値を保持します。

最初に、フォームはデフォルト値でロードされます。[テンプレートのロード]をクリックするとset_value()、以前はデフォルト値があったため、テンプレートの値は選択されません。私が欲しいのは、フォームフィールドの値をテンプレートの値に置き換えることです

クリーンなアプローチでそれを行う方法を知っていますか?私がやったことは、呼び出しをスキップしてset_value()完全に好きになる変数を導入することです:

$name= array(
'name'  => 'name',
'id'    => 'name',
'value' => $skip_form_validation ? $form_field_values['name'] : set_value('name', $form_field_values['name'])
);

$skip_form_validation押されたボタンに基づいて、コントローラーに設定された変数はどこにありますか。テンプレートを保存/ロードするために、フォームの検証はスキップされます。

4

2 に答える 2

1

Codeigniterのset_value()関数は、$ _ POSTで値を検索し、値が見つかった場合はreturn、それ以外の場合は2番目の引数を返す単純な関数です。set_value()を削除して、独自のコードを記述できます。POSTデータの値を入力する場合、または追加する値を追加する場合は、$ _POST['field_name']と記述できます。次のように使用します。

$name = array(
    'name'  => 'name',
    'id'    => 'name',
    'value' => $valueFromYourTemplate
);

フォームにPOST値を設定したくない場合は、set_value()関数を使用する必要はありません。

于 2012-11-24T12:36:35.477 に答える
0

データベースフィールドを取得して、コントローラーのデータ配列に渡すと仮定します。

$record = $this->data_model->get_record(array('uid' => $user_id), 'users');

if (!is_null($record)) {

   $data['uname'] = $record->username;

   $data['loc'] = $record->location;
}

ここで、「users」はデータベーステーブルであり、uidはテーブルusersのidフィールドです。

あなたのフォームで、このようなことをしてください

それが役に立てば幸い!

于 2013-04-03T20:54:22.803 に答える