Alors évidemment comme même un expert aura toujours un code critiquable (je suis pas expert hein
), il y a des choses critiquables :
- Tout d'abord, j'ai incrémenté ton fichier form.php correctement, l'autre est long donc je ne le ferai pas par contre.
- Ensuite, je t'avais dit qu'il fallait mettre des guillemets pr les conditions, mais c'est dans le cas d'une chaine decaractères ! Si c'est une variable tu peux les supprimer (si tu compares les chaines de deux variables).
- Ensuite encore, j'ai rajouté un "else" après les "elseif" en effet... si quelqu'un envoit un autre choix ?
- Ta fonction "mysql_close()" n'est pas vraiment appelée au bon moment, à moins que tu n'arrêtes le script avant sa fin naturelle (au dernier ?> rencontré), mais ton mysql_close(); à la fin.
- Dans le où un choix est bien présent, tu rappelles "infocnx.php" et donc tu as deux connexions à ta base... inutile.
- Je te conseille d'éviter la méthode du ?>codehtml<?php on retourne à php. En effet ainsi ton serveur se dit "Hop php, hop pas php, hop php, hop pas php... et change de "cerveau" de lecture très souvent (puisqu'il ne lit pas de la même manière le PHP et le HTML). Cependant une liste de "echo '';" n'est pas non plus terrible. La meilleur méthode est la suivante :
&#60;?php
$display = "";
if&#40;&#41; &#123;
...
$display .= "Réponse a cette condition";
&#125;
else &#123;
...
$display.= "Réponse à cette condition 2";
&#125;
echo $display;
mysq_close&#40;&#41;;
?&#62;
Ainsi tu ne fais qu'un seul affichage (économie de ressources), et j'utilise ".=" plutot que "=" comme ça si tu veux rajouter quelque-chose au début de $display, ce qui y est inscrit plus tard ne l'écrase pas, ça s'y ajoute.
Voilà après modifications :
&#60;?php
include&#40;"infoscnx.php"&#41;;
$retour = mysql_query&#40;'SELECT COUNT&#40;*&#41; AS nbre_entrees FROM controle_ip WHERE ip=\'' . $_SERVER&#91;'REMOTE_ADDR'&#93; . '\''&#41;;
$donnees = mysql_fetch_array&#40;$retour&#41;;
if &#40;$donnees&#91;'nbre_entrees'&#93; == 0&#41; // L'ip ne se trouve pas dans la table, on permet le vote, et on ajoute l'ip dans la table
&#123;
if &#40;empty&#40;$_POST&#91;'choix'&#93;&#41;&#41;
&#123;
echo 'Vous n\'avez pas sélectionné de choix. Cliquez &#60;a href="javascript&#58;window.history.go&#40;-1&#41;"&#62;ici&#60;/a&#62; pour revenir a la page précédente';
&#125;
else
&#123;
include&#40;"choix.php"&#41;;
mysql_query&#40;'INSERT INTO controle_ip VALUES&#40;\'' . $_SERVER&#91;'REMOTE_ADDR'&#93; . '\'&#41;'&#41;;
if &#40;$_POST&#91;'choix'&#93; == $choix1&#41;
&#123;
mysql_query&#40;"INSERT INTO nomdelatable VALUES &#40;'".$_POST&#91;'choix'&#93;."', '', '', '', '', '', '', '', ''&#41;"&#41;;
&#125;
elseif &#40;$_POST&#91;'choix'&#93; == $choix2&#41;
&#123;
mysql_query&#40;"INSERT INTO nomdelatable VALUES &#40;'', '".$_POST&#91;'choix'&#93;."', '', '', '', '', '', '', ''&#41;"&#41;;
&#125;
elseif &#40;$_POST&#91;'choix'&#93; == $choix3&#41;
&#123;
mysql_query&#40;"INSERT INTO nomdelatable VALUES &#40;'', '', '".$_POST&#91;'choix'&#93;."', '', '', '', '', '', ''&#41;"&#41;;
&#125;
else &#123;
mysql_close&#40;&#41;;
die&#40;"Ce choix n'existe pas, ne trichez pas !"&#41;;
&#125;
echo 'Votre vote a bien été enregistré! Cliquez &#60;a href="lire.php"&#62;ici&#60;/a&#62; pour voir les résultats!';
&#125;
&#125;
else // L'ip se trouve déjà dans la table, on interdit le vote
&#123;
echo 'Vous avez déjà voté. Cliquez &#60;a href="javascript&#58;window.history.go&#40;-1&#41;"&#62;ici&#60;/a&#62; pour revenir a la page précédente';
&#125;
mysql_close&#40;&#41;;
?&#62;
Pour les archives je ne pige pas bien alors je dis rien.
Pour l'affichage il y a ce que j'ai dit au-dessus qui s'applique, mais aussi :
if &#40;"$titre_archive2" == Aucun&#41;
En correcte ça donne :
if&#40;$titre_archive2 == "Aucun"&#41;
Car les strings doivent être entre "", PHP les reconnait quand meme des fois sans les "" mais ca risque de foirer car il peut prendre ca pour une constante.
Enfin, je te conseillerai de réduire le nombre de requetes.
Tu fais 3 requetes pour la même table !
Pourquoi ne pas faire :
$ressource = mysql_query&#40;"SELECT choix FROM tatable ORDER BY choix"&#41;or die&#40;mysql_error&#40;&#41;&#41;;
$compteurs = array&#40;&#41;;
while&#40;list&#40;$choix&#41; = mysql_fetch_row&#40;$ressource&#41;&#41; &#123;
if&#40;$choix == 1&#41; &#123;
$compteurs&#91;1&#93;++;
&#125;
elseif&#40;$choix == 2&#41; &#123;
$compteurs&#91;2&#93;++;
&#125;
elseif&#40;$choix == 3&#41; &#123;
$compteurs&#91;3&#93;++;
&#125;
&#125;
Après bien sûr, à toi de voir, et de remplacer les valeurs.
Une chose encore, penses à mettre des "or die(mysql_error());" derrière tes mysql_query(), sinon quand tu auras une erreur SQL tu auras plus de mal pour le débuggage.
Sinon, dernière chose, ton module de sondage ne pourra gérer qu'un seul sondage par IP, car tu gère les IP dans une table sans dire pour quel sondage c'est, donc si avec mon IP je vote au sondage 1, je pourrai pas voter au sondage 2.
Je crois que c'est tout.