Blogdevphp

Codeigniter : Validation de formulaire

2013-11-23 codeigniter

Réaliser un formulaire peut être fastidieux, on doit être vigilant quant à la récupération des données. Le framework met à notre disposition des méthodes afin de contrôler ces informations.

Cela va garantir l'intégrité, de notre base de donnée, en veillant au bon format des données saisies.

De plus, on va se prémunir des dangers que représentent les failles XSS, de scripts malicieux.

Mise en route

Avant de créer notre formulaire, nous devons charger la librairie 'form_validation' et le helper 'form'.

Soit, dans le fichier autoload.php dans le dossier config :

<?php
  /***/
  $autoload['libraries'] = array('form_validation');
  /***/
  $autoload['helper'] = array('form');
?>

Soit en l'appelant directement dans votre contrôleur, à l'intérieur de votre fonction :

<?php
     
  //chargement de la librairie pour la validation du formulaire
  $this->load->library('form_validation');
  //chargement du helper form
  $this->load->helper('form');
     
?>

La vue

- La balise form

Vous avez l'habitude de créer vos formulaires avec la balise form de cette façon :

<form accept-charset="utf-8"  method="post" action="form/valid_form">
</form>

Grâce au helper 'form', on va procéder de cette manière :

<?php 
  echo form_open('form/valid_form');
  echo form_close();
?>

- Les balises input et label

Afin de déclarer, notre label en HTML, vous la connaissez aussi sûrement :

<label for="nom">Votre nom<"label>

On va faire la même chose, sous Codeigniter, d'une manière différente :

<?php
  echo form_label('Votre nom', 'nom');
?>

Vous pouvez utiliser, à la place de la balise label, l'attribut placeholder, selon ce que vous préférez.

Passons, maintenant, à la balise input :

<input name="nom" type="text" value="" />

Avec le helper, notre input sera déclarée sous la forme d'un tableau :

<?php

$nom= array(

'name'=>'nom',

'id'=>'nom',

'placeholder'=>'Nom',

'value'=>set_value('nom')

);

?>

Une petite explication pour set_value ! En cas d'erreur, à la validation du formulaire, si le champs était rempli, la saisie de l'utilisateur sera toujours présente.

 

- Affichage des erreurs

Lors de la validation du formulaire, il est souhaitable, même requis, d'afficher les erreurs pour l'utilisateur.

Pour cela, pour chaque input, nous allons utiliser la méthode form_error avec en paramètre, la propriété name :

<?php
  echo form_error('nom');
?>

Si nous voulons valider, les informations saisis par l'utilisateur, plaçons notre bouton de soumission. En HTML, cela donne :

<input name="envoi" type="submit" value="Valider"/><

Vous avez déjà deviné qu'on va la déclarer, d'une autre manière, c'est en effet le cas :

<?php
  echo form_submit('envoi', 'Valider');
?>

Nous allons, après tout cela, ajouter cette fonction afin de fermer notre formulaire :

<?php
  echo form_close();
?>

En possession, de tous ces éléments, notre formulaire, sous Codeigniter ressemble à ça :

<?php

    echo form_open('form/valid_form');

      $nom= array(

        'name'=>'nom',

        'id'=>'nom',

        'placeholder'=>'Nom',

        'value'=>set_value('nom')

      );
      echo form_input($nom);
      $prenom= array(

        'name'=>'prenom',

        'id'=>'prenom',

        'placeholder'=>'Prenom',

        'value'=>set_value('prenom')

      );
      echo form_input($prenom);
      $mail= array(

        'name'=>'mail',

        'id'=>'mail',

        'placeholder'=>'Email',

        'value'=>set_value('mail')

      );
      echo form_input($mail);
    echo form_submit('envoi', 'Valider');

    echo form_close();

?>

Le contrôleur

Rappelez-vous, nous avons chargé la méthode 'form_validation''. Elle va nous permettre de contrôler ce que l'utilisateur a saisi, selon des critères bien précis.

Appliquons, nos règles de validation, sur notre formulaire :

<?php

  public function ajout_utilisateur() {
  
  /**Chargement des méthodes si déclarées dans le contrôleur**/

  $this->form_validation->set_rules('nom', '"Le Nom"', 'trim|required|xss_clean');

  $this->form_validation->set_rules('prenom', '"Le prénom"', 'trim|required|xss_clean');

  $this->form_validation->set_rules('mail', '"Le mail"', 'trim|required|valid_email|is_unique[users.email]|xss_clean');

}

?>

Si vous le voyez bien, ici, nous reprenons les champs que nous avons déclarer, dans notre formulaire. La méthode set_rules contient trois paramètres :

- Le champ name

- Cette valeur sera utilisée dans l'affichage de l'erreur, pour l'indication du ou des champs posant problème.

- Les règles de validation qu'on applique sur notre champ.

Voyons d'un peu plus près ces règles de validation!

Nous avons utilisé 'trim' qui va supprimer, tout ce qui peut y avoir en début et fin de chaîne, 'required' afin de rendre obligatoire la saisie dans le champ, 'xss_clean' contre le cross-site scripting.

Pour l'adresse e-mail, il existe une règle de validation 'valid_email' pour s'asurer du bon format de celle-ci. Mais aussi, 'is_unique'', afin de s'assurer de n'avoir pas de doublons dans la base de données.

Petite particularité pour cette règle, on doit mettre en paramètre, la colonne concernée de notre table pour le contrôle d'unicité. Si votre table est user avec en son sein, la colonne mail, cela donnera is_unique[user.mail].

Pour avoir une liste, plus exhaustive, de ces règles à soumettre sur vos champs, faites un tour sur la documentation officielle de Codeigniter.

Il faut penser à émettre une condition, s'il y a des erreurs dans la soumission de notre formulaire, si c'est le cas contraire, à rediriger l'utilisateur. On va compléter notre méhode ajout_utilisateur :

<?php

  if ($this->form_validation->run() == false) {

      $this->load->view('user/form_ajout_utilisateur');

    }else {

      $this->load->view('user/compte_utilisateur');

    }

?>

En cas d'erreurs, dans la soumission du formulaire, celles-ci seront affichées, dans le cas contraire, la redirection se fera sur le compte nouvellement crée de l'utilisateur.

Conclusion

Je ne vous ai montré qu'une partie de ce qu'on peut faire par rapport aux formulaires. Il est aussi possible de créer ses propres règles de validation, utiliser un fichier de langue pour l'affichage des erreurs...

Pour en savoir plus, c'est par ici.

comments powered by Disqus
Copyright © 2018 blogdevphp.fr - Tous droits réservés