2010-04-12 7 views
0

Je reçois un comportement étrange de la part de form_dropdown - fondamentalement, quand je recharge la page après validation, les valeurs sont foirées.form_dropdown dans CodeIgniter

Ce bit génère 3 avec les menus déroulants jours, mois et années:

$days = array(0 => 'Day...'); 
     for ($i = 1; $i <= 31; $i++) 
     { 
      $days[] = $i; 
     } 
     $months = array(0 => 'Month...',); 
     for ($i = 1; $i <= 12; $i++) 
     { 
      $months[] = $i; 
     } 
     $years = array(0 => 'Year...'); 
     for ($i = 2010; $i <= 2012; $i++) 
     { 
      $years[$i] = $i; 
      echo "<pre>"; print_r($years); echo "</pre>";//remove this 
     } 

     $selected_day = (isset($selected_day)) ? $selected_day : 0; 
     $selected_month = (isset($selected_month)) ? $selected_month : 0; 
     $selected_year = (isset($selected_year)) ? $selected_year : 0; 
     echo "<p>"; 
      echo form_label('Select date:', 'day', array('class' => 'left')); 
      echo form_dropdown('day', $days, $selected_day, 'class="combosmall"'); 
      echo form_dropdown('month', $months, $selected_month, 'class="combosmall"'); 
      echo form_dropdown('year', $years, $selected_year, 'class="combosmall"'); 
     echo "</p>"; 

... et génère ceci:

<p><label for="day" class="left">Select date:</label><select name="day" class="combosmall"> 
<option value="0" selected="selected">Day...</option> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
<option value="5">5</option> 
<option value="6">6</option> 
<option value="7">7</option> 
<option value="8">8</option> 
<option value="9">9</option> 
<option value="10">10</option> 
<option value="11">11</option> 
<option value="12">12</option> 
<option value="13">13</option> 
<option value="14">14</option> 
<option value="15">15</option> 
<option value="16">16</option> 
<option value="17">17</option> 
<option value="18">18</option> 
<option value="19">19</option> 
<option value="20">20</option> 
<option value="21">21</option> 
<option value="22">22</option> 
<option value="23">23</option> 
<option value="24">24</option> 
<option value="25">25</option> 
<option value="26">26</option> 
<option value="27">27</option> 
<option value="28">28</option> 
<option value="29">29</option> 
<option value="30">30</option> 
<option value="31">31</option> 
</select><select name="month" class="combosmall"> 
<option value="0" selected="selected">Month...</option> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
<option value="5">5</option> 
<option value="6">6</option> 
<option value="7">7</option> 
<option value="8">8</option> 
<option value="9">9</option> 
<option value="10">10</option> 
<option value="11">11</option> 
<option value="12">12</option> 
</select><select name="year" class="combosmall"> 
<option value="0" selected="selected">Year...</option> 
<option value="2010">2010</option> 
<option value="2011">2011</option> 
<option value="2012">2012</option> 
</select></p> 

Cependant, lorsque le formulaire est rechargé après validation, le même code ci-dessus génère ceci:

<!-- days and months... --> 
<select name="year" class="combosmall"> 
<option value="0" selected="selected">Year...</option> 
<option value="1">2010</option> 
<option value="2">2011</option> 
<option value="3">2012</option> 
</select> 

Donc, fondamentalement, la valeur commence à partir de 1 au lieu de 2010. Le sam Il arrive aux jours et aux mois mais évidemment cela ne fait aucune différence dans ce cas particulier puisque les valeurs partiraient de 1 de toute façon.

Comment puis-je résoudre ce problème - et pourquoi cela se produit-il?

modifier: règles de validation sont:

$this->load->library('form_validation'); 
//...rules for other fields.. 
$this->form_validation->set_rules('day', 'day', 'required|xss_clean'); 
$this->form_validation->set_rules('month', 'month', 'required|xss_clean'); 
$this->form_validation->set_rules('year', 'year', 'required|xss_clean');   
$this->form_validation->set_error_delimiters('<p class="error">', '</p>'); 
//define other errors 
if($this->input->post('day') == 0 || $this->input->post('month') == 0 || $this->input->post('year') == 0) 
    { 
     $data['error'] = "Please check the date of your event."; 
    } 
+0

Lorsque vous dites "recharger la page après validation", voulez-vous dire que vous l'exécutez dans la classe de validation de formulaire? Si oui, quelles règles de validation avez-vous définies? – musoNic80

+0

J'ai ajouté les règles de validation dans le message ci-dessus. – Patrick

Répondre

0

Je ne sais pas pourquoi cela se passe. Tout a l'air bien (même si vous n'avez probablement pas besoin de 'required' et de votre chèque défini par l'utilisateur!). Essayez peut-être d'utiliser une variable différente comme compteur pendant des jours, des semaines et des années. c'est à dire.

$days = array(0 => 'Day...'); 
    for ($d = 1; $d <= 31; $d++) 
    { 
     $days[] = $d; 
    } 
    $months = array(0 => 'Month...',); 
    for ($m = 1; $m <= 12; $m++) 
    { 
     $months[] = $m; 
    } 
    $years = array(0 => 'Year...'); 
    for ($y = 2010; $y <= 2012; $y++) 
    { 
     $years[$y] = $y; 
    } 

Je ne sais pas si cela va fonctionner ou pourquoi il devrait mieux que ce que vous avez, mais peut-être la peine d'essayer?!? Si cela ne fonctionne pas, placez chaque tableau dans var_dump() avant de l'envoyer à la méthode form_dropdown pour voir si quelque chose ne va pas dans la génération du tableau ou si quelque chose devient bizarre dans la fonction d'assistance. Bien sûr, ce ne serait pas beaucoup de travail supplémentaire pour le coder en PHP pur plutôt que d'utiliser l'assistant! ;-)

+0

J'ai changé les variables et maintenant ça marche. Cependant, je ne pense pas que cela l'ait résolu, car pendant un certain temps il continuait à produire des erreurs même si j'avais modifié et enregistré le fichier. Probablement le fichier a été mis en cache ou n'a pas été mis à jour pour une raison quelconque, et était peut-être encore en train de 'charger' une version précédente dans laquelle j'ai eu une faute de frappe: $ last [] = $ y Very WEIRD de toute façon! Gardez un oeil dessus – Patrick

+0

Oui, assurez-vous de ne pas recharger la page à partir d'une version en cache ou ancienne version. Les doigts croisés sont résolus maintenant. Ne pas oublier d'accepter ma réponse s'il s'avère avoir aidé! – musoNic80