Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
slam4:php:codeigniter:validation [2012/12/08 21:13] – [Formulaire] jcheron | slam4:php:codeigniter:validation [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 |
---|
====== Validation des formulaires ====== | ====== Validation des formulaires ====== |
| |
<html><div class="btn"><a href="/doku.php?id=slam4:php:codeigniter:session" class="wikilink1" title="Bibliothèque session"><< Sessions</a></div></html><html><div class="btn"><a href="/doku.php?id=slam4:php:codeigniter:database" class="wikilink1" title="Bibliothèque database">Bibliothèque database >></a></div></html> | <html><div class="btn"><a href="/doku.php?id=slam4:php:codeigniter:session" class="wikilink1" title="Bibliothèque session"><< Sessions</a></div></html><html><div class="btn"><a href="/doku.php?id=slam4:php:codeigniter:orm" class="wikilink1" title="ORM">ORM IgnitedRecord >></a></div></html> |
| |
| - [[slam4:php:codeigniter|Introduction à CodeIgniter]] |
| - [[slam4:php:codeigniter:helpers|Helpers]] |
| - [[slam4:php:codeigniter:libraries|Bibliothèques]] |
| - [[slam4:php:codeigniter:session|Sessions CodeIgniter]] |
| - Validation des formulaires |
| - [[slam4:php:codeigniter:orm|ORM IgnitedRecord]] |
| - [[slam4:php:codeigniter:doctrine|Doctrine]] |
| - [[slam4:php:codeigniter:javascript|Javascript et codeIgniter]] |
| |
* [[http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html| Aide codeIgniter sur la librairie form_validation]] | * [[http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html| Aide codeIgniter sur la librairie form_validation]] |
| |
La bibliothèque **form_validation** doit être chargée : | La bibliothèque **form_validation** prend en charge le contrôle et la validation des formulaires, et l'affichage de messages d'erreur.\\ |
| **form_validation** doit être chargée : |
* soit automatiquement avec autoload.php : | * soit automatiquement avec autoload.php : |
| |
* Soit dans le code d'un contrôleur par exemple : | * Soit dans le code d'un contrôleur par exemple : |
<code php> | <code php> |
$this->load->library('session'); | $this->load->library('form_validation'); |
</code> | </code> |
| |
<?php echo form_open('form'); ?> | <?php echo form_open('form'); ?> |
| |
<h5>Username</h5> | <h5>Nom d'utilisateur</h5> |
<input type="text" name="username" value="" size="50" /> | <input type="text" name="username" value="" size="50" /> |
| |
<h5>Password</h5> | <h5>Mot de passe</h5> |
<input type="text" name="password" value="" size="50" /> | <input type="text" name="password" value="" size="50" /> |
| |
<h5>Password Confirm</h5> | <h5>Confirmation de mot de passe</h5> |
<input type="text" name="passconf" value="" size="50" /> | <input type="text" name="passconf" value="" size="50" /> |
| |
<h5>Email Address</h5> | <h5>Adresse email</h5> |
<input type="text" name="email" value="" size="50" /> | <input type="text" name="email" value="" size="50" /> |
| |
</code> | </code> |
| |
| Le formulaire à afficher en cas de succès : |
| <code php |h application/views/formSuccess.php> |
| <html> |
| <head> |
| <title>My Form</title> |
| </head> |
| <body> |
| |
| <h3>Le formulaire a été correctement soumis !</h3> |
| |
| <p><?php echo anchor('form', 'Essayer à nouveau'); ?></p> |
| |
| </body> |
| </html> |
| </code> |
| |
| Créer un contrôleur pour accéder et contrôler la vue : |
| |
| <code php |h application/controllers/form.php> |
| <?php |
| |
| class Form extends CI_Controller { |
| |
| function index() |
| { |
| $this->load->helper(array('form', 'url')); |
| |
| $this->load->library('form_validation'); |
| |
| if ($this->form_validation->run() == FALSE) |
| { |
| $this->load->view('myform'); |
| } |
| else |
| { |
| $this->load->view('formsuccess'); |
| } |
| } |
| } |
| ?> |
| </code> |
| |
| |
| |
| Accéder à l'url : http://localhost/testPhp/form/ pour tester le formulaire. Pour l'instant, en l'absence de règles de validation, la soumission du formulaire retourne toujours false et affiche à nouveau le formulaire. |
| |
| ==== Ajout de règles de validation ==== |
| Avec ajout de règles de validation, la validation du formulaire fonctionne complétement. |
| |
| <code php> |
| <?php |
| class Form extends CI_Controller { |
| |
| function index() |
| { |
| $this->load->helper(array('form', 'url')); |
| |
| $this->load->library('form_validation'); |
| |
| $this->form_validation->set_rules('username', 'Nom d\'utilisateur', 'required'); |
| $this->form_validation->set_rules('password', 'Mot de passe', 'required'); |
| $this->form_validation->set_rules('passconf', 'Confirmation de mot de passe', 'required'); |
| $this->form_validation->set_rules('email', 'Email', 'required'); |
| if ($this->form_validation->run() == FALSE) |
| { |
| $this->load->view('myform'); |
| } |
| else |
| { |
| $this->load->view('formsuccess'); |
| } |
| } |
| } |
| ?> |
| </code> |
| ==== Ajout de règles en cascade ==== |
| Remplacer les règles précédentes par : |
| <code php> |
| $this->form_validation->set_rules('username', 'Nom d''utilisateur', 'trim|required|min_length[5]|max_length[12]|xss_clean'); |
| $this->form_validation->set_rules('password', 'Mot de passe', 'trim|required|matches[passconf]|md5'); |
| $this->form_validation->set_rules('passconf', 'Confirmation', 'trim|required'); |
| $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email'); |
| </code> |
| |
| Le contrôle inclut cette fois une transformation de la valeur des champs avant validation : |
| * trim supprime les espaces avant et après |
| * md5 crypte en md5 |
| * xss_clean supprime tous les éléments susceptibles de permettre une attaque xss (Cross Site Scripting) |
| |
| ==== Ajout d'une fonction de validation utilisateur ==== |
| |
| <code php |h form.php> |
| <?php |
| |
| class Form extends CI_Controller { |
| |
| public function index() |
| { |
| $this->load->helper(array('form', 'url')); |
| |
| $this->load->library('form_validation'); |
| |
| $this->form_validation->set_rules('username', 'Nom d''utilisateur', 'callback_username_check'); |
| $this->form_validation->set_rules('password', 'Mot de passe', 'required'); |
| $this->form_validation->set_rules('passconf', 'Confirmation', 'required'); |
| $this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]'); |
| |
| if ($this->form_validation->run() == FALSE) |
| { |
| $this->load->view('myform'); |
| } |
| else |
| { |
| $this->load->view('formsuccess'); |
| } |
| } |
| |
| public function username_check($str) |
| { |
| if ($str == 'test') |
| { |
| $this->form_validation->set_message('username_check', 'Le champ %s ne peut pas être égal à "test"'); |
| return FALSE; |
| } |
| else |
| { |
| return TRUE; |
| } |
| } |
| |
| } |
| ?> |
| </code> |
| |
| ==== Affichage des valeur après échec de validation ==== |
| On utilise **set_value('nomChamp')** pour afficher à nouveau la valeur de chacun des champs (excepté sur les mots de passe). |
| |
| <code html |h myForm.php> |
| <html> |
| <head> |
| <title>My Form</title> |
| </head> |
| <body> |
| |
| <?php echo validation_errors(); ?> |
| |
| <?php echo form_open('form'); ?> |
| |
| <h5>Username</h5> |
| <input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /> |
| |
| <h5>Password</h5> |
| <input type="password" name="password" value="" size="50" /> |
| |
| <h5>Password Confirm</h5> |
| <input type="password" name="passconf" value="" size="50" /> |
| |
| <h5>Email Address</h5> |
| <input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" /> |
| |
| <div><input type="submit" value="Submit" /></div> |
| |
| </form> |
| |
| </body> |
| </html> |
| </code> |
| |
| <html><div class="btn"><a href="/doku.php?id=slam4:php:codeigniter:session" class="wikilink1" title="Bibliothèque session"><< Sessions</a></div></html><html><div class="btn"><a href="/doku.php?id=slam4:php:codeigniter:orm" class="wikilink1" title="ORM">ORM IgnitedRecord >></a></div></html> |