Sondage php (stockage des résultats dans un fichier texte --> sans base de données)

Soyez le premier à donner votre avis sur cette source.

Vue 17 789 fois - Téléchargée 2 322 fois

Description

Ce sondage affiche les résultats directement en dessous des possibilités de réponse. Pour ne pas "utiliser un canon pour tuer une mouche" je n'ai pas fait intervenir de base de données mais les résultats sont tout simplement stockés dans un fichier texte. Possibilité de personnaliser le sondage en modifiant les variables en début de fichier (question, réponses, nombre max de votes, ...).

Source / Exemple :


<?
			// INFORMATIONS SUR LE SONDAGE
			$titre = 'sondage'; // = nom du fichier dans lequel est stocké les votes
			$question = 'Comment trouvez-vous ce site ?';
			$reponse[1] = 'Bien';
			$reponse[2] = 'Moyen';
			$reponse[3] = 'Mauvais';
			$reponse[4] = 'Pitoyable';
			$nb_max_votes = 0; // 0 si illimité
			// MODIFICATION DU SONDAGE
			$choix = count($reponse);
			if (isset($_GET['vote']))
			{
				$resultats = fopen("$titre.txt", "r+");
				$vote = $_GET['vote'];
				for ($numero = 1; $numero <= $choix; $numero ++)
				{
					$ligne[$numero] = (int) fgets($resultats);
					if ($numero == $vote)
					{
						$ligne[$numero] ++;
					}
					if (isset($donnees_votes))
					{
						$donnees_votes = $donnees_votes . "\n" . $ligne[$numero];
						$nb_votes += $ligne[$numero]; // comptage du nombre de votes
					}
					else
					{
						$donnees_votes = $ligne[$numero];
						$nb_votes = (int) $ligne[$numero];
					}
				}	
				fseek ($resultats, 0);
				if($nb_votes<=$nb_max_votes OR $nb_max_votes==0)
				  fputs ($resultats, $donnees_votes);	// écriture des données
				
				fclose($resultats);
			}
			// LECTURE DU SONDAGE		
			$resultats = fopen("$titre.txt", "r");
			
			$numero = 1;
			while ($numero <= $choix)	// attribution d'un nombre pour chaque vote à l'array $resultat[]
			{
				$resultat[$numero] = fgets($resultats);
				if ($resultat[$numero] == NULL) // on remplace les lignes vides du fich txt par 0
				{
						$resultat[$numero] = 0;
				}
			$numero ++;
			}

			$total_votes = 0; // calcul du total des votes
			foreach($resultat as $nb_resultat) $total_votes += $nb_resultat;
			if ($total_votes == 0)	// éviter la division par 0
			{
				$total_votes = 1;
			}
			$numero = 1;
			while ($numero <= $choix) // transformation du nombre de vote en pourcentages
			{
				$pourcentage[$numero] = $resultat[$numero] / $total_votes * 100;
				$numero ++;
			}
			
			$long_max_bloc = 120; // longueur maximale du curseur pour un vote en pixels
			
			// affichage des barres et du nombre de votes
			$numero = 1;
			echo ('<div class="titresondage" align="center">'. $question . '</div><br /><form action=""> ');
			while ($numero <= $choix) 
			{
				echo ('<div class="choix"><label><input type="radio" name="vote" value="' . $numero . '" />'. $reponse[$numero] .'</label>
        <br /> <img src="sondage_barre.jpg" height="10"width="' . $pourcentage[$numero] / 100 * $long_max_bloc . '"
        alt="'.round($pourcentage[$numero]).'%" /><br />
        <span style="font-size:80%;"><strong>' . $resultat[$numero] . ' votes</strong></span></div>');

//				echo ($pourcentage[$numero] . '%'); 
				$numero ++;
			}
			echo ('<div align="center"><input type="submit" value="envoyer">');
			echo ('</div></form>');
			fclose($resultats);
///== Par Yvan0|_| ==///?>

Conclusion :


--> Penser à créer le fichier texte du même nom que le titre du sondage.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

juki_webmaster
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3 -
Salut,

$choix = 3; // nombre de possibilités de réponses (si modif, penser à changer la calcul du tot des votes) --> ligne 49
$question = 'Comment trouvez-vous ce site ?';
$reponse[1] = 'Bien';
$reponse[2] = 'Moyen';
$reponse[3] = 'Mauvais';

- Sa peut être plus modulable, remplace $choix 3 par $choix count($reponse) en le plaçant àprés (ont ce comprend).

- Ensuite tu pourais redonner le tableau 0 de $reponse, et donc retirer 1 à chaque fois que nessesaire (sur les pointeurs de $reponse).

Sinon, sa reste un bon code à utiliser lorsqu'ont ne dispose pas toujour d'une db sql ou qu'ont desire la simplicité et la rapidité.
cs_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut,

remplace <? par <?php

ensuite le if($variable==NULL) > remplace par if(!isset($variable))

a +
juki_webmaster
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3 -
A oui! j'ai oublier de te posser la question :

Pourqoui ne pas avoir fait une interdiction de revoter ? (cookie+ip stoquer dans un txt).
Yvan0u
Messages postés
3
Date d'inscription
dimanche 10 octobre 2004
Statut
Membre
Dernière intervention
30 mai 2006
-
C'est vrai que j'aurais pu mettre une interdiction de revoter (bien que ça ne soit pas infaillible)... Y a pas de raison bien précise en fait.
nexus8
Messages postés
6
Date d'inscription
lundi 9 septembre 2002
Statut
Membre
Dernière intervention
17 avril 2005
-
Pour le valider XHTML,

- Vire les " " ou met " "
- Ferme les tags avec />

et c'est parfait ;-)

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.