這裏是我用來驗證生日(並填充的下拉菜單)一個精簡版。僅供參考我在這裏有一些你可能想要刪除的邏輯。
驗證規則:
$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>
此外FYI,$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'
);
我有一種感覺失去了一些東西。你的驗證規則在哪裏?如果至少將某種驗證規則應用於元素,'set_value()'通常不起作用。 – Brendan
@Brendan我剛加了他們。對不起,忘了把這些放在第一次。 – LightningWrist