Prob de sondage

Résolu
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 - 6 mai 2010 à 01:51
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015 - 11 mai 2010 à 03:30
bonjour à vous, j'aimerais bien que le sondage ci-dessous puisse marcher correctement... tous marche bien exepté pour mon "système" anti-triche par IP j'aimerais savoir pourquoi ca marche pas et comment régler ce problème .. merci...

<?php

$resulta = mysql_query("SELECT * FROM sondage") or die ('Erreur : '.mysql_error() );
$nombre = mysql_num_rows($resulta);
$row = mysql_fetch_array($resulta);
$ip = getenv('REMOTE_ADDR');

if($ip != $row['ip'] ) {

echo '

Sondage





Que penses-tu du Design ?


<form method ="post" action="index.php">
Ouais, il est simpa




Je sais pas, il manque quelque chose




Hmmm, T\'en arrache





</form>
';

if (!empty($_POST) and $ip != $row['ip'] ){
$ip = getenv('REMOTE_ADDR');
mysql_query("INSERT INTO sondage(nom, ip) VALUES('$_POST[nom]','$ip')");
echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="http://www.notececi.com/"
</SCRIPT>';
}
}
else{

$req = mysql_query("SELECT * FROM sondage WHERE nom='sympa' ") or die ('Erreur : '.mysql_error() );
$reqnbr = mysql_num_rows($req);
$percent = $reqnbr * 100 / $nombre;
$percentt = round($percent, 0);

$req2 = mysql_query("SELECT * FROM sondage WHERE nom='manque' ") or die ('Erreur : '.mysql_error() );
$reqnbr2 = mysql_num_rows($req2);
$percent2 = $reqnbr2 * 100 / $nombre;
$percentt2 = round($percent2, 0);

$req3 = mysql_query("SELECT * FROM sondage WHERE nom='arrache' ") or die ('Erreur : '.mysql_error() );
$reqnbr3 = mysql_num_rows($req3);
$percent3 = $reqnbr3 * 100 / $nombre;
$percentt3 = round($percent3, 0);

echo '


Sondage





Résultat(s) de

Que penses-tu du Design ?


Ouais, il est simpa


'.$reqnbr.' / '.$percentt.'%


Je sais pas, il manque quelque chose


'.$reqnbr2.' / '.$percentt2.'%


Hmmm, T\'en arrache


'.$reqnbr3.' / '.$percentt3.'%




';
}

echo '
'.$nombre.' vote(s)
';
?>

20 réponses

devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
6 mai 2010 à 03:24
salut
la partie anti-triche ne vas pas marcher
vu que tu fait:
$resulta = mysql_query("SELECT * FROM sondage") or die ('Erreur : '.mysql_error() );
$nombre = mysql_num_rows($resulta);
$row = mysql_fetch_array($resulta);

ici avec $row = mysql_fetch_array($resulta); tu ne recupere que le premier resultat alors que ta requete retourne N resultat ce qui transforme ton code antitriche efficace en code anti-triche aleatoire en effet ton code ne compare l'ip de l'utilisateur en cours qu'avec le premier resultat renvoyer par ta requetete pour rectifie cela tu doit effectuer une boucle qui comparer chaque row['ip'] avec l'ip en cours
en plus de ca utilise pluto mysql_fetch_assoc que mysql_fetch_array histoire de ne utiliser de ressource unitilement et essaye de revoir des prés tes controle
3
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
8 mai 2010 à 00:22
ok je penses comprendre peux-tu m'envoyer la source rectifier car j'ai essayer et jme suis planté.. =/ merci mec
3
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
8 mai 2010 à 02:05
comme je te l'avis dit au paravant j'ai pas bien compris la logic de tes controle alors j'ai du changer l'ordre suivant une des logique d'un sondage
<?php
//dabord verifier si on doit pas prendre en compte un nouveau vote


if (isset($_POST)) {//pas besoin du empty puisque les valeur envoyer sont en lecture seule
    $ip =  getenv('REMOTE_ADDR');
$nom = $_POST['nom'];
    mysql_query("INSERT INTO sondage(nom, ip) VALUES('$nom','$ip')");
     echo '<SCRIPT LANGUAGE="JavaScript">
           document.location.href="http://www.notececi.com/"
          </SCRIPT>';
     }
}

//on affiche les resultats
$sql_nombre = mysql_query("SELECT COUNT(*) AS nombre FROM sondage") or die ('Erreur : '.mysql_error() );
$req_nombre = mysql_fetch_assoc($sql_nombre);
$nombre = $req_nombre['nombre'];

$req = mysql_query("SELECT * FROM sondage WHERE nom='sympa' ") or die ('Erreur : '.mysql_error() );
$reqnbr = mysql_num_rows($req);
$percent = $reqnbr * 100 / $nombre;
$percentt = round($percent, 0);

$req2 = mysql_query("SELECT * FROM sondage WHERE nom='manque' ") or die ('Erreur : '.mysql_error() );
$reqnbr2 = mysql_num_rows($req2);
$percent2 = $reqnbr2 * 100 / $nombre;
$percentt2 = round($percent2, 0);

$req3 = mysql_query("SELECT * FROM sondage WHERE nom='arrache' ") or die ('Erreur : '.mysql_error() );
$reqnbr3 = mysql_num_rows($req3);
$percent3 = $reqnbr3 * 100 / $nombre;
$percentt3 = round($percent3, 0);

echo '


 Sondage 





Résultat(s) de

Que penses-tu du Design ?


Ouais, il est simpa


'.$reqnbr.' / '.$percentt.'%


Je sais pas, il manque quelque chose


'.$reqnbr2.' / '.$percentt2.'%


Hmmm, T\'en arrache


'.$reqnbr3.' / '.$percentt3.'%




';
echo '
'.$nombre.' vote(s)
';

//Ici maintenant si on doit oui ou non afficher le formulaire de vote
$resulta  = mysql_query("SELECT * FROM sondage") or die ('Erreur : '.mysql_error() );

$ip =  getenv('REMOTE_ADDR');

//cette variable va dire oui ou non on 'a trouver l'ip 
// elle est initialiser a false si a la sortie de la boucle elle vau true c'est qu'on a trouver
// l'ip
$is_found = false;
while ($row = mysql_fetch_assoc ($resuta ) ) {

       // si on trouve l'ip
   if ($row['ip'] == $ip ){
       
   // On met is_found a true
   $is_found = true;
   // Et on force l'arret de la boucle initule de continuer
   break; 
   }
}
//liberer les ressources
mysql_free_result($resulta);

//test de la valeur de is_found false on affiche le formulaire true on affiche pas

if (!$is_found) {//is_found vaus false on affiche le formulaire
echo '

 Sondage 





Que penses-tu du Design ?


<form method ="post" action="index.php">
Ouais, il est simpa




Je sais pas, il manque quelque chose




Hmmm, T\'en arrache





</form>
';
} //pas besoin de traiter l'autre cas puisqu'il y'a que deux cas
?>
3
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
11 mai 2010 à 00:22
est-ce que le formulaire s'affiche a chaque fois que tu charge la page meme si tu as deja poster
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
11 mai 2010 à 00:27
au fait le probleme vien qu'on test $_POST c'est qui est vrai donc change
if (isset($_POST)) {
---
par if (isset($_POST['nom'])) {
et sa devra marcher
3
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
8 mai 2010 à 13:58
ouais merci :P ca m'aide énormément mais par contre j'obtiens quelques petites erreurs encore sur la ligne 6 et 73

Notice: Undefined index: nom in C:\WWW\website\modules\sondage.inc.php on line 6
Sondage

Notice: Undefined variable: resuta in C:\WWW\website\modules\sondage.inc.php on line 73

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\WWW\website\modules\sondage.inc.php on line 73
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
8 mai 2010 à 14:04
Notice: Undefined index: nom in C:\WWW\website\modules\sondage.inc.php on line 6
Sondage // ici ton formulaire n'as pas envoyer la variable nom verifie du cote de ton formulaire

Notice: Undefined variable: resuta in C:\WWW\website\modules\sondage.inc.php on line 73
ici change resuta en resulta ce sont mes erreur de frappe
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\WWW\website\modules\sondage.inc.php on line 73 //des que tu corrigera la precedente celle la devra aller
0
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
10 mai 2010 à 23:38
Ok merci pour l'erreur 73 mais du cote de mon formulaire je n'ai rien trouvé qui clochait ?
0
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
10 mai 2010 à 23:40
à chaque fois j'actualise la page une nouvelle entrée s'ajoute à ma base de donnée et elle le nom est vide =/
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
11 mai 2010 à 00:45
re-salut bon cette fois j'ai pris la peine de tester tous chez moi alors j'espere que cette fois ca sois vraiment resolut
<?php
//dabord verifier si on doit pas prendre en compte un nouveau vote
mysql_connect("localhost","root","");
mysql_select_db("test");

if (isset($_POST['nom'])) {//pas besoin du empty puisque les valeur envoyer sont en lecture seule
    $ip =  getenv('REMOTE_ADDR');
$nom = $_POST['nom'];
    mysql_query("INSERT INTO sondage(nom, ip) VALUES('$nom','$ip')");
     echo '<SCRIPT LANGUAGE="JavaScript">
           document.location.href="http://www.notececi.com/"
          </SCRIPT>';
     }


//on affiche les resultats
$sql_nombre = mysql_query("SELECT COUNT(*) AS nombre FROM sondage") or die ('Erreur : '.mysql_error() );
$req_nombre = mysql_fetch_assoc($sql_nombre);
$nombre = $req_nombre['nombre'];

$req = mysql_query("SELECT * FROM sondage WHERE nom='sympa' ") or die ('Erreur : '.mysql_error() );
$reqnbr = mysql_num_rows($req);

if ($reqnbr > 0 ) {$percent $reqnbr * 100 / $nombre; $percentt round($percent, 0);}
else {$percentt = 0;}

$req2 = mysql_query("SELECT * FROM sondage WHERE nom='manque' ") or die ('Erreur : '.mysql_error() );
$reqnbr2 = mysql_num_rows($req2);
if ($reqnbr2 > 0 ) {$percent2 $reqnbr2 * 100 / $nombre; $percentt2 round($percent2, 0);}
else { $percentt2 = 0;}


$req3 = mysql_query("SELECT * FROM sondage WHERE nom='arrache' ") or die ('Erreur : '.mysql_error() );
$reqnbr3 = mysql_num_rows($req3);
if ( $reqnbr3 > 0 ) {$percent3 $reqnbr3 * 100 / $nombre; $percentt3 round($percent3, 0); }
else { $percentt3 = 0;}
echo '


 Sondage 





Résultat(s) de

Que penses-tu du Design ?


Ouais, il est simpa


'.$reqnbr.' / '.$percentt.'%


Je sais pas, il manque quelque chose


'.$reqnbr2.' / '.$percentt2.'%


Hmmm, T\'en arrache


'.$reqnbr3.' / '.$percentt3.'%




';
echo '
'.$nombre.' vote(s)
';

//Ici maintenant si on doit oui ou non afficher le formulaire de vote
$resulta  = mysql_query("SELECT * FROM sondage") or die ('Erreur : '.mysql_error() );

$ip =  getenv('REMOTE_ADDR');

//cette variable va dire oui ou non on 'a trouver l'ip 
// elle est initialiser a false si a la sortie de la boucle elle vau true c'est qu'on a trouver
// l'ip
$is_found = false;
while ($row = mysql_fetch_assoc ($resulta ) ) {

       // si on trouve l'ip
   if ($row['ip'] == $ip ){
       
   // On met is_found a true
   $is_found = true;
   // Et on force l'arret de la boucle initule de continuer
   break; 
   }
}
//liberer les ressources
mysql_free_result($resulta);

//test de la valeur de is_found false on affiche le formulaire true on affiche pas

if (!$is_found) {//is_found vaus false on affiche le formulaire
echo '

 Sondage 





Que penses-tu du Design ?


<form method ="post" action="'.$_SERVER['PHP_SELF'].'">
Ouais, il est simpa




Je sais pas, il manque quelque chose




Hmmm, T\'en arrache





</form>
';
} //pas besoin de traiter l'autre cas puisqu'il y'a que deux cas
?>
0
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
11 mai 2010 à 01:49
je viens de tester ca semblait logique par contre le formulaire ne s'affiche toujours pas
0
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
11 mai 2010 à 01:49
ops dsl javais pas vue le dernier
0
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
11 mai 2010 à 01:53
bah cher moi ca donne le formulaire + les resultats
0
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
11 mai 2010 à 01:54
afficher l'un par dessus l'autre
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
11 mai 2010 à 02:00
mais juste pour la premiere fois quand l'utilisateur vote le formulaire ne sera pas visible seul les resultat c'est ce que j'ai obtenu moi et meme apres vote j'ai ete rediriger vers ton site
0
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
11 mai 2010 à 03:03
p-e que c'est ma version PHP O_O (5.2.8)ou je sais pas -_- mais merci tout d'meme énormément
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
11 mai 2010 à 03:24
moi j'ai la version 3.5 mais le probleme ne doit venir de la mais toi tu as le formulaire meme apres vote ou bien ?
0
Xizar Messages postés 18 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 11 mai 2010 1
11 mai 2010 à 03:25
a non ok j'ai changé de place la partie du code des résultats je l'ai mit après le dernier if(){} ou jai r'ajouté else{//ici tout le truck des résultats} et ca marche numéro 1 merci pour ton aide
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
11 mai 2010 à 03:29
et voici aussi la table que j'ai utiliser
CREATE TABLE `sondage` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(20) NOT NULL,
`ip` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
11 mai 2010 à 03:30
ok
0
Rejoignez-nous