Problème de else sur script de sondage
De Wiki PC, Wiki Informatique.
Sommaire |
[modifier] 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>
[modifier] Solution(s) proposée(s) :
[modifier] 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();
}
}
[modifier] 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 {
[modifier] Solution(s) retenue(s) :
Solution n°2, en transformant le else () { } en elseif() { }
[modifier] 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()
