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 856 fois - Téléchargée 2 331 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

sartoz
Messages postés
27
Date d'inscription
vendredi 15 octobre 2010
Statut
Membre
Dernière intervention
12 août 2012
-
l'est bien sauf qu'on peut voté en illimité pas top pour un sondage ,
j'attend la nouvelle version
codestim
Messages postés
2
Date d'inscription
vendredi 22 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2010
-
bjr Ouaip, script très sympa est accessible si même pas débutant !! BravoYvan0u pour l'idée.

@SabbatoR image de fond ? ce n'est pas du PHP c'est html et css. Personnaliser les
. Tu peux déjà t'appuyer sur leur id"" et class""
@gnigaud
- reprend le script en remplaçant toutes les variables
par Avariable (exemple : titre devient Atitre ...,)
- refait la même manip (dans un dexuième fichier avec B (exemple : titre devient Btitre ...,)
fusionne les deux.
@lassad_haddaji crée une variable de session avec le submit, qui masquera le bouton lors de l'affichage du résultat.
En pratique ce sera aussi fiable qu'un test de l'IP qui peut varier, involontairement ou volontairement(si tu as affaire à un mauvais plaisant)
A+ et bon sondage
lassad_haddaji
Messages postés
142
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
6 avril 2012
-
salut,
exelant script, ca marche bien mais une chose qui me plais de savoir comment interdir de revoter,

merci de me repondre parce que m'interesse
a+
gnigaud
Messages postés
1
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
14 novembre 2007
-
Le script fonctionne pour moi...

J'essaye de trouver un moyen d'inclure plusieurs fois ce script dans une même page (3 sondages, 3 txt, 3php apellés par l'index). Test visible à http://gnigaud.free.fr/index_test.php

Le problème est alors que si l'on vote à 1 sondage, le vote est écrit sur l'ensemble des fichiers txt que j'ai mis en place. Problème d'écriture du au valeur des réponses ([1], [2], etc.)a priori.

Selon vous, est-il possible de résoudre ce problème (en différenciant les valeurs des réponses ou en forçant l'écriture vers un txt plutôt qu'un autre? Merci de votre support.

Guillaume.
flofloflo58
Messages postés
1
Date d'inscription
samedi 12 novembre 2005
Statut
Membre
Dernière intervention
12 juillet 2006
-
Ce script est très bien ! Bravo.
Mais il faudrait interdire une personne de revoter plusieurs fois sur le même sondage.

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.