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 :
$autoload['libraries'] = array('form_validation');
$this->load->library('form_validation');
Créer le formulaire myForm.php dans application/views/
<html> <head> <title>My Form</title> </head> <body> <?php echo validation_errors(); ?> <?php echo form_open('form'); ?> <h5>Nom d'utilisateur</h5> <input type="text" name="username" value="" size="50" /> <h5>Mot de passe</h5> <input type="text" name="password" value="" size="50" /> <h5>Confirmation de mot de passe</h5> <input type="text" name="passconf" value="" size="50" /> <h5>Adresse email</h5> <input type="text" name="email" value="" size="50" /> <div><input type="submit" value="Submit" /></div> </form> </body> </html>
Le formulaire à afficher en cas de succès :
<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>
Créer un contrôleur pour accéder et contrôler la vue :
<?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'); } } } ?>
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.
Avec ajout de règles de validation, la validation du formulaire fonctionne complétement.
<?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'); } } } ?>
Remplacer les règles précédentes par :
$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');
Le contrôle inclut cette fois une transformation de la valeur des champs avant validation :
<?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; } } } ?>
On utilise set_value('nomChamp') pour afficher à nouveau la valeur de chacun des champs (excepté sur les mots de passe).
<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>