| 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:14] – [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> |
| |
| </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> |