(PHP) probleme (incomprehensible ?) avec mes variables

avec mes variables (PHP) probleme (incomprehensible ?) - Programmation

Marsh Posté le 16-05-2001 à 16:13:20    

:hello:
 
bon, j'espere que je ne vais pas poser une question a la con, sinon, soyez sympa :(
 
voila, je suis sur un script PHP avec formulaire et je teste mes variables pour savoir si elles sont vides (afin de verifier que l'utilisateur rentre une valeur pour chacune). Si c'est le cas, le script affiche le formulaire. Sinon, il traite les donnees.
 
Voila le debut du script :
 
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body bgcolor="#E1F5FF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="">
<table width="57%" border="0" cellspacing="2">
  <tr>
    <td><img src="../images/sections/adhesion.gif" width="228" height="37"></td>
  </tr>
</table>
<table width="60%" border="0" cellspacing="2">
  <tr>
    <td width="8%"> </td>
    <td width="92%" valign="top" align="left">  
     
<?php
 
if ( (strlen($typ_gar)==0) || (strlen($typ_reg)==0) || (strlen($dn_jour)==0) || (strlen($dn_mois)==0) || (strlen($dn_annee)==0) || (strlen($dn_jour_c)==0) || (strlen($dn_mois_c)==0) || (strlen($dn_annee_c)==0) || (strlen($dn_jour_e1)==0) || (strlen($dn_mois_e1)==0) || (strlen($dn_annee_e1)==0) || (strlen($dn_jour_e2)==0) || (strlen($dn_mois_e2)==0) || (strlen($dn_annee_e2)==0) || (strlen($dn_jour_e3)==0) || (strlen($dn_mois_e3)==0) || (strlen($dn_annee_e3)==0) || (strlen($dn_jour_e4)==0) || (strlen($dn_mois_e4)==0) || (strlen($dn_annee_e4)==0) || (strlen($dn_jour_e5)==0) || (strlen($dn_mois_e5)==0) || (strlen($dn_annee_e5)==0) || (strlen($dn_jour_e6)==0) || (strlen($dn_mois_e6)==0) || (strlen($dn_annee_e6)==0) )
{
?>
 
 <form method="post" action="adhesion_dx.php" name="form_adh">
 
<?php  
if ($etat != "I" )
 echo"Vous n'avez pas rempli tous les champs";
?>
             
        <p><font face="Times New Roman, Times, serif" size="4"><b><font color="#000066">Garantie  
          souhaitée</font></b></font><font face="Times New Roman, Times, serif" size="3">  
          <select name="typ_gar" value="<?php $typ_reg ?>">
   <option value="gnull" selected>Garantie ...</option>
            <option value="geco">Éco</option>
            <option value="g100">100</option>
            <option value="g130">130</option>
            <option value="g160">160</option>
            <option value="g250">250</option>
          </select>
          </font></p>
 
...
 
et voila l'erreur que mon navigateur m'affiche au chargement de la page :  
 
Warning: Undefined variable: typ_gar in D:\serveurs-web\mgel\_mvs2\adhesion\adhesion_dx.php on line 20 (ligne qui correspond au "if" )
 
 
j'espere que vous trouverez mon erreur, perso, j'suis perdu :sweat:
 
merci d'avance
 
++

 

[edit]--Message édité par Batman-Fr--[/edit]


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 16-05-2001 à 16:13:20   

Reply

Marsh Posté le 16-05-2001 à 16:19:42    

Ton pb, c'est que les variable (comme $typ_gar) n'éxistent pas si l'utilisateur ne les a pas renseignées dans le formulaire (c'est ce qu'il te dit : Undefined variable).
Comme tu ne peux pas utiliser une fonction comme strlen() sur une variable qui n'éxiste pas, PHP en fourni une pour çà, c'est isset()!
 
Voir : http://php.net/manual/fr/function.isset.php


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-05-2001 à 16:31:16    

:hello:
 
 
ah ok, c'est vrai que ca parait logique :D
 
le prob, c'est que je me suis base pour certain point sur un script ASP et apparament, ce genre de syntaxe passe sous ASP ...
 
merci, je vais essayer ca :)
 
++


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 16-05-2001 à 16:38:58    

C'est sûr que çà marche, c'est LA méthode à utiliser en PHP.
En asp, Request.Form("NIMPORTEQUOI" ) n'est pas une variable. NIMPORTEQUOI est le nom d'un élément de la collection Form de l'objet Request (Ouf).
C'est pour çà que j'aime pas l'ASP, c'est trop bavard !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-05-2001 à 17:09:37    

re :)
 
bah ca marchait pas avec isset() (sisi) : il passait a l'etape suivante (j'comprends pas non plus mais bon :lol: )
 
par contre, avec empty(), ca passe nickel :)
 
tant que je te tiens :D, tu sais comment faire memoriser les valeur deja rentrees pour les remettre dans les champs lorsque le formulaire est charge a nouveau (quand l'utilisateur a oublie de renseigner un ou plusieurs champs)  ?


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 16-05-2001 à 17:14:59    

J'te préviens, tu va te trouver con là ;-)
 
Tes variables, $typ_gar, $typ_reg... y'a quoi dedans à ton avis si elles éxistent!
 
Donc t'as juste à mettre un value=$ta_variable mais faut qu'elle éxiste !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-05-2001 à 17:38:01    

bah oui, j'sais bien :(
 
mais j'ai essaye ca : value="<?php '$dn_jour' ?>" et ca ne marche pas ...

 

[edit]--Message édité par Batman-Fr--[/edit]


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 16-05-2001 à 17:41:55    

Et çà fait quoi ? Rien, message d'erreur...
 
Moi, je ferai :
value="<?php if(isset($dn_jour) echo($dn_jour); ?>"
 
De toute façon, <?php '$dn_jour' ?> je vois pas ce que çà peut donner, quelle que soit la valeur de $dn_jour ! ! !

 

[edit]--Message édité par Mara's dad--[/edit]


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-05-2001 à 17:49:03    

oui, ca fait rien
 
exact pour le echo, j'ai la mauvaise habitude de l'oublier lorsque j'insere des variables php dans le code html
 
mea culpa, je teste ta manip mais ca devrait marcher :)
 
on ta deja dit que t'etais rapide toaaa ?? :D
et que t'etais gentil toaaa ?? :lol:
 
nan, serieusement, merci du coup de main :)


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 16-05-2001 à 17:57:57    

raaaaaa, j'galere encore :(
 
il me met une erreur sur la ligne ou j'ajoute le value :
 
... value="<?php if(isset($dn_jour) echo "$dn_jour";) ?>">
 
j'ai pense que c'etait l'histoire des " du echo, je les ai donc remplacees par des ' mais j'ai toujours l'erreur d'interpretation du code php ....


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 16-05-2001 à 17:57:57   

Reply

Marsh Posté le 16-05-2001 à 23:01:22    

value="<?php if(isset($dn_jour) echo "$dn_jour";) ?>">  
 
une parenthèse en trop dans ta condition ;-)
 
mets plutôt value="<?if(isset($dn_jour)) echo "$dn_jour" ?>"
 
@+


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 16-05-2001 à 23:10:59    

prq une parenthese de trop ?
 
1 pour le if et l'autre pour le isset non ? :??: j'ai peur de moi la d'un coup :sarcastic:
 
j'essaie ta manip demain matin :)
 
merci :hello:

 

[edit]--Message édité par Batman-Fr--[/edit]


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 16-05-2001 à 23:11:17    

Oui, bon là c'est moi qu'ai fait la bourde, mais j'ai pas testé le code, j'ai juste pissé çà comme çà ;-)
 
Y faut bien qu'il apprenne un peu à corriger des bug, nan ?
 
T'as cherché un peu au moins avant de demander ?
17:49 -> 17:57 ...
Mouais, pas trop tout de même :D
 
Allez, courage, çà va renter tout seul :lol:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-05-2001 à 23:17:22    

A bon ,t'es encore là !
SI tu veut :  

Code :
  1. <?php
  2. if( isset( $dn_jour ) )
  3. {
  4.    echo "$dn_jour";
  5. }
  6. ?>


 
Bon, t'enlève les {} parce que y'a que le echo qu'est conditionné par le if()
 

Code :
  1. <?php
  2. if( isset( $dn_jour ) )
  3.    echo "$dn_jour";
  4. ?>


 
Et tu met tout sur une ligne :

Code :
  1. <?php if( isset( $dn_jour ) ) echo "$dn_jour"; ?>


 
Au lieu de fermer la parenthèse du if() avant l'echo(), moi je l'avais oublié, et toi tu l'avais mis après l'echo() !
 
Bon, cette fois, si c'est pas KAPICHE, t'es collé SAMEDI !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-05-2001 à 23:35:14    

Mara's dad a écrit a écrit :

Oui, bon là c'est moi qu'ai fait la bourde, mais j'ai pas testé le code, j'ai juste pissé çà comme çà ;-)
 
Y faut bien qu'il apprenne un peu à corriger des bug, nan ?
 
T'as cherché un peu au moins avant de demander ?
17:49 -> 17:57 ...
Mouais, pas trop tout de même :D
 
Allez, courage, çà va renter tout seul :lol:




 
:hello:
 
bah oui j'ai cherche, mais dans la mauvaise direction ;)
 
ok pour la parenthese !
 
heu .... samedi, j'suis pas libre m'ssieur, j'dois em'ner ma p'tite soeur a la piscine alors j'peux pas v'nir copier mille fois la syntaxe du if en php
 
vraaaaiiiiiment desole :D
 
merci encore ! :)
 
++


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 17-05-2001 à 07:09:18    

pour tester si une variable est vide, je fais juste
 
if ($var == "" )
 
ça marche nickel et c'est tout simple :)

Reply

Marsh Posté le 17-05-2001 à 09:00:53    

youdontcare a écrit a écrit :

pour tester si une variable est vide, je fais juste
 
if ($var == "" )
 
ça marche nickel et c'est tout simple :)




 
A condition que $var EXISTE !
 
Faut vous le dire comment ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 17-05-2001 à 09:33:44    

Mara's Dad : :jap: merci, ca marche nickel chrome :sol:
 
Udontcare : c'est ce que je faisais aussi mais ca passait pas alors j'ai essaye d'autres truc mais Mara's Dad a raison :)
 
voila, encore merci :hello:
 
++


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 17-05-2001 à 12:55:38    

Mara's dad a écrit a écrit :

 
 
A condition que $var EXISTE !
 
Faut vous le dire comment ?



qu'est ce que tu racontes ? une variable utilisée en php 'existe' toujours. elle prend une valeur si tu la passe en paramètre dans le script, est nulle sinon.
 
if ($var == "" ), je l'ai utilisé sur mon apache local+php4, sur un serveur php3, un autre php4, et dans le même contexte : tester si une variable venant d'un formulaire est vide ou non. viens pas me dire que ça marche pas, j'ai les preuves :D
 
batman, tu utilises quelle version de php ?

Reply

Marsh Posté le 17-05-2001 à 13:17:02    

J'ai fait un test avec ce code :

Code :
  1. <?php if( $toto=="" ) echo("OK" ); else echo($toto); ?>


 
Avec PHP3 et PHP4.  
 
C'est vrai que çà fonctionne, j'ai "OK" si $toto n'éxiste pas, mais j'ai aussi çà :  
 
En PHP3:
Warning: Uninitialized variable or array index or property (toto) in your script...
 
En PHP4:
Warning: Undefined variable: toto in ...
 
Si çà le fait pas chez toi, c'est que les warnings ont été désactivé. Essaye avec: error_reporting(E_ALL);
 
En fait je me sert de isset() pour savoir si la variable éxiste (pour un submit par exemple), ce qui est différent que de savoir si elle contient quelque chose.
 
Celà dit, tout dépend de ce qu'on veut faire !
 
Le code de Batman-fr avec les strlen() peut très bien fonctionner, mais faut désactiver les warnings, ce qui n'est pas très propre... enfin je trouve.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 17-05-2001 à 13:31:30    

Mara's dad a écrit a écrit :

J'ai fait un test avec ce code :

Code :
  1. <?php if( $toto=="" ) echo("OK" ); else echo($toto); ?>


 
Avec PHP3 et PHP4.  
 
C'est vrai que çà fonctionne, j'ai "OK" si $toto n'éxiste pas, mais j'ai aussi çà :  
 
En PHP3:
Warning: Uninitialized variable or array index or property (toto) in your script...
 
En PHP4:
Warning: Undefined variable: toto in ...
 
Si çà le fait pas chez toi, c'est que les warnings ont été désactivé. Essaye avec: error_reporting(E_ALL);
 
En fait je me sert de isset() pour savoir si la variable éxiste (pour un submit par exemple), ce qui est différent que de savoir si elle contient quelque chose.
 
Celà dit, tout dépend de ce qu'on veut faire !
 
Le code de Batman-fr avec les strlen() peut très bien fonctionner, mais faut désactiver les warnings, ce qui n'est pas très propre... enfin je trouve.



on est d'accord ! effectivement, les warnings étaient disablés chez moi. comme une variable nulle est convertie en une string vide, ça marche.
 
j'ai donc codé en php sans les warnings ... ça ne m'a pas posé de problèmes. au contraire même, codant surtout en c++, j'apprécie énormément toutes ces conversions automatiques.

Reply

Marsh Posté le 17-05-2001 à 13:38:23    

C'est çà qu'est bien avec PHP, c'est reposant.
Haaaaaaaaaa.........


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 17-05-2001 à 13:43:42    

Mara's dad a écrit a écrit :

C'est çà qu'est bien avec PHP, c'est reposant.
Haaaaaaaaaa.........



c'est clair ... surtout avec les warnings disablés :D :D

Reply

Marsh Posté le 17-05-2001 à 13:58:23    

tant qu'on y est :
 
isset() c'est cool et puis y a la petite soeur qui va avec :
unset() pour vider (désaffecter la variable)

Reply

Marsh Posté le 17-05-2001 à 14:07:41    

lamatrice a écrit a écrit :

tant qu'on y est :
 
isset() c'est cool et puis y a la petite soeur qui va avec :
unset() pour vider (désaffecter la variable)



tant qu'on parle de ça, y'a un script d'exemple très sympa sur php.net :
 

Code :
  1. <?
  2. echo "<pre>";
  3. function VarStat (&$Var)
  4. {
  5. if (isset($Var)) echo "\tisset"; else echo "\t";
  6. if (empty($Var)) echo "\tempty"; else echo "\t";
  7. if ($Var) echo "\tself"; else echo "\t";
  8. echo "\t".gettype($Var);
  9. }
  10. echo "\n1 "; VarStat($Hello);
  11. echo "\n2 \"\" "; $Hello=""; VarStat($Hello);
  12. echo "\n3 0 "; $Hello= 0; VarStat($Hello);
  13. echo "\n4 FALSE"; $Hello=FALSE; VarStat($Hello);
  14. echo "\n5 UNSET"; unset($Hello); VarStat($Hello);
  15. echo "\n6 XYZ "; $Hello="XYZ"; VarStat($Hello);
  16. echo "\n6 123 "; $Hello=123; VarStat($Hello);
  17. echo "\n6 0.1 "; $Hello=0.1; VarStat($Hello);
  18. echo "\n7 TRUE "; $Hello=TRUE; VarStat($Hello);
  19. echo "</pre>";
  20. ?>

 
ça affichera:

Code :
  1. 1   empty  NULL
  2. 2 ""  isset empty  string
  3. 3 0  isset empty  integer
  4. 4 FALSE isset empty  boolean
  5. 5 UNSET  empty  NULL
  6. 6 XYZ  isset  self string
  7. 6 123  isset  self integer
  8. 6 0.1  isset  self double
  9. 7 TRUE  isset  self boolean
 

[edit]--Message édité par youdontcare--[/edit]

Reply

Marsh Posté le 17-05-2001 à 14:18:46    

Mara's dad a écrit a écrit :

J'ai fait un test avec ce code :

Code :
  1. <?php if( $toto=="" ) echo("OK" ); else echo($toto); ?>


 
Avec PHP3 et PHP4.  
 
En PHP4:
Warning: Undefined variable: toto in ...
 
Le code de Batman-fr avec les strlen() peut très bien fonctionner, mais faut désactiver les warnings, ce qui n'est pas très propre... enfin je trouve.




 
:jap:
 
c'est exactement l'erreur que j'obtenais !
et au debut, j'avais exactement cette syntaxe mais vu que ca ne passait pas, j'ai essaye avec d'autre fonctions (d'ou le sterlen ;) )
 
voila :hello:
 
au moins, mon poste n'etait pas si debile que ca alors :)
 
merci encore


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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