Pb variable dynamique - PHP - Programmation
Marsh Posté le 02-06-2008 à 15:01:53
$racine->lien[1]->objet[0]->attribut[0] ??
Marsh Posté le 02-06-2008 à 15:04:53
Je n'essaierai même pas de répondre avant d'avoir une explication acceptable justifiant l'utilisation de cette syntaxe immonde.
Marsh Posté le 02-06-2008 à 15:06:12
sielfried a écrit : $racine->lien[1]->objet[0]->attribut[0] ?? |
Oui dans mon exemple c'est la valeur que je veux afficher ! Mais je souhaiterais passer par une variable dynamique.
Marsh Posté le 02-06-2008 à 15:07:31
babakill a écrit : |
pourquoi tu as besoin de ça?
Marsh Posté le 02-06-2008 à 15:08:31
Voici le xml que je parse :
<application id="E7D1E9C6482A05BA" responsable="abx">
<attribut name="Name">ALLOWIN</attribut>
<attribut name="Application Code">ALLOWIN</attribut>
<lien name="Org-Unit" type="Acteur">
<objet id="E7D1E880482A0128" name="ASOSS">
<attribut name="Ordre">1234</attribut>
</objet>
</lien>
<lien name="Processus" type="Processus">
<objet id="E7D1E880482A2222" name="Traitement1">
<attribut name="Ordre">3456</attribut>
</objet>
<objet id="E7D1E880482A3333" name="Traitement2">
<attribut name="Ordre">4567</attribut>
</objet>
</lien>
</application>
$racine->lien[1]->objet[0]->attribut[0] a donc la valeur 3456
Marsh Posté le 02-06-2008 à 15:09:09
oui enfin ça explique toujours pas pourquoi tu aurais besoin d'une variable dynamique, comme tu dis.
Marsh Posté le 02-06-2008 à 15:09:15
ReplyMarsh Posté le 02-06-2008 à 15:14:14
Code : |
les variables "dynamiques" marchent très mal avec les tableaux en php ( voir la doc )
Maintenant, comme dit plus haut ce genre de chose est une horreur absolue et un motif de flagellation au petit suisse.
Marsh Posté le 02-06-2008 à 15:14:34
Je récupère les nouvelles valeurs dynamiquement, je connais pas leur nom a l'avance.
A la suite de mon formulaire, je récupère dans un boucle :
racine->attribut[0] = ALLOWIN
racine->attribut[1] = ALLOWIN
racine->lien[0]->objet[0]->attribut[0] = 1234
racine->lien[1]->objet[0]->attribut[0] = 3456
racine->lien[1]->objet[1]->attribut[0] = 4567
J'aimerais pouvoir appliquer si il y a lieu les modifs, c'est pour cela que j'aimerais utiliser les variables dynamiques.
Marsh Posté le 02-06-2008 à 15:17:38
Bon, on avance. Il te reste plus qu'à nous expliquer pour quelle raison saugrenue tu ne connais pas le nom de tes variables et on pourra t'expliquer quoi utiliser à la place.
Marsh Posté le 02-06-2008 à 15:18:07
anapajari a écrit :
|
Ca marche ! Merci beaucoup !
Marsh Posté le 02-06-2008 à 15:19:38
anapajari a écrit :
|
Tu tiens vraiment à ce qu'il continue à écrire ce genre de code?
Marsh Posté le 02-06-2008 à 15:22:15
skeye a écrit : Bon, on avance. Il te reste plus qu'à nous expliquer pour quelle raison saugrenue tu ne connais pas le nom de tes variables et on pourra t'expliquer quoi utiliser à la place. |
Je ne connais pas le nom de mes variables car les xml que je parse ont une structure variable, j'ai donc plus ou moins de variables et a chaque fois que je les récupère dans un
foreach($_POST as $nom_var=>$value) {
...
}
Marsh Posté le 02-06-2008 à 15:24:11
babakill a écrit : Je ne connais pas le nom de mes variables car les xml que je parse ont une structure variable |
Et alors?
Pour autant que je sache un xml peut être représenté sans aucune difficulté par un tableau ou un objet php...
Marsh Posté le 02-06-2008 à 15:36:29
skeye a écrit : |
Oui mais je recois les nouvelles valeurs depuis un formulaire donc indépendement.
Pour m'y retrouver je génère des noms de variables implicite afin de m'y retrouver que je traite pour devenir :
racine->attribut[0], racine->attribut[1], racine->lien[0]->objet[0]->attribut[0] ...
maintenant j'aimerais affecter des nouvelles valeurs mais pas moyen de faire :
$test = "racine->lien[1]->objet[0]->attribut[0]";
$$test = "12345"
Mais je vois pas comment faire autrement ....
Le eval me permet l'affichage mais j'aimerais maintenant attribuer les nouvelles valeurs a mon xml.
Marsh Posté le 02-06-2008 à 15:40:31
code de mon formulaire :
<input type=text name='attribut/1\' value='ALLOWIN'>
<input type=text name='attribut/0\' value='ALLOWIN'>
<input type=text name='lien/0\->objet/0\->attribut/0\' value='1234'>
<input type=text name='lien/1\->objet/0\->attribut/0\' value='3456'>
.....
Je traite la reception :
// On ouvre le fichier
$racine = simplexml_load_file("http://localhost/test.xml" );
echo "<p>".$racine->asXml()."</p>";
foreach($_POST as $nom_var=>$value) {
//Traitement des noms de variables
$nom_var_modif = str_replace("/", "[", $nom_var);
$nom_var_modif = str_replace("\\", "]", $nom_var_modif);
//$nom_var_modif = str_replace("&", " ", $nom_var_modif);
//
$nom_var_modif = "racine->".$nom_var_modif;
$nom_var_modif = trim($nom_var_modif);
echo '<p>'.$nom_var_modif.' = '.$value.'</p>';
//$$nom_var_modif = $value; // Voici maintenant ce que j'aimerais reussir a faire
}
Marsh Posté le 02-06-2008 à 15:47:53
skeye a écrit : Tu tiens vraiment à ce qu'il continue à écrire ce genre de code? |
J'ai, il y a bien longtemps, abandonné tout espoir sur l'apprentissage des bonnes méthodes de programmation en php. Tout le monde lui explique que c'est pas une bonne idée, qu'en plus pour y arriver il faut utiliser des moyens détournés.
Si tout cela ne l'interpelle pas et qu'il choisit d'utiliser cet horreur c'est qu'on pouvait pas grand chose pour lui, alors autant qu'il utilise le eval
edit:
babakill a écrit : <input type=text name='attribut/1\' value='ALLOWIN'> |
tiens pour l'affectation tu peux utiliser:
Code :
|
Marsh Posté le 02-06-2008 à 15:50:49
anapajari a écrit : |
Je suis bien entendu ouvert au bonnes méthodes mais pour l'instant je n'en vois pas de meilleur, alors ce genre de remarque me semble encore moins constructive !
Marsh Posté le 02-06-2008 à 15:54:09
anapajari a écrit : |
anapajari a écrit :
|
Merci beaucoup !
Marsh Posté le 02-06-2008 à 16:14:11
babakill a écrit : |
deja commencer par utiliser des tableaux directement dans les noms de variables
genre
<input name="champ[249][]">
que tu vas récupérer dans $_POST['champ'][249]
Marsh Posté le 02-06-2008 à 14:55:11
Bonjour,
Je fais des tests pour utiliser les variables dynamiques mais je suis confronter au problème suivant :
$racine = simplexml_load_file("http://localhost/test.xml" );
$test = "racine->lien[1]->objet[0]->attribut[0]";
echo "<p>".$$test."</p>"; // Ne marche Pas
echo "<p>".$racine->lien[1]->objet[0]->attribut[0]."</p>"; // Marche ( affiche la valeur concernée)
En fait j'ai une première page qui parse un fichier xml avec un formulaire afin de modifier la valeur des attributs du fichier parsé.
La page de réception des données du formulaire doit mettre a jour le xml, pour cela je re-parse l'ancien fichier xml afin d'affecter les nouvelles valeurs.
Merci d'avance,
Adrien
Message édité par babakill le 02-06-2008 à 14:56:37