TUTORIELS 
PHP: Construire un sondage

Page 1 | 2 | 3

Construction et description étape par étape de toutes les briques nécessaires à la conception d'une application de type "QCM".
 (7 janvier 2004)
 
Forums
* Discutez en sur les forums
Voici une application de gestion de sondages, qui permet de présenter une question et un certain nombre de réponses possibles au visiteur, et lorsque celui-ci a sélectionné une réponse, d'afficher une mise à jour des statistiques des réponses. Notre script présente le minimum pour ce type d'application PHP (il manque par exemple un système permettant d'éviter qu'un visiteur puisse voter plusieurs fois), mais nous permet d'aborder certains points intéressants, comme la sérialisation des données ou l'utilisation de fichiers pour leur stockage.

Présentation
Notre sondage se résume donc à deux interfaces : un formulaire présentant le QCM, et les statistiques. Voici leurs aspects HTML :

Que se passe-t-il ?
Je ne sais pas.
Je ne vous le dirais pas.
Bon sang!

Que se passe-t-il ?
0% : Je ne sais pas. (0 vote(s) )
0% : Je ne vous le dirais pas. (0 vote(s) )
100% : Bon sang! (1 vote(s) )
Nombre de votes : 1.

Voici la construction du formulaire :

<form name="formulaire" method="get" action="<?=$_SERVER['PHP_SELF'];?>">
  <b>Que se passe-t-il ?</b><br>
  <input type="radio" name="choix" value="0">Je ne sais pas.<br>
  <input type="radio" name="choix" value="1">Je ne vous le dirais pas.<br>
  <input type="radio" name="choix" value="2">Bon sang!<br>
</form>

Notre formulaire ne comprend sciemment pas de bouton de validation : le formulaire est automatiquement envoyé lorsque l'utilisateur sélectionne un des boutons-radio. Pour ce faire, nous faisons appel à JavaScript, en appliquant à chaque occurrence de bouton un appel précis :

<input type="radio" name="choix" value="0" onClick="document.formulaire.submit();">Je ne sais pas.<br>

Pour s'assurer que le formulaire est correctement validé, nous introduisons un champ invisible dans celui-ci, que nous testerons par la suite :

<input type="hidden" name="vote-fait" value="ok">

Le coeur du sondage
Nous devons décider comme gérer nos données. Parce que nous voulons pouvoir facilement changer de sondage, il faut absolument éviter d'écrire ses éléments "en dur" dans le code HTML. Nous allons ici les enregistrer dans un tableau $vote[], qui contiendra à la fois la question, les réponses possibles, et le nombre de votes pour chaque question.
Ecrit en PHP, notre tableau prendra cette forme :

$vote['question'] = "Que se passe-t-il ?";
$vote['reponse'][0] = "Je ne sais pas.";
$vote['reponse'][1] = "Je ne vous le dirais pas.";
$vote['reponse'][2] = "Bon sang!";
$vote['vote'][0] = "0";
$vote['vote'][2] = "0";
$vote['vote'][2] = "0";

De cette manière, nous pourrons facilement nous déplacer au sein de notre tableau. Notez que les chiffres (en gras) peuvent être omis, PHP se chargeant d'assigner une position au fur et à mesure que le tableau est rempli. Cela facilite d'autant plus l'ajout d'autres réponses...

Ensuite, nous voulons stocker ces données. Que ce soit dans un fichier ou dans une base de données, le problème est le même : il est hors de question d'écrire le morceau de code "constructeur" de notre tableau, ci-dessus, directement dans le fichier externe. Nous ferons ici appel à la sérialisation, un processus permettant de convertir des variables en chaînes de caractère. Les données deviennent ainsi faciles à stocker, ou à transférer au travers du réseau. PHP propose donc la fonction serialize() pour ici transformer notre tableau multidimensionnel en chaîne, et unserialize() pour faire la transformation inverse.
La sérialisation nous servira donc à chaque fois que nous lirons ou écrirons nos données dans notre fichier...

Page 1 | 2 | 3

 

 
[ Xavier BorderieJDNet
 
Accueil | Haut de page