variable dynamique et globale ?

Répondre
glab
le 15/08/2007 à 13:38
glab
Bonjour,

je me suis servi du dernier exemple du cour sur les variables dynamiques pour obtenir un formulaire au nombre de champ variable. Mais j'ai un ptit soucis pour le traitement des résultats. Je m'explique :
<?php for ($i=1; $i<=$_POST['nb_champs']; $i++){ 
$champA{$i}=trim($_POST['champ_'.$i]);
$champB{$i}=trim($_POST['champ_'.$i]);

}
Mais la portée de ces variables est limité, non? Je pensais donc naïvement faire :
<?php global $champA{$i}=trim($_POST['champ_'.$i]);
…et j'obtiens :
Parse error: syntax error, unexpected '{', expecting ',' or ';'

Donc voilà je voulais savoir comment bien déclarer mes variable pour qu'elles soient utilisables dans le reste du code, pour l'insertion dans la bdd notament.

merci



…hmm j'en profite vite fait pour poser une autre question. Dans une discusion sur le forum j'ai lu
Le php est beaucoup trop PERMISSIF !

Rien que le if( isset( $variable ) ) and $variable == "valeur" ){}

C'est une horreur !

Ca ne choque personne ??? Et bien voila le problème...

Essaye faire ça en C !!!

Je suis pas sur de saisir, qlq'un pourrait m'éclairer s'vous plait (non parce quee justement ce type de déclaration est utilisée dans le cour alors...).
Amery
le 15/08/2007 à 14:43
Amery
Salut,

pour ta première question, tu peux utiliser le tableau $HTTP_POST_VARS :

<?php
$MonChamps = array();
while(list($name,$value) = each($HTTP_POST_VARS))
{
$MonChamps[$name]=trim($value);
}
?>


Marc
Bzh
le 15/08/2007 à 16:44
Bzh
Pour ta deuxième question, c'est en effet moi qui est dis ça.

Je l'ai dis car PHP est un langage très permissif et que beaucoup de gens en abuse.

L'exemple que j'ai donnée permet de mettre en évidence cela car en C il est evident que l'on ne peu pas faire ça.

Il ne faut pas abuser et rester avec une méthode de developpement sérieuse.

De toute façon, avec PHP 6, il va falloir perdre toutes ces mauvaises habitudes.

Que du bonheur...
glab
le 15/08/2007 à 17:01
glab
ok merci mais disons que ce que je trouvais sympa c'était de ne pas utiliser de tableau. N'y a t-il pas d'autre solution?

et Bzh en quoi exactement l'exemple que tu as donné est une abération?
Savez-vous ou je peux m'initier aux probleme de sécurité?
LupusMic
le 16/08/2007 à 07:21
LupusMic
(Amery) list ? each ? Beurk ! :p
(glab) En fait, il faut d'abord construire le nom de la variable, puis l'indirecter :
<?php ${"champA{$i}"}=trim($_POST['champ_'.$i]); ?>

Mais dans l'absolu, c'est pas très propre ce que tu veux faire. Sauf si c'est pour découvrir le langage et t'amuser.

En ce qui concerne Bzh, je crois qu'il est effaré qu'on puisse trouver normal de faire des tests d'existence de variable, pour vérifier qu'elle existe, alors qu'en C on fait plus simple : on la déclare et on l'initialise. C'est plus propre et moins équilibriste.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
glab
le 16/08/2007 à 23:22
glab
merci LupusMic ça marche... presque comme je le voulais. A moins d'avoir loupé qlq chose je ne peux pas ensuite les récupérer sous forme
<?php
$champA1;
// mais en repassant par
$['champA{$i}'};
?>


Enfin comme tu dis que ce n'est pas très propre…
Je suis encore en train de découvrir le langage mais bon tant qu'à faire j'aimerai faire quelque chose qui tienne la route.
Alors vers quoi puis-je m'orienter?
LupusMic
le 17/08/2007 à 10:17
LupusMic
Je pense que tu as loupé quelque chose, car en faisant l'essai, j'ai bien accès à la variable attendue. Mais fais attention à ne pas confondre les crochets avec les accolades.

Pour l'orientation. Il y a autant de solution que de développeurs. Pour ma part, j'ai un jeu de classes qui me permettent de spécifier les variables attendues à l'aide d'un fichier XML, et qui prépare les données à l'usage, et génère des erreurs au cas où.

Enfin bref, c'est à toi de faire des essais et de décider ce qu'il te convient le mieux.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours