|
 Posté le 05/04/2010 @ 12:24 |
Petit astucien
| Bonjour à tous, J'ai fait un sondage qui fonctionne bien comme je l'ai fait. En faite il s'affiche le formulaire sur ma page d'accueil avec les résultats juste en dessous. Quand je clique sur votez les résultats s'affiche dans une autre pages. Le sondage fonctionne avec reconnaissance d'ip. Ce que je voudrait c'est que des que quelqu'un a voté, le formulaire n'existe plus et soit remplacer par les résultats Voici les codes dans page d'accueil:
// Formulaire
$sql = mysql_query('SELECT * FROM sondage ORDER BY id DESC LIMIT 0,1'); while($resultat = mysql_fetch_array($sql)) { $id_sondage = $resultat['id']; $question = $resultat['question'];
echo ' <form method="POST" action="sondages_resultats.php?id='.$id_sondage.'"> <p class="sondage_question">'.$question.'</p> ';
$re_1 = $resultat['reponse1']; $re_2 = $resultat['reponse2']; $re_3 = $resultat['reponse3']; $re_4 = $resultat['reponse4'];
if(!empty($resultat['reponse1'])) { echo '<p class="sondage_choix"><input type="radio" value="1" name="reponse"> '.$re_1.'<br/>'; } if(!empty($resultat['reponse2'])) { echo '<input type="radio" value="2" name="reponse">'.$re_2.'<br/>'; } if(!empty($resultat['reponse3'])) { echo '<input type="radio" value="3" name="reponse">'.$re_3.'<br/>'; } if(!empty($resultat['reponse4'])) { echo '<input type="radio" value="4" name="reponse">'.$re_4.'<br/></p>'; } }
echo '<p class"sondage"> <input type="submit" value="Voter"> </p> </form> ';
// Résultats
$connexion = mysql_connect("*******" , "*****" , "****"); $sql = "SELECT * FROM resultats WHERE numero='$id_sondage'"; $result = mysql_db_query('********' , $sql , $connexion); $votes = mysql_num_rows($result); if($votes == 0) { $votes = 1; } $sql = "SELECT * FROM resultats WHERE numero='$id_sondage' AND reponse='1'"; $result = mysql_db_query("******",$sql,$connexion); $rep1 = mysql_num_rows($result); $sql = "SELECT * FROM resultats WHERE numero='$id_sondage' AND reponse='2'"; $result = mysql_db_query("****",$sql,$connexion); $rep2 = mysql_num_rows($result); $sql = "SELECT * FROM resultats WHERE numero='$id_sondage' AND reponse='3'"; $result = mysql_db_query("******",$sql,$connexion); $rep3 = mysql_num_rows($result); $sql = "SELECT * FROM resultats WHERE numero='$id_sondage' AND reponse='4'"; $result = mysql_db_query("********",$sql,$connexion); $rep4 = mysql_num_rows($result);
$deb1 = 100*$rep1; $fin1 = $deb1 / $votes; $deb2 = 100*$rep2; $fin2 = $deb2 / $votes; $deb3 = 100*$rep3; $fin3 = $deb3 / $votes; $deb4 = 100*$rep4; $fin4 = $deb4 / $votes;
echo '<script language="javascript"> reponse1 = Math.round('.$fin1.'); reponse2 = Math.round('.$fin2.'); reponse3 = Math.round('.$fin3.'); reponse4 = Math.round('.$fin4.'); ';
$sql = "SELECT * FROM sondage_ip WHERE numero='$id_sondage' AND ip='$REMOTE_ADDR'"; $result = mysql_db_query("*******" , $sql , $connexion); $lignes = mysql_num_rows($result); if($lignes == 1) {
if(!empty($re_1)) { echo ' document.write(\'<center><b>1. '.$re_1. ' ('.$rep1.')</b><br/> <img border="0" src="img/sondage.gif" height=5 WIDTH="\'+reponse1+\'"> \'+reponse1+\'%</center>\'); '; } if(!empty($re_2)) { echo ' document.write(\'<center><b>2. '.$re_2.' ('.$rep2.')</b><br/> <img border="0" src="img/sondage.gif" height=5 WIDTH="\'+reponse2+\'"> \'+reponse2+\'%</center>\'); '; } if(!empty($re_3)) { echo ' document.write(\'<center><b>3. '.$re_3.' ('.$rep3.')</b><br/> <img border="0" src="img/sondage.gif" height=5 WIDTH="\'+reponse3+\'"> \'+reponse3+\'%</center>\'); '; } if(!empty($re_4)) { echo ' document.write(\'<center><b>4. '.$re_4.' ('.$rep4.')</b><br/> <img border="0" src="img/sondage.gif" height=5 WIDTH="\'+reponse4+\'"> \'+reponse4+\'%</center>\'); '; } echo '</script>';
} $total_votants=$rep1 + $rep2 + $rep3 + $rep4; echo '<p>Total Votants : ' . $total_votants . '</p>';
Pages résultats:
<?php
$sql = mysql_query('SELECT * FROM sondage_ip WHERE numero="$id" AND ip="$REMOTE_ADDR"') or die(mysql_error()); $lignes = mysql_num_rows($sql); if($lignes == 0) { $sql = mysql_query('INSERT INTO sondage_ip VALUES("$id","$REMOTE_ADDR")'); $sql = mysql_query('INSERT INTO resultats VALUES("$id", "$reponse")');
print 'Merci d\'avoir voté !'; } else { print 'Vous avez déjà voté !'; }
$sql = mysql_query('SELECT * FROM sondage ORDER BY id DESC LIMIT 0,1') or die(mysql_error()); while($resultat = mysql_fetch_array($sql)) { $id_sondage = $resultat['id']; $question = $resultat['question']; echo ' <form method="POST" action="sondage_resultats.php?id='.$id_sondage.'"> <b>'.$question.'</b><br><br> ';
$re_1 = $resultat['reponse1']; $re_2 = $resultat['reponse2']; $re_3 = $resultat['reponse3']; $re_4 = $resultat['reponse4'];
if(!empty($resultat['reponse1'])) { echo '<input type="radio" value="1" name="reponse"><span class="sondage_choix"> '.$re_1.'</span><br>'; } if(!empty($resultat['reponse2'])) { echo '<input type="radio" value="2" name="reponse"><span class="sondage_choix"> '.$re_2.'</span><br>'; } if(!empty($resultat['reponse3'])) { echo '<input type="radio" value="3" name="reponse"><span class="sondage_choix"> '.$re_3.'</span><br>'; } if(!empty($resultat['reponse4'])) { echo '<input type="radio" value="4" name="reponse"><span class="sondage_choix"> '.$re_4.'</span><br>'; } }
echo ' <br> <input type="submit" value="Voter"> </form>
<br> ';
$sql = mysql_query('SELECT * FROM resultats WHERE numero="$id_sondage"') or die(mysql_error()); $votes = mysql_num_rows($sql); if($votes == 0) { $votes = 1; } $sql = mysql_query('SELECT * FROM resultats WHERE numero="$id_sondage" AND reponse="1"'); $rep1 = mysql_num_rows($sql);
$sql = mysql_query('SELECT * FROM resultats WHERE numero="$id_sondage" AND reponse="2"'); $rep2 = mysql_num_rows($sql);
$sql = mysql_query('SELECT * FROM resultats WHERE numero="$id_sondage" AND reponse="3"'); $rep3 = mysql_num_rows($sql);
$sql = mysql_query('SELECT * FROM resultats WHERE numero="$id_sondage" AND reponse="4"'); $rep4 = mysql_num_rows($sql);
$deb1 = 100*$rep1; $fin1 = $deb1 / $votes; $deb2 = 100*$rep2; $fin2 = $deb2 / $votes; $deb3 = 100*$rep3; $fin3 = $deb3 / $votes; $deb4 = 100*$rep4; $fin4 = $deb4 / $votes;
echo '<script language="javascript"> reponse1 = Math.round('.$fin1.'); reponse2 = Math.round('.$fin2.'); reponse3 = Math.round('.$fin3.'); reponse4 = Math.round('.$fin4.'); ';
$sql = mysql_query('SELECT * FROM sondage_ip WHERE numero="$id_sondage" AND ip="$REMOTE_ADDR"'); $lignes = mysql_num_rows($sql); if($lignes == 1) {
if(!empty($re_1)) { echo ' document.write(\'<b>1. '.$re_1. ' ('.$rep1.')</b><br/> <img border="0" src="barre.gif" height=5 WIDTH="\'+reponse1+\'"> <b> \'+reponse1+\'%</b><br/><br/>\'); '; } if(!empty($re_2)) { echo ' document.write(\'<b>2. '.$re_2.' ('.$rep2.')</b><br/> <img border="0" src="barre.gif" height=5 WIDTH="\'+reponse2+\'"> <b> \'+reponse2+\'%</b><br/><br/>\'); '; } if(!empty($re_3)) { echo ' document.write(\'<b>3. '.$re_3.' ('.$rep3.')</b><br/> <img border="0" src="barre.gif" height=5 WIDTH="\'+reponse3+\'"> <b> \'+reponse3+\'%</b><br/><br/>\'); '; } if(!empty($re_4)) { echo ' document.write(\'<b>4. '.$re_4.' ('.$rep4.')</b><br/> <img border="0" src="barre.gif" height=5 WIDTH="\'+reponse4+\'"> <b> \'+reponse4+\'%</b><br/><br/>\'); '; } echo '</script>';
} $total_votants=$rep1 + $rep2 + $rep3 + $rep4; echo '<p>Total Votants : ' . $total_votants . '</p>';
?>
J'ai fait comme sa mais cela ne fonctionne pas:
$sql = mysql_query('SELECT * FROM sondage_ip WHERE numero="$id" AND ip="$REMOTE_ADDR"') or die(mysql_error()); $lignes = mysql_num_rows($sql); if($lignes == 0) { //formulaire; } else { //resultats; }
Merci pour votre aide
Modifié par chester80 le 07/04/2010 16:26
|
|
|
|
|
|
Posté le 05/04/2010 à 17:38 |
Astucien | tu veux dire que si l'IP a déjà voté, alors ne pas réafficher le formulaire ?
Tu peux trouver l'IP dans $_SERVER['REMOTE_ADDR']
il suffit de voir s'il y a un votant dont l'IP vaut cette valeur. Si zéro : on affiche le formulaire, autrement (1 ligne ou plus) : on n'affiche pas.
Mais l'IP n'est pas une donnée à 100% sûre. |
|
Posté le 05/04/2010 à 22:02 |
Petit astucien
| C'est ce que j'ai fais mais cela ne fonctionne pas (Voir plus haut).
Merci pour votre aide |
|
Posté le 06/04/2010 à 16:16 |
Petit astucien
| |
|
Posté le 06/04/2010 à 20:08 |
Petit astucien
| Bonjour,
Je lis actuellement ton code mais si j'étais toi j'éditerais de suite mon message car ce n'est pas une bonne idée de diffuser les accès à ta base de donnée chez 1and1.
EDIT : Tu utilises dans ta requête ou tu test la présence de l'ip cette variable : $REMOTE_ADDR. Est-ce que tu as affecté à cette variable la valeur de $_SERVER['REMOTE_ADDR'] ou s'agit-il d'une erreur ?
Modifié par Cedders le 06/04/2010 20:11 |
|
Posté le 07/04/2010 à 16:29 |
Petit astucien
| Cedders a écrit :
Bonjour,
Je lis actuellement ton code mais si j'étais toi j'éditerais de suite mon message car ce n'est pas une bonne idée de diffuser les accès à ta base de donnée chez 1and1.
EDIT : Tu utilises dans ta requête ou tu test la présence de l'ip cette variable : $REMOTE_ADDR. Est-ce que tu as affecté à cette variable la valeur de $_SERVER['REMOTE_ADDR'] ou s'agit-il d'une erreur ?
J'avais completement zapper de supprimer les acces voila c'est fait
tu parle de quel page?
Car resultats fonctionne tres bien alors j'ai repris la meme condition que la page résulats pour mettre sur ma page d'acueil et cela donne sa
$sql = mysql_query('SELECT * FROM sondage_ip WHERE numero="$id" AND ip="$REMOTE_ADDR"') or die(mysql_error()); $lignes = mysql_num_rows($sql); if($lignes == 0) { //formulaire; } else { //resultats; }
Mais sa ne focntionne pas
|
|
Posté le 07/04/2010 à 19:29 |
Astucien |
sql = mysql_query('SELECT * FROM sondage_ip WHERE numero="$id" AND ip="$REMOTE_ADDR"') or die(mysql_error());
ne marchera pas car ta chaine de caractères est délimitée par une apostrophe, et la variable $machin ne sera donc pas remplacée par sa valeur.
Solution 1 (crade) : mettre des guillemets
sql = mysql_query("SELECT * FROM sondage_ip WHERE numero='$id' AND ip='$REMOTE_ADDR'") or die(mysql_error());
Solution 2 (plus propre) : concaténer, ou utiliser des requêtes préparées (ou (intermédiaire) un pseudo casting :
$sql = sprintf("SELECT * FROM sondage_ip WHERE numero='%d' AND ip='%d';", $id, $REMOTE_ADDR) or die(mysql_error());
|
|
Posté le 07/04/2010 à 23:13 |
Petit astucien
| Ha bien vu Malcolm ... j'avais complètement zapper les ' et ". |
|
Posté le 08/04/2010 à 20:13 |
Petit astucien
| Salut
Je viens de faire et c'est pareil.
J'ai toujours la condition1 et jamais la condition 2 |
|
Posté le 08/04/2010 à 22:24 |
Petit astucien
| Tu as testé ta requête sql directement sur phpmyadmin ou autre pour voir si celà venait d'une erreur SQL ou de ton script php ?
Sinon moi je ferais directement comme ça
if(mysql_num_rows($sql)) { //formulaire; } else { //resultats; }
mais bon je crois pas que ça va résoudre ton problème :D donc regarde si ta requête sql fonctionne via phpmyadmin et tiens nous au courant. |
|
Posté le 09/04/2010 à 00:22 |
| Il est inquiétant de voir même des TOPOS "sérieux" se baser sur l'IP alors que tout aprentis, hackeur niveau maternelle, sait changer son IP toute les cinq minutes.
Le pire étant que même ceux qui ne veulent pas tricher et sont par exemple sur un SAGEM 800 chez Orange sertont sans arret reconnectés avec une adresse IP nouvelle ! |
|
Posté le 09/04/2010 à 05:40 |
Petit astucien
| Oui je sais sa mais des que j'aurai fait mon espace membre je changer la condition de l'ip par la connexion de l'utilisateur.
Voila |
|
|
|
|
|