Problème de else sur script de sondage
De Wiki PC, Wiki Informatique.
Sommaire |
Description du problème :
Débutant en PHP, je crée un script PHP permettant de voter à un sondage. Je reçois l'erreur suivante :
Parse error: syntax error, unexpected '{' in C:\wamp\www\techno\form.php on line 24
Mon code PHP est le suivant :
<?php if (empty($_POST['choix'])) { echo 'Vous n\'avez pas sélectionné de choix. Cliquez AJOUTER JS ici pour revenir a la page.'; } else { if ($_POST['choix'] == Choix1) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('".$_POST['choix']."', '', '')"); mysql_close(); } elseif ($_POST['choix'] == Choix2) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('', '".$_POST['choix']."', '')"); mysql_close(); } else ($_POST['choix'] == Choix3) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('', '', '".$_POST['choix']."')"); mysql_close(); } } ?> </div> </body> </html>
Solution(s) proposée(s) :
Corriger les petites erreurs du script
Pour commencer, indenter le code PHP afin de mieux se retrouver et de mieux débugger.
Faire attention aux " dans les conditions, qui manquent, ou alors rajouter le $ manquant pour que ce soient des variables, code corrigé :
if (empty($_POST['choix'])) { echo 'Vous n\'avez pas sélectionné de choix. Cliquez AJOUTER JS ici pour revenir a la page.'; } else { if ($_POST['choix'] == Choix1) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('".$_POST['choix']."', '', '')"); mysql_close(); } elseif ($_POST['choix'] == Choix2) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('', '".$_POST['choix']."', '')"); mysql_close(); } else ($_POST['choix'] == Choix3) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('', '', '".$_POST['choix']."')"); mysql_close(); } }
Changer le else () invalide
L'opérateur else n'admet pas de parenthèses, remplacer ceci :
else ($_POST['choix'] == $Choix3) {
Soit par ceci :
elseif ($_POST['choix'] == $Choix3) {
Soit par ceci :
else {
Solution(s) retenue(s) :
Solution n°2, en transformant le else () { } en elseif() { }
Informations annexes :
Le script n'est pas très sécurisé et souffre de très fortes possibilités d'injections SQL, voici le code en plus sécurisé :
if (empty($_POST['choix'])) { echo 'Vous n\'avez pas sélectionné de choix. Cliquez AJOUTER JS ici pour revenir a la page.'; } else { if ($_POST['choix'] == $Choix1) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('".mysql_real_escape_string($_POST['choix'])."', '', '')"); mysql_close(); } elseif ($_POST['choix'] == $Choix2) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('', '".mysql_real_escape_string($_POST['choix'])."', '')"); mysql_close(); } else ($_POST['choix'] == $Choix3) { mysql_connect("localhost", "root", ""); mysql_select_db("nomdelabase"); mysql_query("INSERT INTO nomdelatable VALUES ('', '', '".mysql_real_escape_string($_POST['choix'])."')"); mysql_close(); } }
Egalement, écononomiser les connexions à la base de données en effectuant une connexion unique en début de scripty et en la fermant en fin de script.
Mais aussi penser à ajouter un "or die(mysql_error())" au minimum (ou mieux avec la ligne, le numéro SQL de l'erreur etc si envie) après les mysql_query().
Enfin, utiliser une inclusion PHP pour inclure un fichier lançant la connexion SQL plutôt que de retaper systèmatiquement les deux fonctions mysql_connect() et mysql_select_db()