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);
}
/*!
*
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;
}
/*!
*
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;
}
/*!
*
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">
<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">
</td>
<td align="left">
<span class="bleu">
<strong><?php echo $total; ?> votes</strong>
</span>
</td>
</tr>
<?php
fclose($resultats);
}
/*!
*
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.
30 oct. 2008 à 07:29
17 août 2006 à 07:41
je ne peux voter , je n'ai que le resultat d'office :(
Merci pour votre aide
1 août 2006 à 12:04
8 févr. 2006 à 13:41
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é
8 févr. 2006 à 13:25
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.