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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 447 fois - Téléchargée 26 fois

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

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
dimanche 4 septembre 2005
Statut
Membre
Dernière intervention
21 avril 2008

Super code !
Messages postés
28
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
18 juin 2006

Je vois ta source maintenant.

Tout roule, j'en cherchais une et c'est droit ce qu'il me faut.
Merci beaucoup.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
ceil fonctionne très bien pourtant, mais c'est vrai qu'il peut y avoir une erreur de 1 ou 2 pourcents au total
Messages postés
115
Date d'inscription
samedi 2 février 2002
Statut
Membre
Dernière intervention
13 mai 2006

Anthomicro, c'est pas ceil() que tu dois utiliser mais round().
Quitte a commenter la source de quelqu'un d'autre en postant sa propre source, essaie de la donner complete. (jpense notament aux classes)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
en plus simple (désolé) :

$mysql->requete("select SQL_SMALL_RESULT question,id from sondage ORDER BY RAND() LIMIT 1",5);
$r_s=$mysql->fetch_row(5);
$id_2=$r_s[1];
$mysql->requete("select SQL_SMALL_RESULT reponse_texte,id_reponse from sondage_reponses WHERE id_sondage="$id_2"",6);

//---------------------
//AFFICHAGE DU SONDAGE
//---------------------
$question=stripslashes($r_s[0]);
$contenu_sondage.='<hr size="1" color="#C0C0C0"><center>Sondage :
</center>'.$question.'<form name="form_sondage" action="'.$racine.'sondage.php?action=vote&id='.$id_2.'" method="post" target="_blank">';

$checked=0;
while($r=$mysql->fetch_row(6))
{
$reponse=stripslashes($r[0]);
$id_reponse=$r[1];

if($checked==0)
{
$contenu_sondage.=''.$reponse.'
';
$checked=1;
}
else
{
$contenu_sondage.=''.$reponse.'
';
}
}
$contenu_sondage.='<center></center></form>';

print($contenu_sondage);

//--------------------------------------------------
//DANS LE FICHIER SONDAGE.PHP
//--------------------------------------------------
<?php
if($_GET[action]==vote)
{
session_start();
if($_SESSION['login']==NULL)
{
print('<center>Désolé mais vous n\'êtes pas enregistré(e).

Vous devez vous enregistrer ou vous inscrire au site pour pouvoir voter');

}

$choix_reponse=$_POST[choix_reponse];
$id=$_GET["id"];
include("classes/classe_mysql.inc.php");
$mysql=new mysql();
$mysql->connect('');
//ON AJOUTE 1 AU NOMBRE DE VOTES POUR LA REPONSE CHOISIE
if($_SESSION['login']<>NULL)
{
//SI LE MEMBRE A DEJA VOTE ON NE COMPTE PAS SON VOTE
$mysql->requete("select SQL_SMALL_RESULT COUNT(*) from sondage_votes WHERE id_sondage="$id" and pseudo="$_SESSION[login]"",0);
$nbre=$mysql->fetch_row(0);
$nbre=$nbre[0];
if($nbre<>0)
{
print('
<center>Vous avez déjà voté.</center>');
}
else
{
$mysql->requete("INSERT INTO sondage_votes VALUES ("$id","$_SESSION[login]")",0);
$mysql->requete("UPDATE sondage_reponses SET nb_votes=nb_votes+1 WHERE id_sondage="$id" and id_reponse="$choix_reponse"",0);
}
}
print('

');
$mysql->requete("select SQL_SMALL_RESULT nb_votes from sondage_reponses WHERE id_sondage="$id"",1);
$mysql->requete("select SQL_SMALL_RESULT nb_votes,reponse_texte from sondage_reponses WHERE id_sondage="$id"",2);
$mysql->deconnect();

$total_votes=0;
while($r=$mysql->fetch_row(1))
{
$nb_votes=$r[0];
$total_votes=$total_votes+$nb_votes;
}
while($r=$mysql->fetch_row(2))
{
$nb_votes=$r[0];
$reponse=stripslashes($r[1]);
if($total_votes<>0)
{
$pourcentage=ceil(($nb_votes/$total_votes)*100);
}
else
{
$pourcentage=$nb_votes;
}
print(''.$reponse.' : ('.$pourcentage.' % )

');
}
print('Nombre de votes : '.$total_votes.'');
exit;
}
?>


Bon ce sont les sources du système de sondage de mon site. Je n'ai pas mis le schéma mysql c'est juste pour te montrer qu'on peut faire plus simple.

a +
Afficher les 8 commentaires

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.