Prob de sondage [Résolu]

Signaler
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010
-
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015
-
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

Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

ok je penses comprendre peux-tu m'envoyer la source rectifier car j'ai essayer et jme suis planté.. =/ merci mec
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
?>
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

est-ce que le formulaire s'affiche a chaque fois que tu charge la page meme si tu as deja poster
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

Ok merci pour l'erreur 73 mais du cote de mon formulaire je n'ai rien trouvé qui clochait ?
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

à chaque fois j'actualise la page une nouvelle entrée s'ajoute à ma base de donnée et elle le nom est vide =/
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
?>
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

je viens de tester ca semblait logique par contre le formulaire ne s'affiche toujours pas
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

ops dsl javais pas vue le dernier
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

bah cher moi ca donne le formulaire + les resultats
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

afficher l'un par dessus l'autre
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

p-e que c'est ma version PHP O_O (5.2.8)ou je sais pas -_- mais merci tout d'meme énormément
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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 ?
Messages postés
18
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
11 mai 2010

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
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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;
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

ok