2016-04-27 38 views
0

工作,我拿起一箇舊CI項目,並遷移到3.0.6大部分的東西都是現在是穩定的,除了從那裏less_thangreater_than已經使用驗證規則。笨LESS_THAN和GREATER_THAN驗證不隨時間

這裏是非驗證件的規則(其他規則工作正常):

$this->form_validation->set_rules('start', 'Start time', 'required|less_than[end]'); 
$this->form_validation->set_rules('end', 'End time', 'required|greater_than[start]'); 

這裏是時間下拉菜單是如何生成的:

echo form_dropdown('start', $start_end_options, $start); 
echo form_dropdown('end', $start_end_options, $end); 

這裏是生成的HTML:

<select name="start"> 
<option value="00:00:00">00:00<option> 
<option value="00:15:00">00:15<option> 
<option value="00:30:00">00:30<option> 
<option value="00:45:00">00:45<option> 
<option value="01:00:00">01:00<option> 
...code omitted... 
</select> 

<select name="end"> 
<option value="00:00:00">00:00<option> 
<option value="00:15:00">00:15<option> 
<option value="00:30:00">00:30<option> 
<option value="00:45:00">00:45<option> 
<option value="01:00:00">01:00<option> 
...code omitted... 
</select> 

這裏可能會出現什麼問題?

任何幫助或指導,非常感謝。

回答

1

問題是驗證例程(less_thangreater_than)期望一個數字或數字字符串。在值字符串中使用冒號(:)時,它們不是數字字符串。

如果您使用value的時間戳,則需要驗證例程。

使用函數strtotime("time_sting")轉換爲時間戳。

strtotime("00:00:00")回報1461733200.

下面是值的時間戳在你的問題

"00:00:00" = 1461733200 
"00:15:00" = 1461734100 
"00:30:00" = 1461735000 
"00:45:00" = 1461735900 
"01:00:00" = 1461736800 

<select>

<select name="start"> 
    <option value="1461733200">00:00<option> 
    <option value="1461734100">00:15<option> 
    <option value="1461735000">00:30<option> 
    <option value="1461735900">00:45<option> 
    <option value="1461736800">01:00<option> 
</select> 

less_thangreater_than用於將上述工作。

您也可以編寫自己的驗證方法來處理帶有冒號的value字符串。

public function timestring_less_than($str, $max) 
    { 
    return strcmp($str, $max) < 0 ? TRUE : FALSE; 
    } 

如果字符串相等,上面還會返回FALSE

可以很容易地定義補充驗證方法。

public function timestring_greater_than($str, $max) 
    { 
    return strcmp($str, $max) > 0 ? TRUE : FALSE; 
    } 
+0

謝謝你的詳細答案,我會試試。但是,爲什麼它在舊版本2.1中按預期工作? – WpDoe