Demande d'aide pour sondage !!!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Demande d'aide pour sondage !!!

par krispi » 06 oct. 2005, 13:28

Merci pour tout cyrano tout marche parfaitement en enlevant les "intavl"

Je te remerci de m'avoir beaucoup aidé....

Pour ce qui est de pjl

Je préférait pas les mettre dans une base de donnée car je trouvais ça tro complexe pour le peu que je voulais faire et je m'y connais pas tro emplus

Pour ce qui es de mon sondage, il restera toujours le meme vu que je m'en sert pour un pronostic à moi donc juste de remettre les comteur à zero une semaine sur l'autre...

Voila encore merci

Par contre puisque je suis la j'en profiterais pour vous demander est-ce que l'un d'entre vous connaitrais une fonction en php qui me permettrais de copier la source d'une page

Je m'explique:
J'ai fait un formulaire avec des bouton radio, après validation je m'est une page ou la personne vois tout ce qu'ele a coché mais si j'utilise la fonction :
<?php
$file = 'nom_du_fichier.php';
$newfile = 'nom_du_fichier2.txt';

if (!copy($file, $newfile)) {
echo "La copie du fichier $file n'a pas réussi...\n";
}
?> 


<?php
$monfichier = fopen("nom_du_fichier.php", "r+");
$fichier = "nom_du_fichier3.html";
// Ouvrir le fichier
$fd = fopen("$fichier","r+");
$ligne = fget($monfichier);
fseek($monfichier, 0);
fwrite($fd, $ligne);
echo "Votre message a correctement été ecrit dans le fichier 
$fichier";
fclose($fd);

?>
Ce qui se produit c'est que avec cette fonction j'obtiens une copie parfaite de la page en cours hors dans ma page j'ai du code type :
<?php
if (!$nom_de_le_valeur) {$r_1="?";}

echo '<font face="Verdana" style="font-size: 11px"><center>';
if ($nom_de_le_valeur=="1") {echo '<img src="?.gif"> <img src="?.gif"> <img src="?.gif"><br>';}
elseif ($nom_de_le_valeur=="N") {echo '<img src="?.gif"> <img src="?.gif"> <img src="?.gif"><br>';}
elseif ($nom_de_le_valeur=="2") {echo '<img src="?.gif"> <img src="?.gif"> <img src="?.gif"><br>';}
else {echo '<img src="?.gif"> <img src="?.gif"> <img src="?.gif"><br>';}   
?>
et lorsque donc j'en appel à la copie de la page elle ne peut pas m'afficher mes images (celle qu'a choisi la personne) vu qu'il n'y a eu aucune requette avant c'est pour ça que je vous demande si vous connaissez une fonction ou un moyen de contourner cela afin de copier la source de lapage courante (ce qui évite d'avoir le code php) ou une astuce

J'espère que je me suis bien expliqué lol car c'est vrai par écrit c'est toujours plus dur..

Merci :P

par pjl » 06 oct. 2005, 09:53

Question :
- pourquoi faire appel à un système de fichier et non de base de données ?
- pourquoi faire appel à 3 fichiers texte ? Ce n'était pas plus simple de mettre les résultats dans un seul fichier ?
En plus, là, si on veut changer de sondage, on est obligé de reprendre le code.

par Cyrano » 06 oct. 2005, 09:03

Il y a sûrement une erreur de recopie. Voici ce que j'ai fait pour tester de mon coté en reprenant ton code, le voilà corrigé et fonctionnel:
<?
// ---------------------------------------------------------
// - récupére les variables qui vont permettre l'affichage de
// - la hauteur des colonnes oui et non (affichage graphique)
// ---------------------------------------------------------
$vote = isset($_POST['vote']) ? $_POST['vote'] : "";
$fichier_oui = "./oui.txt";
$fichier_non = "./non.txt";
$fichier_ok  = "./ok.txt";

if($vote == 1)
{
    $fp = (file_exists($fichier_oui)) ? fopen($fichier_oui,"r+") : fopen($fichier_oui, "w");
    $oui=fgets($fp,10);
    if($oui != "")
    {
        $oui++;
    }
    else
    {
        $oui = 1;;
    }
    fseek($fp,0);
    fwrite($fp,$oui);
    fclose($fp);

}
if ($vote == 2)
{
    $fp = (file_exists($fichier_non)) ? fopen($fichier_non,"r+") : fopen($fichier_non, "w");
    $non=fgets($fp,10);
    if($non != "")
    {
        $non++;
    }
    else
    {
        $non = 1;;
    }
    fseek($fp,0);
    fwrite($fp,$non);
    fclose($fp);

}
if ($vote == 3)
{
    $fp = (file_exists($fichier_ok)) ? fopen($fichier_ok,"r+") : fopen($fichier_ok, "w");
    $ok=fgets($fp,10);
    if($ok != "")
    {
        $ok++;
    }
    else
    {
        $ok = 1;;
    }
    fseek($fp,0);
    fwrite($fp,$ok);
    fclose($fp);
}
if(file_exists($fichier_oui))
{
    $fp=fopen($fichier_oui,"r+");
    $oui=fgets($fp,10);
    fclose($fp);
}
else
{
    $oui = 0;
}
if(file_exists($fichier_non))
{
    $fp=fopen($fichier_non,"r+");
    $non=fgets($fp,10);
    fclose($fp);
}
else
{
    $non = 0;
}
if(file_exists($fichier_ok))
{
    $fp=fopen($fichier_ok,"r+");
    $ok=fgets($fp,10);
    fclose($fp);
}
else
{
    $ok = 0;
}
$oui = $oui == "" ? 0 : $oui;
$non = $non == "" ? 0 : $non;
$ok  = $ok  == "" ? 0 : $ok;
$total = (($oui + $non + $ok) != 0) ? 100/($oui + $non + $ok) : 0;
echo("<p>".$oui .", ".$non.", ".$ok .", total = ". $total ."</p>\n");
$oui = $oui * $total;
$non = $non * $total;
$ok = $ok * $total;

// ----------------------------------------------------------
// - Une fois les variables stockées je peux les rajouter
// - ds les attributs height de mes deux images oui et non
// ----------------------------------------------------------
?>
<table border="0" cellspacing=0 cellpadding=0 align="center">
  <tr>
    <td>
      <img src="images/graph_gh.gif" width="30" height="98"><img src="images/space.gif" width="15" height="10"><img src="images/oui.gif" width="10" height="<? echo $oui; ?>"><img src="images/space.gif" width="15" height="10"><img src="images/non.gif" width="10" height="<? echo $non; ?>"><img src="images/space.gif" width="15" height="10"><img src="images/ok.gif" width="10" height="<? echo $ok; ?>"></td></tr><tr><td><img src="images/graph_bs.gif" width="125" height="12" border=0>
    </td>
  </tr>
</table>
<br>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
  <div align="center">
  <font color="#FF9933"><b>
  <input type="radio" name="vote" value="1" >&nbsp;oui
  <input type="radio" name="vote" value="2">&nbsp;non
  <input type="radio" name="vote" value="3">&nbsp;ok
  </b></font>
  <br><br>&nbsp;
  <input type="image" src="images/voter.gif" name="submit" value="Envoyer">
  </div>
</form>
</td>
</tr>
</table>
<?
// ----------------------------------------------------------
// - Récupérer les Variables pour l'affichage en ASCii
// ----------------------------------------------------------
if(file_exists($fichier_oui))
{
    $fp=fopen($fichier_oui,"r");
    $oui=fgets($fp,10);
    $pour = $oui ;
    fclose($fp);
}
else
{
    $pour = 0;
}
if(file_exists($fichier_non))
{
    $fp=fopen($fichier_non,"r");
    $non=fgets($fp,10);
    $contre = $non ;
    fclose($fp);
}
else
{
    $contre = 0;
}
if(file_exists($fichier_ok))
{
    $fp=fopen($fichier_ok,"r");
    $ok=fgets($fp,10);
    $neutre = $ok ;
    fclose($fp);
}
else
{
    $neutre = 0;
}
$total = (($oui + $non + $ok) != 0) ? 100/($oui + $non + $ok) : 0;
$oui = $oui * $total;
$non = $non * $total;
$ok = $ok * $total;
// ----------------------------------------------------------
// - Affichage des résultats en TXT et en %
// - la fonction intval(); permet de ne pas avoir d'arrondir
// - le résultat et de ne pas avoir 10 chiffres après la virgule
// ----------------------------------------------------------
?>
<center>
<font color="#FF9933"><b>
OUI [<span class=""><? print(intval($oui));?>%</span>]
NON [<span class=""><? print(intval($non));?>%</span>]
OK [<span class=""><? print(intval($ok));?>%</span>]<br>
VOTANTS[<span class=""><? print($pour + $contre + $neutre);?></span>]<br><br>
</b>
</font>
</center>
Comme tu vois, il est un peu rallongé et il y a des tests en plus ainsi que des changements. Par exemple, je vérifie si le fichier existe au départ lors du premier vote, parce que ouvrir un fichier inexistant en mode "r+", ça génère une erreur, donc s'il n'existe pas, je l'ouvre en mode "w".

Enfin regarde en fin de script, j'ai simplifié l'affichage et il reflète quelque chose de juste et tu ne pourras jamais à voir un vote supérieur à 100 à 1 ou 2 près à cause du inval qui arrondit à un entier. TU aurais pu mettre un nombre en virgule flottante avec deux décimales en utilisant number_format() comme ceci par exemple :
OUI [<span class=""><? print(number_format($oui,2));?>%</span>]
NON [<span class=""><? print(number_format($non,2));?>%</span>]
OK [<span class=""><? print(number_format($ok, 2));?>%</span>]<br>
Ce qui donnerait à l'affichage:
OUI [50.00%] NON [37.50%] OK [12.50%]
VOTANTS[7]

re:Demande d'aide pour sondage !!!

par krispi » 06 oct. 2005, 01:11

:D Merci pour tout vos renseignements ça me fait plaisir car ça fonctionne maintenant...

Il y a juste un petit probleme que je comprend pas

A partir de 100 votes le compteur rajoute automatiquement 1% à "ok" et ensuite il n'y a plus les 100% au total cela produit 101% et parfois 102% au total

Tu ne voit pas d'où ça peut venir, car j'ai vérifié le code et il est bien précisé 100 partout.

Est-ce que je dois rajouter un truc ??

Merci d'avance et déjà merci pour les aides précédentes... :P

par Truc » 05 oct. 2005, 22:41

Attention à la division par zéro : la méthode que tu montre présente ce danger sir aucun vote n'a été enregistré. C'est pour ça que j'ai procédé autrement.
Tout à fait.. aller je me replonge dans les fractions et autre division par 0 :x

par Cyrano » 05 oct. 2005, 22:40

Attention à la division par zéro : la méthode que tu montre présente ce danger sir aucun vote n'a été enregistré. C'est pour ça que j'ai procédé autrement.

par Truc » 05 oct. 2005, 22:38

j'ai regardé aussi et pourquoi faire simple quand on peut faire compliqué, hein :wink:
une formule fonctionne pourquoi en changer... par exemple:
$oui2= (($oui*100) / ($oui+$non+$ok));
$ok2 = (($ok*100)  / ($oui+$non+$ok));
$non2= (($non*100) / ($oui+$non+$ok));

echo 'oui='.$oui.' non='. $non.' ok='.$ok;
En faite c'est exactement ce que tu as fait Cyrano mais comme ça on voit mieux :lol:

par Cyrano » 05 oct. 2005, 22:23

L'erreur vient de ta manière de calculer, voici un proposition de correction:
$total = (($oui + $non + $ok) != 0) ? 100/($oui + $non + $ok) : 0;
$oui = $oui * $total;
$non = $non * $total;
$ok = $ok * $total;

re:Demande d'aide pour sondage !!!

par blustic » 05 oct. 2005, 21:15

Merci pour ton indication mais cela n'a rien changé

J'ai placé ta ligne de code juste après l'ouverture de la balise php : <?

Cétait bien ça que tu m'avais demandé ?

Mais le nombre de pourcentage reste toujours le meme que le nombre de clic pour ok aussi je tien à préciser que pour "oui" il n'y a aucun probleme et j'ai remarqué que lorsqu'il n'y a aucun vote si je clic sur "ok" (3eme colonne" en premier ça m'affiche
oui:0% non:99% ok:1%

Je pense qu'il y a un probleme entre le non et le ok mais je vois pas du tout j'ai beau vérifier le script 10fois cela ne change rien

Merci de ton aide

par Cyrano » 05 oct. 2005, 20:49

Commence par rajouter ceci en début de script et teste à nouveau:
$vote = isset($_POST['vote']) ? $_POST['vote'] : "";

Demande d'aide pour sondage !!!

par blustic » 05 oct. 2005, 20:40

Bonjour, :?

J'ai réalisé (grace à un code que j'avais) un petit code de sondage malheureusement lors de mon affichage grafique les statistiques ne fonctionnent pas correctement

Pour le ok il n'y a aucun probleme mais pour le collone non et la dernière (qui na pa de nompourl'instantmais "ok" dan le script)ily a un disfonctionement le % pour la dernière colone est celui du nombre de clic sur ok

Pouvez vous m'aider voici le code

Merci d'avance
<?
// ---------------------------------------------------------
// - récupére les variables qui vont permettre l'affichage de
// - la hauteur des colonnes oui et non (affichage graphique)
// ---------------------------------------------------------

if($vote == 1)
{
    $fich="oui.txt";
    $fp=fopen("$fich","r+");
    $oui=fgets($fp,10);
    $oui++;
    fseek($fp,0);
    fputs($fp,$oui);
    fclose($fp);

}
if ($vote == 2)
{
    $fich="non.txt";
    $fp=fopen("$fich","r+");
    $non=fgets($fp,10);
    $non++;
    fseek($fp,0);
    fputs($fp,$non);
    fclose($fp);

}
if ($vote == 3)
{
    $fich="ok.txt";
    $fp=fopen("$fich","r+");
    $ok=fgets($fp,10);
    $ok++;
    fseek($fp,0);
    fputs($fp,$ok);
    fclose($fp);
}
$fich="oui.txt";
$fp=fopen("$fich","r+");
$oui=fgets($fp,10);
fclose($fp);

$fich="non.txt";
$fp=fopen("$fich","r+");
$non=fgets($fp,10);
fclose($fp);

$fich="ok.txt";
$fp=fopen("$fich","r+");
$ok=fgets($fp,10);
fclose($fp);

$result = (($oui*100) / ($oui+$non+$ok));
$oui= $result;
$non= 100 - ($oui + $ok) ;
$ok= 100 - ($oui + $non) ;

// ----------------------------------------------------------
// - Une fois les variables stockées je peux les rajouter
// - ds les attributs height de mes deux images oui et non
// ----------------------------------------------------------
?> 
<table border="0" cellspacing=0 cellpadding=0 align="center">
  <tr>
    <td>
      <img src="images/graph_gh.gif" width="30" height="98"><img src="images/space.gif" width="15" height="10"><img src="images/oui.gif" width="10" height="<? echo $oui; ?>"><img src="images/space.gif" width="15" height="10"><img src="images/non.gif" width="10" height="<? echo $non; ?>"><img src="images/space.gif" width="15" height="10"><img src="images/ok.gif" width="10" height="<? echo $ok; ?>"></td></tr><tr><td><img src="images/graph_bs.gif" width="125" height="12" border=0>
    </td>
  </tr>
</table>
<br>
<form method="post" action="essai1.php">
  <div align="center">
  <font color="#FF9933"><b>
  <input type="radio" name="vote" value="1" >&nbsp;oui 
  <input type="radio" name="vote" value="2">&nbsp;non
  <input type="radio" name="vote" value="3">&nbsp;ok
  </b></font>
  <br><br>&nbsp; 
  <input type=image src="images/voter.gif" name="submit" value="Envoyer">
  </div>
</form>
</td>
</tr>
</table>
<?
// ----------------------------------------------------------
// - Récupérer les Variables pour l'affichage en ASCii
// ----------------------------------------------------------
$fich="oui.txt";
$fp=fopen("$fich","r+");
$oui=fgets($fp,10);
$pour = $oui ;
fclose($fp);

$fich="non.txt";
$fp=fopen("$fich","r+");
$non=fgets($fp,10);
$contre = $non ;
fclose($fp);

$fich="ok.txt";
$fp=fopen("$fich","r+");
$ok=fgets($fp,10);
$neutre = $ok ;
fclose($fp);

$result = (($oui*100) / ($oui+$non+$ok));
$oui= $result;
$non= 100 - ($oui + $ok) ;
$ok= 100 - ($oui + $non) ;
// ----------------------------------------------------------
// - Affichage des résultats en TXT et en %
// - la fonction intval(); permet de ne pas avoir d'arrondir
// - le résultat et de ne pas avoir 10 chiffres après la virgule
// ----------------------------------------------------------
?>
<center>
<font color="#FF9933"><b>
OUI [<span class=""><? print(intval($oui));?>%</span>] 
NON [<span class=""><? print(100-(intval($oui)+intval($ok)));?>%</span>]
OK [<span class=""><? print(100-(intval($oui)+intval($non)));?>%</span>]<br>
VOTANTS[<span class=""><? print($pour + $contre + $neutre);?></span>]<br><br>
</b>
</font>
</center>
</td>
</tr>
</table>
</td>
</tr>
</table>