javascript, javascripts, js, jscript, scripts, script, html, dhtml, dynamic, cookies, menu, frames, formulaire, source, code, gratuit, exemple, developper, html, php4, php3, php, mysql, liens, php2, forum, livre d'or, pages, web, dynamiques, programmation, webmasters, webmestres, tutorial, tutoriel, annuaires, espace, membres, banniéres, caddies, chats, compteurs, formulaires, forums, gestion, documentations, news, mailing, list, newsletter, moteurs, recherche, sondages, votes, statistiques, autres, agendas, calendriers, mail, annonces, audio, outils, réseaux, graphique, recommandation, site, sécurité, portail, creation, actualité, moteur de recherche, moteur, trucs, astuces, services, flash, action script, actionscript Tutoriaux : Php/MySQL
Script Masters : Javascript, Php, Mysql, html pour Webmasters!
 
    Script Masters
 
    Espace membre
 
    Langages
 
    Autres ressources
 
    Emploi avec Jobintree
 
    Ressources graphiques
 
    Recherche
 
    Kit graphique
 
    Liens
 
    Statistiques


 


Télécharger les sources de cet article


Untitled Document
Un sondage en PHP/MySQL


Tutorial écrit par : Ordimania - Web Ressources et Fabien Daniel - Script Masters

 

   Introduction

 

 

Dans ce tutorial, nous allons apprendre à créer notre propre sondage à l’aide du couple PHP/MySQL. Ce tutorial n’a pas l’ambition de fournir la solution unique à ce genre de problème, mais plutôt des pistes afin de vous permettre de développer votre propre application. Nous avons choisi de simplifier son fonctionnement afin de vous permettre de personnaliser ce script et ainsi approfondir vos connaissances.
Le script complet est néanmoins disponible en téléchargement. Il est accompagné de ce tutorial au format imprimable.

 

Structure du script


Notre sondage utilise le couple PHP/MySQL. Pour bien assimiler ce tutorial, je vous prie d'aller voir ce cours sur MySQL.
De plus, il est préférable d’avoir quelques notions de requêtes MySQL (que nous approfondirons dans un prochain tutorial)

Voici la composition du script :
- Création d'une table MySQL (ou seront stockées les votes et les ip des participants)
- Un fichier configuration.php (permet l’administration de votre sondage)
- Un fichier form.php (script générant le formulaire de vote)
- Un fichier voter.php (permettant l’insertion d’un nouveau vote dans notre table)
- Un fichier result.php (où seront affichés les résultats des votes)
- Un fichier init.php pour réinitialisé le sondage.

Nous allons dans un premier temps détaillé le fonctionnement de chacun de ces fichiers avant de faire quelques remarques permettant de sécuriser l’application.

 

La table MySQL
 

Nous allons créer la table nécessaire au sondage dans laquelle nous enregistrerons les votes. Selon les hébergeurs, vous pouvez avoir différents scripts de gestion des bases de données; cependant PhpMyAdmin est le plus utilisé.

Structure de la table MySQL :
DROP TABLE IF EXISTS sondage;
CREATE TABLE sondage (
ip char(50),
vote int(11),
PRIMARY KEY(ip)
);

 

Remarquez que nous définissons deux champs : ip et vote. L’ip nous permettra d’identifier le votant pour limiter le nombre de vote par une même personne. Cependant, bien que restrictive, cette technique n’est pas optimale. En effet, il est tout a fait possible de changer d’ip plusieurs fois dans la journée. Au contraire, deux personnes se connectant d’un même ordinateur public (université par exemple) ne pourront pas voter chacun leur tour. Pour optimiser cette technique, il pourrait être intéressant de rajouter un cookie. Nous n’aborderons pas ce point ici. Néanmoins un tutorial sur les cookies est dores et déjà disponible sur le site.

 

Fichier de configuration
 

Ce fichier que nous nommerons « configuration.php » présente deux intérêts :
- Définir les variables de connexion à la base
- Configurer le sondage

Nous allons donc diviser l’étude de ce fichier en deux points.

a- Variables de connexions

Les variables de connexions dépendent de la configuration de votre serveur. Celles définies ci-dessous peuvent être utilisé en local avec une configuration par défaut.

Variables de connexions :
<?php
// Adresse de votre serveur sql (free : sql.free.fr, en local : localhost)
$hote = "localhost";

// Votre login
$login = "root";

// Votre mot de passe correspondant à ce login
$mot_passe = "";

// Nom de votre base MySQL
$nom_base = "test";

// Nom de la table (sondage par défaut)
$table = "sondage";
?>


b- Configuration du sondage

Ici, il s’agit de la configuration du sondage proprement dit. Vous pouvez configurer votre question ainsi que les différentes réponses possibles. Vous n’êtes pas limité en quantité de réponse, il vous suffit d’ajouter des éléments à votre tableau.
Ces informations nous permettrons également de générer le formulaire associé.

Configuration du sondage :
<?
// Votre question
$question = "Que pensez-vous de ce tuto ?";

//Vos propositions
$rep[0] = "Très bon";
$rep[1] = "Bon";
$rep[2] = "Moyen";
$rep[3] = "Mauvais";
?>

 

 

Formulaire
 

Ce fichier récupère la configuration vu précédemment (contenu dans configuration.php) et de générer le formulaire associé. Vous pouvez aisément modifier le code html pour l’adapter à vote site. Remarquer que le formulaire pointe vers le fichier « voter.php ». Celui-ci est charger d’analyser le vote et de l’enregistrer dans la base si celui-ci est valide.

Génération du formulaire :
<?php require ("configuration.php"); ?>
<table width="200" border="0" cellspacing="0" cellpadding="2">
<form method='post' action='voter.php'>
<tr>
<td align="center"><?php echo $question; ?></td>
</tr>
<?php
// Affichage des propositions de réponses
for($i=0;$i<count($rep);$i++)
echo " <tr><td><input type=radio name=\"vote\" value=\"".$i."\"> ".$rep[$i]."</td></tr>\n";
?>
<tr>
<td align="center"><input type="submit" value="voter"></td>
</tr>
</form>
</table>

Pour vous aidez à comprendre ce que nous faisons ici, voici le code html que génère ce script avec le fichier de configuration donner plus haut (à ne pas sauvegarder pour votre sondage)

Résultat du script précédent :
<table width="200" border="0" cellspacing="0" cellpadding="2">
  <form method='post' action='voter.php'>
    <tr>
       <td align="center">Que pensez-vous de ce tuto ?</td>
    </tr>
    <tr><td><input type=radio name="vote" value="0"> Tres bon</td></tr>
    <tr><td><input type=radio name="vote" value="1"> Bon</td></tr>
    <tr><td><input type=radio name="vote" value="2"> Moyen</td></tr>
    <tr><td><input type=radio name="vote" value="3"> Mauvais</td></tr>
    <tr>
       <td align="center"><input type="submit" value="voter"></td>
    </tr>
  </form>
</table>

 

Fichier de vote
  Comme expliquer plus haut, nous enregistrons le script dans le fichier « voter.php ». Voici le script que nous utilisons. Pour faciliter la compréhension, nous allons décomposer le script en 3 parties :

La première partie consiste en l’initialisation de notre script, a savoir la récupération des paramètres de configuration, la connexion à la base de données. Par ailleurs, on récupère des informations issues du client (le votant) : son vote ainsi que son adresse IP.

Script :
<?php

// On insère le fichier de configuration
require("configuration.php");

// On se connecte au serveur MySQL de notre hébergeur
mysql_connect($hote,$login,$mot_passe);
mysql_select_db($nom_base);

// On récupère le vote et l'ip du visiteur
$vote = $_POST['vote'];
$ip = $_SERVER['REMOTE_ADDR'];
?>

La seconde partie a pour objectif de vérifier si l’adresse IP se trouve déjà dans notre table. Pour ce faire, on effectue une requête sélectionnant tout les lignes contenant cette IP. Bien sur, ce nombre ne peut être qu’égale à 0 (aucun vote pour cette IP) ou 1 (IP présente dans la base de donnée. La valeur 1 (true) entraîne un traitement d’erreur qui affiche un message d’erreur et oblige le script à se terminer.

Script :
<?php

// On vérifie si l'ip est déjà présente dans la base de données
$query = "SELECT * FROM ".$table." WHERE ip='$ip'";
$result = mysql_query($query);
$num = mysql_num_rows($result);

// Message d'erreur et fin du script si une ip est déjà présente
if($num)
{
echo "Il n'est possible de voter qu'une seule fois.";
exit;
}
?>

Si le programme ne s’est pas terminé, on peut enregistrer le vote. On insère la l’identifiant de la réponse et l’adresse IP du votant. On n’oublie pas de fermer la connexion mysql. Enfin, on invite le votant à visualiser les résultats en pointant un lien vers la page result.php qui contient l’affichage graphique des résultats.

Script :
<?php
// On insère le vote dans la base de données
$sql = "INSERT INTO $table (vote,ip) VALUES ('$vote','$ip')";
mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
mysql_close();

echo 'Merci d\'avoir voté !!<br><a href="result.php">Voir les résultats</a>';
?>


 

L'affichage des résultats
 

Enfin, nous allons voir comment afficher les résultats du sondage, en montrant le nombre de vote et le pourcentage. Je vais traiter le sujet de façon très basique en premier lieu puis nous verrons comment personnaliser un peu l'affichage des résultats.

Script :
<?php

// On insère le fichier de configuration
require ("configuration.php");

// On se connecte eu serveur MySQL de notre hébergeur
mysql_connect($hote,$login,$mot_passe);
mysql_select_db($nom_base);

// On recupere les nombre total de votes
$query = "SELECT count(*) as nbVote FROM ".$table;
$row = mysql_query($query);
while($data = mysql_fetch_array($row))
$total = $data["nbVote"];

echo "<table width=\"200\" cellspacing=\"0\" cellpading=\"0\">\n";
for($i=0;$i<sizeof($rep);$i++)
{
// Pour chaque reponse, on affiche le nombre de vote
$query = "SELECT count(*) nbVote FROM ".$table." WHERE vote='$i'";
$row = mysql_query($query);
while($data = mysql_fetch_array($row))
$pourcentage = $data["nbVote"] * 100 / $total;
echo "\t<tr><td>".$rep[$i]." : </td><td>".round($pourcentage)." %</td></tr>\n";
}
echo "</table>\n";

// On affiche le nombre total de sondés
echo "<table width=\"100%\" cellspacing=\"0\" cellpading=\"0\">\n";
echo "\t<tr><td>Nombres total des votes : $total</td></tr>\n</table>";

// On ferme la connection au serveur MySQL
mysql_close();
?>



En exercice, vous pouvez ajouter un affichage graphique des résultats sous forme de diagramme, pour cela, vous pouvez utilisé l’une de ces deux images et ajoutez cette ligne au bon endroit du script précédent :

Script :
<img src='barre_horizon.jpg' height='10' width='".round($pourcentage)."'>

 

Réinitialisation du sondage
 

Si vous décidez de changer de sondage (en modifiant le fichier configuration.php), il peut être utile de remettre tout les résultats à 0. Pour ce faire, on peut imaginer un fichier init.php qui exécute la requête suivante :

Requête :
TRUNCATE sondage

Cette requête efface simplement le contenu de la table sondage. Vous pouvez alors créer un sondage tout neuf :)
Si vous avez bien compris le reste du tutorial, vous n’aurez aucune difficulté à implémenter ce script.

 

Sécurité de l’application
 

Le script détaillé dans cette page est constitué de deux fichiers dont le contenu doit être protégé. Il s’agit des fichiers « configuration.php » qui contient les informations relatives à votre serveur mySQL et le fichier « init.php » qui peut réinitialiser votre table sondage. Il est donc fortement conseillé de protéger ces fichiers en les copiant dans un répertoire protégés par un fichier « .htaccess ». Bien sûr, si vous changer de répertoire au fichier de configuration, pensez également à répercuter le chemin dans chaque portion de code qui l’appel.

 

Conclusion
 

Nous avons vu ensemble les bases pour élaborer un sondage simple mais efficace. Vous pouvez bien évidemment y apporter des modifications. Notamment en développant une interface d’administration plus élaboré pour faciliter la mise à jour du sondage.
Si vous le désirez, l’intégralité du script est disponible en téléchargement. Il est accompagné de ce tutorial de 9 pages au format imprimable (pdf).

 

- Un problème? Posez vos questions sur le forum Php/MySQL!
- Ce tutorial a été consulté 20111 fois
- Afficher ce tutorial au format imprimable


Script Masters © Ce texte est la propriété de son auteur.
Toute reproduction est interdite.

 




 
 
Fabien Daniel - © 2001-2009 | Hebergement : OVH | CNIL : 796128