Un système de sondage pour votre site (a adapter au votre)

Contenu du snippet

Bon, comme d'habitude, je vous propose ce script car sur internet on ne trouve jamais EXACTEMENT le script qu'il nous faut ...
Ce script n'est pas entier, il est là juste pour vous donner une idée du fonctionnement d'un système de vote/sondage et aussi pour vous poussez à créer le votre ...

Quoi ? Quoi ? Non, non, non, ne fermez pas la fenêtre et lisez attentivement ce qui suit, c'est pour votre bien petit flemmard ...

Pour un système de vote / sondage ( c la même chose, la même mer** diront certains ...), il vous faut une table mysql ou un fichier texte ou enregistrer les infos (Nous choisirons MYSQL) ...

Il vous faut ensuite un champs ID (pid dans mon script), en effet, ce champs servira à repérer votre sondage parmis tout les autres que vous allez prendre un plaisir à faire petit vénard :p
Il vous faut un champs TITRE qui est facultatif pour donner un titre au sondage.
Il vous faut un champs TEXTE, c'est le champs primordial, celui où vous mettez votre question ...
Il vous faut un champs FIELDS, vous répertorierez ici les choix de votre sondage séparés par un point virgule ';', c'est là la chose la plus interessante de ce script : Apprendre à utiliser IMPLODE et EXPLODE ...
Ne fuyez pas je vous prie, ce n'est pas fini.
Il vous faudra aussi un champs RESULTS, vous y mettrez les résultats du sondage.
FNALEMENT, si vous êtes motivé, vous pouvez songer éventuellement à la potencielle possibilité d'ajouter un champ DATE et un champs OK ...

Maintenant, la chose la plus importante, la réponse à la question (que vous vous posez, j'en suis sûr :p), "Que fait on de tout ce basard ?".

Ce basard va vous aider à comprendre mon script (je l'ai tapé pour vous, pour vous éviter d'éventuelles crampes des doigts qui me mèneront en justice :p)

Source / Exemple :


<? 
// S y s t è m e  d e  v o t e  :

// S t r u c t u r e   d e   l a   t a b l e   ` n e _ v o t e s `
/*
CREATE TABLE `ne_votes` (
  `pid` int(9) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL default '',
  `text` varchar(255) NOT NULL default '',
  `fields` text NOT NULL,
  `results` text NOT NULL,
  `datei` datetime NOT NULL default '0000-00-00 00:00:00',
  `ok` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`pid`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

  • /
// P r é s e n t a t i o n d e s c h a m p s d e ` n e _ v o t e s ` # pid => pool's id # title => pool's title # text => pool's question # fields => pool's fields # results => pool's results # date => Date of the day # ok => the pool is actived //O p t i m i s é p o u r u n s y s t è m e d o n t l e s v a r i a b l e s g l o b a l e s s o n t à O F F $votes = 'ne_votes'; if(!isset($_GET['op'])){$_GET['op']="";} if(!isset($_GET['part'])){$_GET['part']="";} mysql_select_db("netwaka emulation", mysql_connect("localhost", "root", "")); switch($_GET['op']) { default: echo 'Affichage du sondage et<br>des résultats :'; $req = mysql_fetch_array(mysql_query('SELECT * FROM `'.$votes.'` WHERE `ok`="1" ORDER BY `pid` DESC')); if(is_array($req)) { $fields = explode(';', $req['fields']); $results = explode(';', $req['results']); unset($results[''],$fields['']); echo '<hr width="150" align="left">'; echo $req['title']; echo '<br>'; echo $req['text']; echo '<br>'; echo '<br>'; $answers = array_sum($results); for($i=0; $i<count($fields); $i++) { if($answers!=0) { $percents = (($results[$i]/$answers)*100); } else { $percents = "1"; } $percents = floor($percents); echo $fields[$i].' ('.$percents.' %)'; echo '<br>'; echo '<table border="0" width="100" bgcolor="#CCCCCC" height="15" cellpadding="0" cellspacing="0">'; echo '<tr>'; echo '<td>'; echo '<table border="0" cellpadding="0" cellspacing="0" width="'.$percents.'" bgcolor="#FF0000" height="15">'; echo '<tr>'; echo '<td>'; echo '</td>'; echo '</tr>'; echo '</table>'; echo '</td>'; echo '</tr>'; echo '</table>'; } } else { echo '<br>'; echo 'Aucun sondage pour le moment ...'; } echo '<br>'; echo '<a href="?op=insert">Insérer un nouveau sondage</a>'; break; case "insert": switch($_GET['part']) { default: echo 'Combien de choix possibles pour le sondage ?'; echo '<form method="post" action="?op=insert&part=1">'; echo '<input type="text" name="choice" value="5">'; echo '<input type="submit">'; echo '</form>'; break; case "1": echo 'Création d\'un formulaire à '.$_POST['choice'].' choix :'; echo '<form method="post" action="?op=insert&part=2">'; echo '<input type="text" name="title" value="Titre de votre sondage">'; echo '<br>'; echo '<input type="text" name="text" value="Question de votre sondage">'; echo '<br>'; echo '<br>'; for($i=0; $i<$_POST['choice']; $i++) { echo '<input type="text" name="'.$i.'" value="Choix '.$i.'">'; echo '<br>'; } echo '<br>'; echo 'Ce sondage est activé : <input type="checkbox" name="ok" value="1">'; echo '<input type="hidden" name="choice" value="'.$_POST['choice'].'">'; echo '<br>'; echo '<br>'; echo '<input type="submit">'; echo '&nbsp;'; echo '<input type="reset">'; echo '</form>'; break; case "2": if(isset($_POST['choice'])&&isset($_POST['title'])&&isset($_POST['text'])) { $fields = ""; $results = ""; for($i=0; $i<$_POST['choice']; $i++) { $fields .= $_POST[$i]; if(isset($_POST[($i+1)])) { $fields .= ";"; $results .= ";"; } } if(mysql_query('INSERT INTO `'.$votes.'` VALUES("","'.$_POST['title'].'","'.$_POST['text'].'","'.$fields.'","'.$results.'","'.date("Y-m-d H:i:s").'","'.$_POST['ok'].'")')) { echo 'Création de votre nouveau sondage réussie ...'; echo '<br>'; echo '<a href="?ok">Cliquez là</a>'; } else { echo 'Une erreur interne s\'est produite ...'; } } else { echo 'Une erreur interne s\'est produite ...'; } break; } break; } ?>

Conclusion :


Donc, maintenant, raprochez vous de l'écran ...
Ce script est composé de PSEUDO FRAMES PHP pour le faire tenir en une seule page et vous faire comprendre aussi comment utiliser SWITCH(){}.

Lorsque la variable $_GET['op'] n'est pas définie (lorsque l'on ne défini aucune frame aussi) l'instruction par défaut est suivie :
On affiche le dernier vote et ses résultats :
1°) On séléctionne depuis la table MYSQL (mysql_query() ) les valeurs et on les mets dans un tableau (mysql_fetch_array() )
2°)Si ces instructions retournent un tableau (is_array()) alors on continue le script, sinon on met un message qui dit qu'il n'y a pas d'instruction donc pas de vote dans la table mysql
3°)Dans notre cas, nous allons dire que le tableau n'est pas vide et que nous avons bien un sondage dans notre mysql's table
4°) On récupère les valeurs des choix, dans la tables ils sont séparés par un point virgule ";" (exemple : Choix1;Choix2;Choix3). Nous allons utiliser explode() qui va séparer la chaine de caractère "Choix1;Choix2;Choix3" en segment, ce qui va donner pour explode(';', $req['fields']) :
$req['fields']['1'] = Choix1
$req['fields']['2'] = Choix2
etc.
Enfin, nous allons faire de même pour les enregistrements results.
5°) Pour pouvoir faire une sorte d'historique, vous devrez connaitre le nombre de personnes ayant voté ... Pourquoi se casser la tête, nous pouvons facilement obtenir ça en comptant le nombre de réponses.
Vous savez que vous avez découpé les enregistrements results avec explode en tableau ... Vous n'avez plus qu'a faire la somme des valeurs du tableau $req['results'] avec ... (allez dites le, vous le savez) ... array_sum()
Maintenant, vous pouvez faire un pourcentage ... je ne vous aide plus vous êtes assez grand, et vous savez manipuler le HTML ... :p

Pour le reste, le script qui vous permettra de faire voter vos visiteurs, je ne vous aide pas non plus, à vous de réfléchir, petits flemmards ...

Bon, maintenant, en espèrant que vous avez lu ça jusqu'à la fin ... Je vous lâche, la prochaine leçon devrai pas tarder ... Je pense que ce sera un tutorial sur un forum ou peut etre sur le fonctionnement d'une zone membre ...
Envoyez moi des propositions par mail : schiuchu@msn.com (pas de spam ! c ma dernière boite aux lettres ...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.