0

検証が失敗してページがリロードされたときに、CodeIgniter で誕生日のドロップダウン ヘルパーを再設定する方法がわかりません。使用しようとしてset_value('field_name')います 3 つの要素が関係しているため、他のドロップダウンよりも少し複雑です。

私のコードはここで入手できます

前もって感謝します

ここに検証ルールがあります

$this->form_validation->set_rules('relation', 'Relation', 'trim|required');
$this->form_validation->set_rules('location', 'Location', 'trim|required');
$this->form_validation->set_rules('city', 'City', 'trim|required');
$this->form_validation->set_rules($birthdate, 'Birthday', 'trim|required');
$this->form_validation->set_rules('gender', 'Gender', 'trim|required');
4

2 に答える 2

2

これは、生年月日の検証 (およびドロップダウンの再入力) に使用するものを簡略化したものです。参考までに、ここにはいくつかのロジックがあります。削除した方がよいかもしれません。

検証規則:

$this->form_validation->set_rule('birthdate-month','Birthdate Month','required|is_natural_no_zero|greater_than[0]|less_than[13]');
$this->form_validation->set_rule('birthdate-day','Birthdate Day','required|is_natural_no_zero|greater_than[0]|less_than[32]');
$this->form_validation->set_rule('birthdate-year','Birthdate Year','required|is_natural_no_zero|greater_than[1930]|less_than['.(date("Y") - 18).']');

コントローラ:

if ($this->form_validation->run()) {
    $birthdate = array(
        $this->form_validation->set_value('birthdate-year'),
        $this->form_validation->set_value('birthdate-month'),
        $this->form_validation->set_value('birthdate-day')
    );

    $data = array(
        'birthdate' => implode("-", $birthdate)
    );
}

// Then pass $data to your model and do whatever you want, i.e.:
$this->user_model->update_user($data);

次に、ビュー内の PHP/HTML:

<select name="birthdate-month" id="birthdate-month">
    <option value=""></option>
    <?php foreach($months as $month_number => $month_name) { ?>
    <option value="<?php echo $month_number; ?>" <?php echo set_select('birthdate-month', $month_number); ?>><?php echo $month_name; ?></option>
    <?php } ?>
</select>

<select name="birthdate-day" id="birthdate-day">
    <option value=""></option>
    <?php for($i=1; $i<=31; $i++) { ?>
    <option value="<?php echo $i; ?>" <?php echo set_select('birthdate-day', $i); ?>><?php echo $i; ?></option>
    <?php } ?>
</select>

<select name="birthdate-year" id="birthdate-year">
    <option value=""></option>
    <?php for($i=(date("Y") - 18); $i>=1930; $i--) { ?>
    <option value="<?php echo $i; ?>" <?php echo set_select('birthdate-year', $i); ?>><?php echo $i; ?></option>
    <?php } ?>
</select>

参考まで$monthsに、配列です:

array(
    '01' => 'January',
    '02' => 'February',
    '03' => 'March',
    '04' => 'April',
    '05' => 'May',
    '06' => 'June',
    '07' => 'July',
    '08' => 'August',
    '09' => 'September',
    '10' => 'October',
    '11' => 'November',
    '12' => 'December'
);
于 2013-01-18T01:49:41.617 に答える
1

ドキュメントには次のように記載されています。

set_select()

メニューを使用している場合、この機能を使用すると、選択したメニュー項目を表示できます。最初のパラメータには選択メニューの名前が含まれている必要があり、2 番目のパラメータには各項目の値が含まれている必要があり、3 番目 (オプション) のパラメータでは項目をデフォルトとして設定できます (ブール値の TRUE/FALSE を使用)。

例:

<select name="myselect">
<option value="one" <?php echo set_select('myselect', 'one', TRUE); ?> >One</option>
<option value="two" <?php echo set_select('myselect', 'two'); ?> >Two</option>
<option value="three" <?php echo set_select('myselect', 'three'); ?> >Three</option>
</select>
于 2013-01-18T01:32:51.077 に答える