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

Soyez le premier à donner votre avis sur cette source.

Vue 11 182 fois - Téléchargée 1 286 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

Messages postés
2
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
15 décembre 2008

merci pour se script
Messages postés
1
Date d'inscription
dimanche 28 août 2005
Statut
Membre
Dernière intervention
18 août 2006

Bonjour,

je ne peux voter , je n'ai que le resultat d'office :(
Merci pour votre aide
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
je repassais ici par hazard, et j'ai vu quelques trucs corrigés, alors je vais mettre 8/10
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
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é
Messages postés
50
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
3 octobre 2008

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.