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

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

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.