condition pas tres commune

condition pas tres commune - PHP - Programmation

Marsh Posté le 05-04-2005 à 16:26:03    

Quelqu'un pourrait-il m'aider ou me donner une adresse d'un tutos parlant de ce genre de conditions :
 
echo (($lg==1)?"fr.gif":"uk.gif" ));
 
j'aimerai savoir dans quels cas on peut les utiliser (bien que je comprends tres bien l'utilisation dans ce cas là.. j'aimerai en connaitre la limite et les possibilités)
 
Merci d'avance
 
Freed

Reply

Marsh Posté le 05-04-2005 à 16:26:03   

Reply

Marsh Posté le 05-04-2005 à 16:33:11    

je demande ça parceque là j'ai un cas ou j'aimerai economiser du code, j'ai une liste de variables et j'aimerai eviter une succession de if elseif etc etc en fait j'aimerai faire un truc qui equivaut à ça :
 
if(!empty($nom))
{
$valeur=$nom;
}
elseif(!empty($prenom))
{
$valeur=$prenom;
}
elseif(!empty($date))
{
$valeur=$date;
}
 
etc etc etc...
 
j'aimerai le simplifier du genre
 
$valeur=!empty($nom)||!empty($prenom)||!empty(date); // ou un truc dans le genre !!!
 
(là j'invente completement ! mais je sais pas si ce genre de syntaxe existe en php...)
}

Reply

Marsh Posté le 05-04-2005 à 16:39:42    

http://www.php.net/manual/fr/langu [...] arison.php
voir le chapitre "opérateur ternaire"

Reply

Marsh Posté le 05-04-2005 à 16:48:30    

merci !!!

Citation :

L'expression (expr1) ? (expr2) : (expr3) est évaluée à expr2 si expr1 est évalué à TRUE, et expr3 si expr1 est évalué à FALSE.


 
 
.... et dans ce cas là je peux mettre plusieurs expr d'affilée ??? ou juste deux ?


Message édité par freed102 le 05-04-2005 à 16:48:59
Reply

Marsh Posté le 05-04-2005 à 19:17:26    

Tu peux les inbriquer si cela te chante, mais bon, a part "obfusquer" ton code je ne vois pas trop l'interet de la chose ...

Reply

Marsh Posté le 06-04-2005 à 12:37:51    

et bien c pourtant simple... j'ai fait un systeme de consultation de base de donnée à champs multiples...
 
1° l'utilisateur choisir quel mode de recherche il souhaite (par nom, par prenom, par date...)
 
2° un champ de formulaire s'affiche en fonction du mode de recherche choisi
 
3° il tape un masque de recherche
 
4° ça affiche le resultat de la recherche
 
5° il peut classer dans l'order alphabetique ou numerique en cliquant sur le titre de la colonne qu'il veut classer (order_by)
 
pour ça je procede de la facon suivante :
 

Code :
  1. <?php
  2.   if($Submit || isset($_SESSION['consult_by']))
  3.   {
  4.  
  5.    switch ($_SESSION['consult_by'])
  6.   {
  7.  case "numero_rapport" :
  8.       $sql="SELECT * FROM $table WHERE numero_rapport LIKE '$numero_rapport%' ORDER BY $order_by $asc";
  9.     break;
  10.   case "nom" :
  11.        $sql="SELECT * FROM $table WHERE nom >= '$nom' ORDER BY $order_by $asc ";
  12.     break;
  13. case "prenom" :
  14.       $sql="SELECT * FROM $table WHERE prenom LIKE '$prenom%' ORDER BY $order_by $asc";
  15.     break;
  16. case "date_rapport" :
  17.       $sql="SELECT * FROM $table WHERE date_rapport='$timestamp_rapport' ORDER BY $order_by $asc";
  18.     break;
  19. case "date_naissance" :
  20.       $sql="SELECT * FROM $table WHERE date_naissance='$timestamp_naissance' ORDER BY $order_by $asc";
  21.     break;
  22. case "client" :
  23.       $sql="SELECT * FROM $table WHERE client LIKE '$client%' ORDER BY $order_by $asc";
  24.     break;
  25. case "prestation" :
  26.       $sql="SELECT * FROM $table WHERE prestation LIKE '$prestation%' ORDER BY $order_by $asc";
  27.     break;
  28.   }
  29.      $req=mysql_query($sql);
  30.     $numrows=mysql_num_rows($req);
  31.   ?>


 
 
donc comme vous pouvez le constater... chaque variable est séparée (nom, prenom, date.. etc etc etc)
 
hors finalement j'ai besoin que de 3 variables : consult_by, valeur et order_by
 
... et j'ai pas envie de tout recoder !
 
alors j'aimerai que $valeur prenne la valeur du champ qui n'est pas vide (nom, prenom, date...)
 
(je sais c'est tordu !!! mais ça peut servir !)


Message édité par freed102 le 06-04-2005 à 12:46:24
Reply

Marsh Posté le 06-04-2005 à 13:22:05    

Code :
  1. if (!empty($_POST['nom'])) $sql_search = 'nom >= "'.$nom.'"';
  2. if (!empty($_POST['numero_rapport'])) $sql_search = 'numero_rapport LIKE "'.$numero_rapport%.'"';
  3. ....
  4. if ((isset($sql_search))&&(isset($order_by))) {
  5.   $sql = 'SELECT * FROM $table WHERE ',$sql_search,' ORDER BY',$order_by,$asc;
  6.   $req=mysql_query($sql);
  7.   $numrows=mysql_num_rows($req);
  8.   }

Sans les sécurités d'usage :o
Ça, c'est seulement pour choisir le motif de recherche, après, tu fais la même chose pour le tri en initialisant le $order_by
 
En fait, j'ai pas compris qu'est-ce qui va pas [:gratgrat]


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 06-04-2005 à 13:32:38    

Je vois franchement pas l'intéret d'utiliser cette notation ...
 
A part tout complexifier a la relecture, debuggage, ... ca n'apporte rien de plus.
Si encore c'était plus rapide a tapper ... mais meme pas ...
 
Je déconseille a mort.

Reply

Marsh Posté le 06-04-2005 à 13:37:13    

Ah, j'ai compris le soucis :D
Tu veux, en un minimum de commande possible, choisir la seule (?) valeur non-vide du tableau $_POST.

Code :
  1. foreach($_POST as $key => $value) {
  2.   if ((!empty($value))&&($key != 'submit')) {
  3.     $order_by = 'ORDER BY',$key;
  4.     $search = 'WHERE', $key, 'LIKE "%'.$value.'%"';
  5.     }
  6.   }
  7. $sql = 'SELECT * FROM $table',$sql_search,$order_by,$asc;
  8. $req=mysql_query($sql);
  9. $numrows=mysql_num_rows($req);


Voila, ça nous fait un truc super-condensé super-pas-sécurisé, mais moi je vois que ça :o


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 06-04-2005 à 13:39:40    

finalement j'ai été aussi vite à changer tous les noms de mon formulaire en  
 
 <input name="valeur" type="text" id="valeur">
 
 
et de suivre comme suit :  
 

Code :
  1. <?php
  2.   if(isset($_SESSION['consult_by']))
  3.   {
  4.  if(!empty($_GET['valeur']))
  5. {
  6. $valeur=$_GET['valeur'];
  7. }
  8.  
  9.   //echo $_SESSION['consult_by'];
  10.   switch ($_SESSION['consult_by'])
  11.   {
  12.  case "numero_rapport" :
  13.       $sql="SELECT * FROM $table WHERE numero_rapport LIKE '$valeur%' ORDER BY $order_by $asc";
  14.     break;
  15.   case "nom" :
  16.        $sql="SELECT * FROM $table WHERE nom >= '$valeur' ORDER BY $order_by $asc ";
  17.     break;
  18. case "prenom" :
  19.       $sql="SELECT * FROM $table WHERE prenom LIKE '$valeur%' ORDER BY $order_by $asc";
  20.     break;
  21. case "date_rapport" :
  22.       $sql="SELECT * FROM $table WHERE date_rapport='$valeur' ORDER BY $order_by $asc";
  23.     break;
  24. case "date_naissance" :
  25.       $sql="SELECT * FROM $table WHERE date_naissance='$valeur' ORDER BY $order_by $asc";
  26.     break;
  27. case "client" :
  28.       $sql="SELECT * FROM $table WHERE client LIKE '$valeur%' ORDER BY $order_by $asc";
  29.     break;
  30. case "prestation" :
  31.       $sql="SELECT * FROM $table WHERE prestation LIKE '$valeur%' ORDER BY $order_by $asc";
  32.     break;
  33.   }
  34.      $req=mysql_query($sql);
  35.     $numrows=mysql_num_rows($req);
  36.   ?>


 
comme ça je garde mes variables en GET :
 

Code :
  1. <td><a href="<?php echo $PHP_SELF."?consult_by=$_SESSION[consult_by]&valeur=$valeur&order_by=numero_rapport"; ?>">Num&eacute;ro rapport</a></td>
  2. <td><a href="<?php echo $PHP_SELF."?consult_by=$_SESSION[consult_by]&valeur=$valeur&order_by=date_rapport"; ?>">Date rapport</a></td>
  3. <td><a href="<?php echo $PHP_SELF."?consult_by=$_SESSION[consult_by]&valeur=$valeur&order_by=nom"; ?>">Nom</a></td>
  4. <td><a href="<?php echo $PHP_SELF."?consult_by=$_SESSION[consult_by]&valeur=$valeur&order_by=prenom"; ?>">Pr&eacute;nom</a></td>
  5. <td><a href="<?php echo $PHP_SELF."?consult_by=$_SESSION[consult_by]&valeur=$valeur&order_by=date_naissance"; ?>">Date naissance</a></td>
  6. <td><a href="<?php echo $PHP_SELF."?consult_by=$_SESSION[consult_by]&valeur=$valeur&order_by=client"; ?>">Client</a></td>
  7. <td><a href="<?php echo $PHP_SELF."?consult_by=$_SESSION[consult_by]&valeur=$valeur&order_by=prestation"; ?>">Prestation</a></td>


Message édité par freed102 le 06-04-2005 à 13:41:33
Reply

Marsh Posté le 06-04-2005 à 13:39:40   

Reply

Marsh Posté le 06-04-2005 à 13:41:06    

Worldofdada a écrit :

Je vois franchement pas l'intéret d'utiliser cette notation ...
 
A part tout complexifier a la relecture, debuggage, ... ca n'apporte rien de plus.
Si encore c'était plus rapide a tapper ... mais meme pas ...
 
Je déconseille a mort.

Tu parles de quoi ?
 
PS : je réponds seulement au topic, j'ai pas fait l'apologie de ma notation [:spamafote]


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 06-04-2005 à 13:43:48    

Arf, finalement j'avais rien compris à la question :/


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 06-04-2005 à 13:45:10    

si si je pense que tu avais bien compris !
 
mais c moi qui ait devié le probleme autrement et de façon plus correcte (je pense)
 
en fait je me suis mal exprimé depuis le debut...
 
en fait j'avais fait un truc du genre (en resumé):
 

Code :
  1. switch($_SESSION['consult_by'])
  2. {
  3. case "nom": echo "Nom : <input type="text" name="nom">";break;
  4. case "prenom": echo "Prénom: <input type="text" name="prenom">";break;
  5. case "date": echo "Date : <input type="text" name="date">";break;
  6. }


 
hors finalement j'ai pas besoin de séparer ces champs en donnant un nom différent à chacun des mes champs input sachant qu'un seul n'apparait de toutes façon... ce qui m'interessait c'est d'en recuperer la valeur (vu que je sais deja quel type de recherche je veux grâce à mon $_SESSION['consult_by']  
 
donc j'ai remplacé mes name="nom", name="prenom", name="date"... Par name="valeur" ....
 
 
... comme ça je n'ai plus besoin de faire ce que j'ai demandé au debut qui est de tester si une valeur existe dans chaque champ pour attribuer cette valeur à ma variable "$valeur".... puisqu'au final je n'ai plus qu'un seul champ <input type="text" name="valeur">
 
... compliqué non ?  :sweat:  :heink:  :pt1cable:


Message édité par freed102 le 06-04-2005 à 13:54:24
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed