Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/07/2006, 12h58   #1
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
Par défaut [DOM] modification d'un XML ?

Salut à tous,

mon script me renvoit l'erreur suivante (ligne rouge du script) :

Citation:
Fatal error: Call to a member function insertData() on a non-object in /mnt/107/sdc/7/2/.../inscrip.php on line 57
PHP5 est bien activé sur mon compte FREE, grâce à l'astuce du fichier .htaccess.

inscrip.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
			$doc = new DOMDocument();
			
			$source = "id_".$_SESSION['num'].".xml";
			
			$doc->load($source);
			
			$roots = $doc->getElementsByTagName("root");
			
			foreach($roots as $root){
				$ids_auto = $doc->getElementsByTagName("num_auto");
				$id_auto = $ids_auto->item(0)->firstChild;
				$id_auto->insertData(0, "id_".$_SESSION['num']);
				
				$noms = $doc->getElementsByTagName("nom");
				$nom = $noms->item(0)->firstChild;
				$nom->insertData(0, "id_".$_SESSION['nom']);
	
				$prenoms = $doc->getElementsByTagName("prenom");
				$prenom = $prenoms->item(0)->firstChild;
				$prenom->insertData(0, "id_".$_SESSION['prenom']);
			}
						
			$doc->saveXML();
Une idée, même une petite ... je dois rendre ça pour la fin de semaine !!!

Gôm
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 13h05   #2
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
Sinon, j'ai essayé plus simplement comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
			$doc = new DOMDocument();
 
			$doc->load("id_".$_SESSION['num'].".xml");
 
			$ids_auto = $doc->getElementsByTagName("num_auto");
			$id_auto = $ids_auto->item(0)->firstChild;
			$id_auto->insertData(0, "id_".$_SESSION['num']);
 
			$noms = $doc->getElementsByTagName("nom");
			$nom = $noms->item(0)->firstChild;
			$nom->insertData(0, "id_".$_SESSION['nom']);
 
			$prenoms = $doc->getElementsByTagName("prenom");
			$prenom = $prenoms->item(0)->firstChild;
			$prenom->insertData(0, "id_".$_SESSION['prenom']);
 
			$doc->saveXML();
...
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 13h10   #3
Membre éclairé
 
Avatar de DBProg
 
Étudiant
Inscription : juillet 2006
Messages : 242
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 242
Points : 315
Points : 315
Salut !

J'ai cherché dans la doc php mais je n'ai pas trouvé quelles sont les propriétés d'un objet DOMNode (ce que doit être $id_auto).

Par contre, peut-être quelque chose tout bête, essaye de tester si $id_auto != NULL avant de faire insertData pour voir si l'objet est bien instancié.
DBProg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 13h17   #4
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
Citation:
Envoyé par dbprog
Salut !

J'ai cherché dans la doc php mais je n'ai pas trouvé quelles sont les propriétés d'un objet DOMNode (ce que doit être $id_auto).

Par contre, peut-être quelque chose tout bête, essaye de tester si $id_auto != NULL avant de faire insertData pour voir si l'objet est bien instancié.

je viens de faire :
il me renvoit rien !

Donc $id_auto n'est pas instancié ?
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 13h20   #5
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
Comme tu peux le voir, mon élément "num_auto" n'a pas de fils !

C'est un peu idiot de faire :

Code :
$id_auto = $ids_auto->item(0)->firstChild;
mais apparemment, il faut toujours faire comme ça, même pour traiter un élément qui n'a pas de fils, ce qui est mon cas !
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 13h27   #6
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
Pourquoi, lui ça fonctionne et pas moi !
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 13h37   #7
Membre éclairé
 
Avatar de DBProg
 
Étudiant
Inscription : juillet 2006
Messages : 242
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 242
Points : 315
Points : 315
Là je t'avoue que je ne sais pas trop, mais essaye de faire une analyse remontante pour savori à partir d'où il y a un problème.

Teste si $noms->item(0) n'est pas null. En suite si $noms n'est pas null etc... Tu trouveras à partir d'où tu as une référence nulle et donc tu pourras cerner le problème.
DBProg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 13h43   #8
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
Citation:
Envoyé par dbprog
Là je t'avoue que je ne sais pas trop, mais essaye de faire une analyse remontante pour savori à partir d'où il y a un problème.

Teste si $noms->item(0) n'est pas null. En suite si $noms n'est pas null etc... Tu trouveras à partir d'où tu as une référence nulle et donc tu pourras cerner le problème.
Code :
1
2
3
			echo $id_auto = $ids_auto;
			echo $id_auto = $ids_auto->item(0);
			echo $id_auto = $ids_auto->item(0)->firstChild;
me renvoit :
Citation:
Object id #2
Object id #3
rien
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 13h54   #9
Membre éclairé
 
Avatar de DBProg
 
Étudiant
Inscription : juillet 2006
Messages : 242
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 242
Points : 315
Points : 315
Donc voilà, tu sais que c'est le firstChild qui n'a pas de valeur maintenant. A totu hasard as-tu esayé de faire un insertData sur item(0) (sans le firstChild ?

Après je ne peux pas t'en dire plus. Par contre, je ferai attention si j'étais toi, car l'api DOM dans php est encore en version non stable, ce qui fait qu'ils peuvent changer les noms de fonction d'une version à une autre, et tu peux te retrouver avec ton code qui ne fonctionne plus sur une simple upgrade de php.
DBProg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 14h20   #10
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
Citation:
Envoyé par dbprog
Donc voilà, tu sais que c'est le firstChild qui n'a pas de valeur maintenant. A totu hasard as-tu esayé de faire un insertData sur item(0) (sans le firstChild ?
Oui ça me donne la même erreur qu'avait la personne dont le problème a été résolue en ajoutant FirstChild ... sauf que moi en l'ajoutant ... ça me fait toujours une erreur !


Citation:
Envoyé par dbprog
Après je ne peux pas t'en dire plus. Par contre, je ferai attention si j'étais toi, car l'api DOM dans php est encore en version non stable, ce qui fait qu'ils peuvent changer les noms de fonction d'une version à une autre, et tu peux te retrouver avec ton code qui ne fonctionne plus sur une simple upgrade de php.
Malheureusement, je vais devoir vivre avec !!!
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 14h24   #11
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Je ne suis pas sûr de savoir où tu veux insérer les données, mais il ne FAUT PAS mettre de firstChild s'il n'y a pas de fils. Ca n'a pas de sens.

Citation:
Envoyé par dbprog
J'ai cherché dans la doc php mais je n'ai pas trouvé quelles sont les propriétés d'un objet DOMNode (ce que doit être $id_auto).
Tu as mal cherché, tout est là : http://fr3.php.net/manual/fr/ref.dom.php

Si ça peut t'aider : tutoriel PHP5 / DOM
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 14h31   #12
Rédacteur
 
Avatar de siddh
 
Inscription : novembre 2005
Messages : 3 879
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : novembre 2005
Messages : 3 879
Points : 4 270
Points : 4 270
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$doc = new DOMDocument();
			
			$source = "id_".$_SESSION['num'].".xml";
			
			$doc->load($source);
			
			$roots = $doc->getElementsByTagName("root");
			
			foreach($roots as $root){
				$ids_auto = $doc->getElementsByTagName("num_auto");
				$id_auto = $ids_auto->item(0);
                                $text = $doc->createTextNode("id_".$_SESSION['num']);
				$id_auto->appendChild($text);
				
				$noms = $doc->getElementsByTagName("nom");
				$nom = $noms->item(0)->firstChild;
				$nom->insertData(0, "id_".$_SESSION['nom']);
	
				$prenoms = $doc->getElementsByTagName("prenom");
				$prenom = $prenoms->item(0)->firstChild;
				$prenom->insertData(0, "id_".$_SESSION['prenom']);
			}
						
			$doc->saveXML();
et ça ?
__________________
Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

Cours | FAQ | Sources Javascript
Cours | FAQ | Sources PHP
Mes Articles
siddh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 14h47   #13
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
Citation:
Envoyé par siddh
et ça ?
J'ai essayé ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
			$doc = new DOMDocument();
 
			$source = "id_".$_SESSION['num'].".xml";
 
			$doc->load($source);
 
			$roots = $doc->getElementsByTagName("root");
 
			foreach($roots as $root){
				$ids_auto = $doc->getElementsByTagName("num_auto");
				$id_auto = $ids_auto->item(0);
				$text = $doc->createTextNode("id_".$_SESSION['num']);
				$id_auto->appendChild($text);
 
				$noms = $doc->getElementsByTagName("nom");
				$nom = $noms->item(0);
				$text = $doc->createTextNode($_SESSION['nom']);
				$nom->appendChild($text);
 
				$prenoms = $doc->getElementsByTagName("prenom");
				$prenom = $prenoms->item(0);
				$text = $doc->createTextNode($_SESSION['prenom']);
				$prenom->appendChild($text);
			}
 
			$doc->saveXML();
mais ça ne modifie en rien mon fichier xml
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 14h51   #14
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Citation:
Envoyé par ghohm
mais ça ne modifie en rien mon fichier xml
Ca tu n'en sais rien vu que tu ne récupères pas la sortie de saveXML (qui est une chaîne de caractères).
si tu veux écrire un fichier :
Code :
$doc->save($nomDuFichierCible);
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 14h54   #15
Rédacteur
 
Avatar de siddh
 
Inscription : novembre 2005
Messages : 3 879
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : novembre 2005
Messages : 3 879
Points : 4 270
Points : 4 270
Citation:
Envoyé par Eusebius
Ca tu n'en sais rien vu que tu ne récupères pas la sortie de saveXML (qui est une chaîne de caractères).
si tu veux écrire un fichier :
Code :
$doc->save($nomDuFichierCible);

+1
__________________
Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

Cours | FAQ | Sources Javascript
Cours | FAQ | Sources PHP
Mes Articles
siddh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 15h31   #16
Membre éprouvé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2003
Messages : 910
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2003
Messages : 910
Points : 407
Points : 407
+2 !

Je vous aiiiiiiiiiiiime !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$doc = new DOMDocument();
 
$source = "default.xml";
$cible = "id_".$_SESSION['num'].".xml";
 
$doc->load($source);
 
$ids_auto = $doc->getElementsByTagName("num_auto");
$id_auto = $ids_auto->item(0);
$text = $doc->createTextNode("id_".$_SESSION['num']);
$id_auto->appendChild($text);
 
$noms = $doc->getElementsByTagName("nom");
$nom = $noms->item(0);
$text = $doc->createTextNode($_SESSION['nom']);
$nom->appendChild($text);
 
$prenoms = $doc->getElementsByTagName("prenom");
$prenom = $prenoms->item(0);
$text = $doc->createTextNode($_SESSION['prenom']);
$prenom->appendChild($text);
 
$doc->save($cible);
A bientôt ... généralement, il m'arrive un autre problème juste après en avoir résoud un !
__________________
Quand on n'a pas d'tête, on a ...
ghohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h01.


 
 
 
 
Partenaires

Hébergement Web