Problème de else sur script de sondage

De Wiki PC, Wiki Informatique.

(Différences entre les versions)
 

Version actuelle en date du 16 avril 2009 à 20:47

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()

Outils personnels