Undefined variables : meilleure solution ?

Undefined variables : meilleure solution ? - PHP - Programmation

Marsh Posté le 14-06-2004 à 17:22:57    

Je suis en train de mettre à jour mon site pour la dernière version de php. Pour chaque variable dans une page, je fais un truc du genre :

Code :
  1. if (!empty($_GET['error'])) 
  2.     $error=$_GET['error'];
  3. else $error="0";


 
Ca marche niquel, mais ca devient très vite fastidieux de faire ca  pour chaque variable qui transite dans chaque page :sleep:  Je me demande donc s'il n'y aurait pas de meilleure solution...
 
Merci


Message édité par gooopil le 15-06-2004 à 21:03:33
Reply

Marsh Posté le 14-06-2004 à 17:22:57   

Reply

Marsh Posté le 14-06-2004 à 17:34:25    

function initiate($error) {
  if (!empty($error))  
        $retour=$error;  
  else $retour="0";  
 
return $return;
}
 
initiate($_GET["xx"])


 
ca automatise un peu

Reply

Marsh Posté le 14-06-2004 à 17:41:11    

Merci !

Reply

Marsh Posté le 15-06-2004 à 11:05:23    

Ca m'interesse masi je n'ai pas bien compris à quoi cela sert? Et pour quelle version de php est-ce?

Reply

Marsh Posté le 15-06-2004 à 11:10:33    

toute version.
 
j'ai juste creer un bete fonction qui automatise la verification.
 
En argument tu passe la variable a verifier.
 
comme ca tu n'as plus qu'a appeler la fonction et non pas retaper tout la code

Reply

Marsh Posté le 15-06-2004 à 11:30:40    

Code :
  1. Function PParameter ($name, $default)
  2.     {
  3.     If (isset($_POST[$name]))
  4.     $result=trim(htmlspecialchars($_POST[$name]));
  5.     Else
  6.     $result=$default;
  7.     return($result);
  8.     }
  9. Donc déclaration d'une variable en $_POST
  10. $var=PParameter('var','');


 
Même idée que chacal_one, mais tu as un traitement sur la variable (pas d'espaces et caractères spéciaux modifiés) et tu peux donner une valeur par défaut.
 
Même genre de fonction pour les $_GET (GParameter), etc.


Message édité par deliriumtremens le 15-06-2004 à 11:32:12
Reply

Marsh Posté le 15-06-2004 à 12:21:54    

Les fonctions de chacal et goopil confondent undiefined et empty et ne prennent en compte que les les arguments en _GET.
 
La fonction de délirirumtemens ne prend en compte que les arguments en _POST
 
Aucune des réponses n'est donc correcte ou complète, surtout pour la dernière version de php. Pour avoir une idée de la solution, je vous conseille de regarder du côté de la fonction __get et __set ;)

Reply

Marsh Posté le 15-06-2004 à 16:09:39    

euh j'ai cherché mais j'ai pas tout compris... ;(
on peut me la refaire pliz ?? :)

Reply

Marsh Posté le 15-06-2004 à 16:12:51    

regarde du coté de isset() et de $_REQUEST, je pense que c'est de ça que voulait parler gizmo.

Reply

Marsh Posté le 15-06-2004 à 16:30:30    

y'aurait pas moyen de faire un truc générique pour le $_GET, $_POST ou le $_SESSION ???
je me pose la question, sans avoir trop réfléchi dessus encore mais il doit bien y avoir quelqu'un qui a fait ça ;)

Reply

Marsh Posté le 15-06-2004 à 16:30:30   

Reply

Marsh Posté le 15-06-2004 à 16:32:19    

skeye a écrit :

regarde du coté de isset() et de $_REQUEST, je pense que c'est de ça que voulait parler gizmo.


non, je parle de fonctions génériques introduites avec php5 qui permettent d'unifier le traitement de variables non définies.

Reply

Marsh Posté le 15-06-2004 à 16:33:09    

gizmo a écrit :

non, je parle de fonctions génériques introduites avec php5 qui permettent d'unifier le traitement de variables non définies.


ahhhhhhhh...connais pas, suis sous php 4...[:joce]

Reply

Marsh Posté le 15-06-2004 à 17:58:53    

gizmo a écrit :

Les fonctions de chacal et goopil confondent undiefined et empty et ne prennent en compte que les les arguments en _GET.
 


 

Code :
  1. function initiate($error) {
  2.   if (!empty($error)) 
  3.         $retour=$error; 
  4.   else $retour="0"; 
  5. return $return;
  6. }
  7. initiate($_GET["xx"])
  8. initiate($_POST['yyy'])...


 
A priori si tu lui passes un post ou un session ca marchera aussi...
 
Bonne idée la valeur par défaut. Merci delirium :).


Message édité par gooopil le 15-06-2004 à 18:02:45
Reply

Marsh Posté le 15-06-2004 à 18:04:32    

Code :
  1. function initiate($error) {
  2. if(isset($error) { 
  3.       if (!empty($error)) 
  4.               retour=$error; 
  5.       else $retour="0";
  6. }
  7. else {
  8.       $retour = FALSE;
  9. return $retour;
  10. }
  11. initiate($_GET["xx"])
  12. initiate($_POST['yyy'])...



---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 15-06-2004 à 18:09:17    

T509 >>> isset puis empty, a part permettre l'identification des variables non définies en renvoyant false, ca revient strictement au même que juste empty non ?

Reply

Marsh Posté le 15-06-2004 à 18:59:19    

C'etait pour répondre à Gizmo.
Moi je préfère utiliser isset()


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 15-06-2004 à 19:38:19    

Bon ben merci bien tout le monde, j'ai peut être pas La solution ultime, mais j'ai quelque chose de concis et qui fonctionne : j'ai fait un mix de chacal et de delirium
 

Code :
  1. function init($var, $defaut = 0)
  2. {
  3. if (!empty($var))   
  4.  $retour=$var;   
  5. else $retour=$defaut;
  6. return $retour;
  7. }
  8. $message = init($_SESSION['message']); par exemple

Reply

Marsh Posté le 16-06-2004 à 10:16:00    

encore un mix qui ne fait pas d'erreur (les 2 dernières solutions en généraient chez moi..)

Code :
  1. function init($array, $var)
  2.   {
  3.    $defaut = 0;
  4.  
  5.      if (!empty($array[$var]))   
  6.         $retour=$array[$var];   
  7.      else $retour=$defaut;
  8.        return $retour;
  9.   }
  10.  
  11. $message = init($_GET, 'message');


non ??  :heink:
 
edit : bon c vrai ça va tjrs pas... je cherche et je fais signe !


Message édité par titione le 16-06-2004 à 11:32:36
Reply

Marsh Posté le 16-06-2004 à 11:07:11    

j'abandonne...

Reply

Marsh Posté le 16-06-2004 à 12:15:56    

Pourquoi t'abandonnes gizmo ? Faut pas désesperer ;)
 
Bon certes, j'avoue, le truc que je viens de poster ne marche pas toujours et je comprend pas... si je passe en paramètre une variable qui n'a pas été crée ($_SESSION['var_a_tester_pas_encore_creee']), ca me renvoie un : notice undefined index...
En gros, si je fais empty($_SESSION['var_a_tester_pas_encore_creee']), ca me renvoie pas d'erreur, ms si je passe ca en parametre à une fonction, et ben ca marche pas...No comprendo  :??:


Message édité par gooopil le 16-06-2004 à 12:21:26
Reply

Marsh Posté le 16-06-2004 à 12:21:29    

gizmo a écrit :

j'abandonne...


 
Faut aussi comprendre que y a pas encore grand monde qui s'est mis au php5 !

Reply

Marsh Posté le 16-06-2004 à 12:24:06    

deliriumtremens a écrit :

Faut aussi comprendre que y a pas encore grand monde qui s'est mis au php5 !


 
+1

Reply

Marsh Posté le 16-06-2004 à 14:11:40    

deliriumtremens a écrit :

Faut aussi comprendre que y a pas encore grand monde qui s'est mis au php5 !


Citation :

Je suis en train de mettre à jour mon site pour la dernière version de php.


 
Cherchez l'erreur...

Reply

Marsh Posté le 16-06-2004 à 14:12:40    

gizmo a écrit :

Citation :

Je suis en train de mettre à jour mon site pour la dernière version de php.


 
Cherchez l'erreur...


 

Citation :


Latest stable version of PHP
Complete Source Code
 
    * PHP 4.3.7 (tar.bz2) [3,871Kb] - 02 June 2004
      md5: 5293fdc909a306a2636e0fafcc79442c
    * PHP 4.3.7 (tar.gz) [4,719Kb] - 02 June 2004
      md5: 20abcab34809146cb0f766a47187a957
 
See the ChangeLog for a complete list of changes, or the release notes for more information on this particular release. Daily snapshots are also available from snaps.php.net (not intended for production use!).  


:whistle:

Reply

Marsh Posté le 16-06-2004 à 17:37:37    

Je veux bien que tu utilises php 5 si tu fais du beta test ou autres, sinon l'intérêt de bosser sur une RC me semble assez limité...J'aurais pu préciser la dernière version stable, mais ca me semblait suffisemment clair

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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