Sondage "meilleure image" sans base de données (fichier txt)

0/5 (5 avis)

Vue 11 539 fois - Téléchargée 1 317 fois

Description

Je me suis inspirée de la source http://www.phpcs.com/code.aspx?ID=30791 pour créer un sondage permettant aux utilisateurs inscrits de voter pour la photo/affiche/image qu'ils préfèrent. Un seul vote par membre.
$_SESSION["utilisateurId"] correspond à l'identifiant de l'utilisateur connecté.
Pour l'affichage, j'ai utilisé un tableau, je sais que ce n'est pas top : je vais bientôt me mettre aux CSS, promis!
La config se fait dans index_vote.php
sondage_simple.php est une classe PHP4.

Source / Exemple :


<?php
	
 /*!

  • Fonction : Sondage avec gestion des réponses dans un simple fichier txt
* *
  • /
class sondage_simple { var $strQuestion; var $tabReponses; var $tabImages; var $strNomFichierResultats; var $strRepertoire; var $strFichierVotants; // ************************** // * Interface publique * // ************************** /*!
  • constructeur de la classe
*
  • /
function sondage_simple($strQuestion, $tabReponses, $tabImages, $strNomFichierResultats, $strRepertoire) { $this->strQuestion = $strQuestion; $this->tabReponses = $tabReponses; $this->tabImages = $tabImages; $this->strNomFichierResultats = $strRepertoire . $strNomFichierResultats; $this->strRepertoire = $strRepertoire; $this->strFichierVotants = $strRepertoire . "votants_" . $strNomFichierResultats; } /*!
  • Ajout de l'utilisateur dans le fichier des votants (un seul vote par utilisateur)
*
  • /
function ajoutUtiVote($intIdUti){ $file = fopen($this->strFichierVotants, "r+") or die("impossible d'ouvrir le fichier ($this->strFichierVotants)"); $aVote = 0; $utilisateurs = $intIdUti; while (!feof($file)) { $line = fgets($file); $utilisateurs = $utilisateurs . "\n" . $line; } // On revient au debut du fichier fseek ($file, 0); // On ajoute nos données mises à jour fputs ($file, $utilisateurs); fclose($file); } /*!
  • verif si pas deja voté
*
  • /
function verifVote($intIdUti){ $file = fopen($this->strFichierVotants, "r+") or die("impossible d'ouvrir le fichier ($this->strFichierVotants)"); $aVote = 0; while (!feof($file)) { $line = (int) fgets($file); if ($line == $intIdUti){ $aVote = 1; } } fclose($file); return $aVote; } /*!
  • Vote
*
  • /
function vote($intIdUti, $vote){ $nbReponses = count($this->tabReponses); $resultats = fopen($this->strNomFichierResultats, "r+") or die("impossible d'ouvrir le fichier ($this->strNomFichierResultats)"); $erreur = 0; if (!$this->verifVote($intIdUti)){ // Parcourt du fichier + incrementation de la ligne correspondant au vote for ($numero = 1; $numero <= $nbReponses; $numero ++) { $ligne[$numero] = (int) fgets($resultats); if ($numero == $vote) { $ligne[$numero] ++; } if (isset($donnees_votes)) { $donnees_votes = $donnees_votes . "\n" . $ligne[$numero]; } else { $donnees_votes = $ligne[$numero]; } } // On revient au debut du fichier fseek ($resultats, 0); // On ajoute nos données mises à jour fputs ($resultats, $donnees_votes); // a voté! $this->ajoutUtiVote($intIdUti); } else { $erreur = 1; } fclose($resultats); return $erreur; } /*!
  • Lecture des votes
*
  • /
function lectureVotes(){ $resultats = fopen($this->strNomFichierResultats, "r") or die("impossible d'ouvrir le fichier ($this->strNomFichierResultats)"); $nbReponses = count($this->tabReponses); $numero = 1; while ($numero <= $nbReponses) { // 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 <= $nbReponses){ // 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; $total = 0; while ($numero <= $nbReponses) { ?> <tr> <td align="right"> <span class="bleu"> <?php echo $this->tabReponses[$numero]; ?> : </span> </td> <td align="left"> &nbsp;<img src="<?php echo $this->strRepertoire?>/images/barre.gif" height="10" width="<?php echo $pourcentage[$numero] / 100 * $long_max_bloc?>" alt="<?php echo round($pourcentage[$numero])?> %" /> </td> <td align="left"> <span class="bleu"> <strong><?php echo $resultat[$numero]; ?> votes</strong> </span> </td> </tr> <?php $total += $resultat[$numero]; $numero ++; } ?> <tr> <td align="right"> <span class="bleu"> <strong>TOTAL</strong> </span> </td> <td align="left"> &nbsp; </td> <td align="left"> <span class="bleu"> <strong><?php echo $total; ?> votes</strong> </span> </td> </tr> <?php fclose($resultats); } /*!
  • Formulaire de vote
*
  • /
function afficheFormulaireVote(){ $nbReponses = count($this->tabReponses); $numero = 1; $i = 0; ?> <div align="center"> <span class="bleu"><?php echo $this->strQuestion; ?></span> </div><br /> <?php while ($numero <= $nbReponses){ if ($i == 4){ echo "</tr><tr><td colspan='4'><br /></td><tr>"; } $i++; ?> <td align="center"> <a href="<?php echo $this->strRepertoire?>/images/<?php echo $this->tabImages[$numero]?>" target="_blank" title="Cliquez pour agrandir"><img height="150" src="<?php echo $this->strRepertoire?>/images/mini_<?php echo $this->tabImages[$numero]?>" border="0" /></a> <br /> <span class="noir_fin"><?php echo $this->tabReponses[$numero]; ?></span> <br /> <input type="radio" name="vote" value="<?php echo $numero; ?>" /> </td> <?php $numero++; } } } ?>

Conclusion :


Le répertoire "images" contient des exemples d'affiches.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
safermoh Messages postés 2 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 15 décembre 2008
30 oct. 2008 à 07:29
merci pour se script
Manu_Corp Messages postés 1 Date d'inscription dimanche 28 août 2005 Statut Membre Dernière intervention 18 août 2006
17 août 2006 à 07:41
Bonjour,

je ne peux voter , je n'ai que le resultat d'office :(
Merci pour votre aide
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 août 2006 à 12:04
je repassais ici par hazard, et j'ai vu quelques trucs corrigés, alors je vais mettre 8/10
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 févr. 2006 à 13:41
Salut
un avantage de ta source : son orientation objet, mais un désavantage : aucune vérification d'erreurs...
$resultats = fopen($this->strNomFichierResultats, "r"); sans or die...
fclose($resultats);
et ton code html n'est pas super super... on en est au CSS 3...
<td align="center"> est à remplacer par un style=...
est à remplacer par un span...
bref, je noterais quand tu l'auras amélioré
shadow125 Messages postés 50 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 3 octobre 2008
8 févr. 2006 à 13:25
Tres bonne source! Bien expliquée et complète ! Je n'ai pas eu le tps de l'essayer mais elle a l'air tres bien :)

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.