Bonjour je galère depuis plusieurs jours et je ne parviens toujours pas à creer/gerer les erreurs/enregistrer un formulaire multilignes.
Mon formulaire est par exemple :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| <form name="formDataManager" id="formDataManager" method="post" action="/app/backoffice/users/modifier">
<div id="main">
<table style="width:100%;" cellpadding="0" cellspacing="0" class="list" id="toolbox">
<thead>
<tr>
<th class="center" title="RmContactId">
Identifiant Utilisateur
</th>
<th class="center">
Nom d'utilisateur
</th>
<th class="center">
Mot de passe
</th>
<th class="center">
Confirmation du mot de passe
</th>
<th class="center">
Profil
</th>
</tr>
</thead>
<tbody>
<tr class="row1">
<td class="center">
<img src="/app/backoffice/html/images/bt-RmCivility.png"><br>
<input type="hidden" name="id_utilisateur[1]" value="1">
1
</td>
<td class="center"><input type="text" name="login[1]" value="sebastien"></td>
<td class="center"><input type="text" name="password[1]" value=""></td>
<td class="center"><input type="text" name="password_verif[1]" value=""></td>
<td class="center">
<select name="profil[1]" id="profil-1">
<option value="admin" label="admin" selected="selected">admin</option>
<option value="user" label="user">user</option>
</select>
</td>
</tr>
<tr class="row1">
<td class="center">
<img src="/app/backoffice/html/images/bt-RmCivility.png"><br>
<input type="hidden" name="id_utilisateur[2]" value="2">
2
</td>
<td class="center"><input type="text" name="login[2]" value="test"></td>
<td class="center"><input type="text" name="password[2]" value=""></td>
<td class="center"><input type="text" name="password_verif[2]" value=""></td>
<td class="center">
<select name="profil[2]" id="profil-2">
<option value="admin" label="admin">admin</option>
<option value="user" label="user">user</option>
</select>
</td>
</tr>
<tr>
<td colspan=5>
<input type="submit" name="valider" value="Valider" title="Valider les enregistrements sélectionnés.">
</td>
</tr>
</tbody>
</table>
</div>
</form> |
Je recois donc en post :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Array
(
[order] =>
[ordertype] =>
[page] =>
[nb_par_page] =>
[id_utilisateur] => Array
(
[1] => 1
[2] => 2
)
[login] => Array
(
[1] => sebastien
[2] =>
)
[password] => Array
(
[1] =>
[2] =>
)
[password_verif] => Array
(
[1] =>
[2] =>
)
[profil] => Array
(
[1] => admin
[2] => admin
)
[valider] => Valider
) |
Avec Zend_input_filter j'ai aucun moyen de savoir quel enregistrement est faux, par exemple si je fais une erreur sur le login, je vais obtenir :
Code :
1 2 3 4 5 6 7 8
| Array
(
[login] => Array
(
[stringLengthTooShort] => Le champ "Nom d'utilisateur" doit faire entre 5 et 20 caractères.
)
) |
Aucune indication de quel ligne proviens l'erreur !
Mon code de validation :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| $formData = $this->_request->getPost();
//Définition des filtres et critères de validation
$filters = array(
'login' => array('StringTrim','StripTags','StringToLower'),
'password' => array('StringTrim','StripTags','StringToLower'),
'password_verif' => array('StringTrim','StripTags','StringToLower')
);
$validators = array(
"login" =>array('allowEmpty' => false,
new Zend_Validate_StringLength(5,20),
'messages' => array(sprintf($this->view->_('Champ "%3$s" entre %1$d et %2$d caractères'),5,20,$this->view->_('login')))
),
"password" =>array('allowEmpty' => true,
'alnum',
'messages'=> sprintf($this->view->_('Champ "%1$s" doit être alphanumérique'),$this->view->_('password'))
),
"password_verif"=>array('allowEmpty' => true,
'alnum',
'messages'=> sprintf($this->view->_('Champ "%1$s" doit être alphanumérique'),$this->view->_('password_confirm')))
);
$options = array(
'notEmptyMessage' => $this->view->_("Empty '%field%'"),
'missingMessage' => $this->view->_("Empty '%field%'")
);
$box = new Zend_Filter_Input($filters,$validators);
$box->setOptions($options);
$box->setData($formData);
//Vérification du formulaire
if ($box->isValid()) |
Bref, de même avec Zend_form, je ne parviens pas à creer de formulaire multiligne avec des tableaux en nom d'input (id_utilisateur[], profil[])
Si quelqu'un a une solution cela m'aiderait beaucoup, car je trouve plus rien à faire que de ne pas utiliser Zend_form et zend_input_filter