> Tous les forums > Forum des Webmasters
 Problème avec condition
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
chester80
  Posté le 05/04/2010 @ 12:24 
Aller en bas de la page 
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
Publicité
Malcolm
 Posté le 05/04/2010 à 17:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  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.

chester80
 Posté le 05/04/2010 à 22:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

C'est ce que j'ai fais mais cela ne fonctionne pas (Voir plus haut).

Merci pour votre aide

chester80
 Posté le 06/04/2010 à 16:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Personne?

Cedders
 Posté le 06/04/2010 à 20:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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
chester80
 Posté le 07/04/2010 à 16:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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

Malcolm
 Posté le 07/04/2010 à 19:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  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());

Cedders
 Posté le 07/04/2010 à 23:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Ha bien vu Malcolm ... j'avais complètement zapper les ' et ".

chester80
 Posté le 08/04/2010 à 20:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut

Je viens de faire et c'est pareil.

J'ai toujours la condition1 et jamais la condition 2

Cedders
 Posté le 08/04/2010 à 22:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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.

christele
 Posté le 09/04/2010 à 00:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

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 !

chester80
 Posté le 09/04/2010 à 05:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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

Publicité
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
199,99 €Ecran 23,8 pouces Acer Nitro XV240Y (FullHD, IPS, 1 ms, 165 Hz, FreeSync; pied réglable) à 199,99 €
259 € -23%

La Fnac fait une promotion sur l'écran 23,8 pouces Nitro XV240YPbmiiprx qui passe à 199,99 € alors qu'on le trouve ailleurs à partir de 259 €. Cet écran dédié aux joueurs dispose d'une dalle IPS Full HD de 1920x1080 pixels. Grâce à sa compatibilité Freesync et Gsync (165Hz) et son temps de réponse rapide de 1 ms, ce moniteur Acer offre une excellente fluidité d'affichage. Interfaces : 2 x HDMI, DP (1.2), Sortie de ligne audio. Pied ergonomique avec réglage de l'inclinaison, de la hauteur, du panoramique et de la rotation.


Voir l'offre
269,99 €Portable 15.6 pouces Lenovo IdeaPad 3 (Celeron, 4Go, SSD 128Go) + Office 365 à 269,99 €
349 € -23%

Cdsicount fait une promotion sur le PC portable 15.6 pouces Lenovo IdeaPad 3 15IGL05 qui passe à 269,99 € alors qu'on le trouve ailleurs à partir de 349 €. Ce portable possède un écran 15.6 pouces HD (1366x768) antireflet, un processeur Intel Celeron N4020, 4 Go de RAM et un SSD de 128 Go. Le WiFi, le bluetooth et l'USB 3.2 sont de la partie. Le tout tourne sous Windows 10S que vous pouvez gratuitement passer à Windows 10 Famille (puis Windows 11). Un abonnement d'un an à Microsoft Office 365 est également inclus. Une bonne affaire pour un PC adapté à la bureautique, à Internet et que vous pourrez emmener partout avec vous.


Voir l'offre
227 €Barbecue WEBER Master Touch GBS E-5750 57 cm à 227 € (+23,70 € en points Rakuten)
349 € -35%

Boulanger via Rakuten fait une promotion sur le barbecue Barbecue WEBER Master Touch GBS E-5750 57 cm qui passe à 227 € avec le code CR10 au lieu de 349 €. Rakuten vous rembourse aussi 23,70 € en points Rakuten utilisables pour vos prochains achats. La livraison est gratuite. 


Voir l'offre
749,99 €Ultrabook HONOR MagicBook 15 (Core i5, 16 Go, 512 Go SSD) à 749,99 €
899 € -17%

Amazon fait une promotion sur son ultrabook HONOR MagicBook 15 qui passe à 749,99 € au lieu de 899 €. Cet ordinateur portable possède un écran 15 pouces Full HD IPS, un processeur Intel Core i5-1135G7, 16 Go de mémoire DDR4, un SSD 512 Go PCIe NVME, le WiFi6 / Bluetooth 5.1, un lecteur d'empreintes, une webcam, un clavier rétro éclairé, une batterie 56 Wh (jusqu'à 10h d'autonomie) et ne pèse que 1,53 kg. Il fonctionne sous Windows 10 (que vous pouvez passer à Windows 11). Une très bonne affaire pour une machine compacte et puissante.


Voir l'offre

Sujets relatifs
Problème avec free
problème avec fichier "xxx.klm"
problème avec google
Problème avec le panel d'un hébergeur d'image
Problème avec onduleur APC; Back-UPS PRO 900
Probléme avec vos liens
Problème avec le mot casino
Problème avec clé d'activation.
Problème avec menu en javascript à éditer
Problème avec dewplayer
Plus de sujets relatifs à Problème avec condition
 > Tous les forums > Forum Forum des Webmasters