Problème syntaxique

Eléphant du PHP | 54 Messages

25 août 2006, 11:04

Voila j'ai un petit problème tout bete je pense mais je ne vois vraiment pas d'ou ça vient.

Voici le code.
 
$requeteOrder = "";

if (isset($_POST["sortOrder"] != 0)) {  // :arrow: Ligne 189

      // l'utilisateur a choisi de trier les résultats sur une colonne

      if ($_POST["sortOrder"] == 1){

         //Tri croissant

         $requeteOrder = " ORDER BY ".$_POST["sortColumn"];

      }

      else {

         $requeteOrder = " ORDER BY ".$_POST["sortColumn"]." DESC";

      }

}
L'erreur est : Parse error expecting ',;` or ); on line 189

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 août 2006, 11:05

L'erreur est bien sur la ligne signalée

Une erreur de syntaxe "caractère manquant" peut ausis dire qu'il est mal placé... donc manquant à l'endroit où il devrait être

Un tour dans la doc pour avoir des exemples qui marchent sous les yeux ? ça aide des fois ;)

http://fr.php.net/isset

Eléphant du PHP | 54 Messages

25 août 2006, 11:55

arf quel ane :roll:

suffisait d'enlever != 0

if (isset($_POST["sortOrder"])) {

Merci :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 août 2006, 12:05

suffisait d'enlever != 0
Non, tu pouvais très bien laisser le 0 qui est équivalent à false (voir ici : Conversion en booléen)

Mais il fallait bien placer ta parenthèse ;)
Comme ça :
if (isset($_POST["sortOrder"]) != 0)
Mais c'est vrai que ça va plus vite d'écrire comme ça :
if (isset($_POST["sortOrder"]))
Par contre il faut cliquer sur Résolu[:b]

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

25 août 2006, 12:42

Histoire de simplifier, tu peux aussi rendre ton code plus élégant :
//
$requeteOrder = "";
if (isset($_POST["sortOrder"]))
   { $requeteOrder = " ORDER BY ".$_POST["sortColumn"].($_POST["sortOrder"]==1 ? "" : " DESC");
   }

Eléphant du PHP | 54 Messages

25 août 2006, 14:06

Oui je pense que c'est plus simple comme ca ouckileou

Par contre albat pour ton code je vois que ca fonctionne mais je pense ne pas maitriser assez php pour faire un code comme ca. C'est vrai que c'est plus élégant par contre.

Merci :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 août 2006, 14:30

Le code d'Albat est expliqué ici : opérateur ternaire

Ceci dit, je ne trouve pas ça plus clair :mrgreen:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

25 août 2006, 14:42

Ne t'effraie pas. En fait, c'est tout simple.

J'ai utilisé trois astuces de développement :
1. simplification d'écriture
2. factorisation
3. opérateur ternaire

(Pour mes exemples, j'ai viré les commentaires : on est entre nous, on sait de quoi on cause...) ;)

1. simplification d'écriture (suggérée par Ouckileou)
//
if (isset($_POST["sortOrder"]!=0)) // Correct mais lourd
if (isset($_POST["sortOrder"]))    // Correct et plus léger
2. factorisation
//
if ($_POST["sortOrder"] == 1)
   $requeteOrder = " ORDER BY ".$_POST["sortColumn"];
   else
   $requeteOrder = " ORDER BY ".$_POST["sortColumn"]." DESC";

// Que $_POST["sortOrder"] soit égal à 1 ou non,
// $requeteOrder aura toujours pour valeur (au minimum) : " ORDER BY ".$_POST["sortColumn"] 
// donc...

$requeteOrder = " ORDER BY ".$_POST["sortColumn"];
if ($_POST["sortOrder"] == 1)
   $requeteOrder .= "";       // on n'ajoute rien ; ordre ASC par défaut
   else
   $requeteOrder .= " DESC";  // on ajoute la précision de l'ordre DESC
3. opérateur ternaire
//
if ($_POST["sortOrder"] == 1)
   $requeteOrder .= "";
   else
   $requeteOrder .= " DESC";

// peut s'écrire plus avantageusement :

$requeteOrder .= ($_POST["sortOrder"]==1 ? "" : " DESC"); 
En savoir plus sur l'opérateur ternaire...

Eléphant du PHP | 54 Messages

25 août 2006, 15:50

ok je comprend mieux

en fait c'est le :?: qui m'a un peu effrayé mais c'est beaucoup plus clair maintenant :wink: