Problème simplexml

Eléphanteau du PHP | 13 Messages

16 nov. 2007, 12:35

Bonjour à tous,

Je suis entrain de créer un fichier XML grâce à simplxml à partir d'un fichier CSV. Mais j'ai une erreur comme qui dirai bizarre. Lorsque je fais mon "addChild" dans la boucle de parcours de mon fichier il me renvoie une erreur alors que si je mettre mon "addChild" en dehors de ma boucle ca fonctionne.
Est ce que quelqu'un aurai une idée ? N’hésité pas à faire des remarques sur mon code.


Voici le message d'erreur affiché dans mon navigateur :

Fatal error: Call to a member function addChild() on a non-object in C:\wamp\www\MJJ\7\Administration\liste_joueur\traitement_add_liste_joueur.php on line 118


et voici le code (la ligne 118 = $liste->addChild("joueur");) :
function save_to_xml($fichier, $extension_valide, $ext, $nomliste,  $fichier_xml= 'liste_joueur.xml')
{
	// On ouvre le fichier en lecture dans la variable $file
	$file = fopen($fichier, "r");

	$racine = simplexml_load_file($fichier_xml) or creerXML($fichier_xml);
	$racine->addChild("Listes");
	$liste = $racine->Listes;
	$liste['nom'] = $nomliste; 

	if ($extension_valide[0] == $ext)
	{
		echo $fichier." est un fichier excel. <br />"; 
		echo readfile($fichier);
		/*while (!feof($file))
		{ 
		 	// On lit une ligne 
		   	$ligne = fgets($file,4096); 
	
		   	// On récupère les champs séparés par ; dans liste
		   	$liste = explode( ";",$ligne);  
			print_r($liste);
		}	*/
	}
	if ($extension_valide[1] == $ext )
	{
		$masque_erreur = " ";
		echo $fichier." est un fichier csv. <br />";
			
		while (!feof($file))
		{ 
		 	// On lit une ligne 
		   	$ligne = fgets($file,4096); 
		
		   	// On récupère les champs séparés par ; dans liste
		   	$liste = explode( ";",$ligne);  
			
			if ($liste[0] != "nom" )
			{
				if ( $liste[0] != "" )
				{
				
					//On assigne les variables en supprimant les espaces devant et aprés le texte ET en traduit pour le HTML
					$nom = trim(htmlentities($liste[0], ENT_QUOTES)); 
					$prenom = trim(htmlentities($liste[1], ENT_QUOTES));		
					$tel = trim(htmlentities($liste[2])); 
					$mail = trim($liste[3]);
				
					// ON DEFINIT LES MASQUES
					// contient un numéro commencant par 0 suivit par 0...9, suivit par un espace ou un tiret ou un point ou un slack et .... multiplier par 4.
					$masque_phone = "`^[0][0-9][- \.—]?([0-9][0-9][- \.—]?){4}$`";
					// contient que des nombre numérique d'une longueur comprise entre 9 et 14.
					$masque_phone2 = "`^(\d{9,14})$`";
					
					// Test du numéro de téléphone
					if ( !preg_match($masque_phone,$tel) )
					{
						if ( !preg_match($masque_phone2,$tel) )
						{
							$masque_erreur .= "Mauvaise numéro de téléphone (".$tel. ") pour ".$nom." ".$prenom.".  <br />";
						}
					}
					
					$liste->addChild("joueur");
					$joueur = $liste->joueur;
					
					$joueur->addChild("nom");
					$joueur->addChild("prenom");
					$joueur->addChild("telephone");
					$joueur->addChild("E-mail");

					//echo $nom." ".$prenom." ".$tel." ".$mail." <br />";
					
				}
			}
		}	
			
		echo "<br /> Erreur : <br />" .$masque_erreur; 
		  
	}
	// On enregistre le traitement xml dans $fichier_xml
	$racine->asXml($fichier_xml);
	// On ferme le fichier
	fclose($file);
	
}


Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 nov. 2007, 14:18

Call to a member function addChild() on a non-object

donc $liste n'est pas un objet... mais un tableau :-k
$liste = explode( ";",$ligne);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 13 Messages

16 nov. 2007, 14:34

merci, pour l'info, mais même en mettant le code suivante, c'est toujours le même message d'erreur
:(
function save_to_xml($fichier, $extension_valide, $ext, $nomliste,  $fichier_xml= 'liste_joueur.xml')
{
	// On ouvre le fichier en lecture dans la variable $file
	$file = fopen($fichier, "r");


	$racine = simplexml_load_file($fichier_xml) or creerXML($fichier_xml);
	$racine->addChild("LISTES");
	$LISTE = $racine->LISTES;
	$LISTE['nom'] = $nomliste; 
	$LISTE->addChild("JOUEUR");
	$JOUEUR = $liste->JOUEUR;

	
	if ($extension_valide[0] == $ext)
	{
		echo $fichier." est un fichier excel. <br />"; 
		echo readfile($fichier);
		/*while (!feof($file))
		{ 
		 	// On lit une ligne 
		   	$ligne = fgets($file,4096); 
	
		   	// On récupère les champs séparés par ; dans liste
		   	$liste = explode( ";",$ligne);  
			print_r($liste);
		}	*/
	}
	if ($extension_valide[1] == $ext )
	{
		$masque_erreur = " ";
		echo $fichier." est un fichier csv. <br />";
			
		while (!feof($file))
		{ 
		 	// On lit une ligne 
		   	$ligne = fgets($file,4096); 
		
		   	// On récupère les champs séparés par ; dans liste
		   	$liste = explode( ";",$ligne);  
			
			if ($liste[0] != "nom" )
			{
				if ( $liste[0] != "" )
				{
				
					//On assigne les variables en supprimant les espaces devant et aprés le texte ET en traduit pour le HTML
					$nom = trim(htmlentities($liste[0], ENT_QUOTES)); 
					$prenom = trim(htmlentities($liste[1], ENT_QUOTES));		
					$tel = trim(htmlentities($liste[2])); 
					$mail = trim($liste[3]);
				
					// ON DEFINIT LES MASQUES
					// contient un numéro commencant par 0 suivit par 0...9, suivit par un espace ou un tiret ou un point ou un slack et .... multiplier par 4.
					$masque_phone = "`^[0][0-9][- \.—]?([0-9][0-9][- \.—]?){4}$`";
					// contient que des nombre numérique d'une longueur comprise entre 9 et 14.
					$masque_phone2 = "`^(\d{9,14})$`";
					
					// Test du numéro de téléphone
					if ( !preg_match($masque_phone,$tel) )
					{
						if ( !preg_match($masque_phone2,$tel) )
						{
							$masque_erreur .= "Mauvaise numéro de téléphone (".$tel. ") pour ".$nom." ".$prenom.".  <br />";
						}
					}
					
					$JOUEUR->addChild("nom");
					/*
					$JOUEUR->addChild("prenom");
					$JOUEUR->addChild("telephone");
					$JOUEUR->addChild("E-mail");
					*/
					//echo $nom." ".$prenom." ".$tel." ".$mail." <br />";
					
				}
			}
		}	
			
		echo "<br /> Erreur : <br />" .$masque_erreur; 
		  
	}
	// On enregistre le traitement xml dans $fichier_xml
	$racine->asXml($fichier_xml);
	// On ferme le fichier
	fclose($file);
	
}


Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 nov. 2007, 14:53

avec quelque chose de plus clair :
$racine = simplexml_load_file($fichier_xml) or creerXML($fichier_xml);  
    
$listes = $racine->addChild("LISTES");
$listes->addAttribute("nom",$nomliste);  
$joueur = $listes->addChild("JOUEUR"); 
NB: utilise des minuscules pour les variables et des majuscules que pour les contantes

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 13 Messages

16 nov. 2007, 16:33

Ok nikel.
Merci

Eléphanteau du PHP | 13 Messages

16 nov. 2007, 16:35

voici les changements apporté :
function save_to_xml($fichier, $extension_valide, $ext, $nomliste,  $fichier_xml= 'liste_joueur.xml')
{
	// On ouvre le fichier en lecture dans la variable $file
	$file = fopen($fichier, "r");

	// On charge $fichier_xml en mémoire si il existe sinon on le créer avec la fonction creerXML
	$racine = simplexml_load_file($fichier_xml) or creerXML($fichier_xml);
	
	// On créer l'élément liste
	$racine->addChild("liste");
	$listes = $racine->liste;
	
	// On créer l'attribut nom de l'élément nom avec comme valeur le nom de la liste	
	$listes['NOM'] = $nomliste; 
	
	
	if ($extension_valide[0] == $ext)
	{
		echo $fichier." est un fichier excel. <br />"; 
		echo readfile($fichier);
	}
	if ($extension_valide[1] == $ext )
	{
		$masque_erreur = " ";
		$Nligne = 0;
		echo $fichier." est un fichier csv. <br />";
			
		while (!feof($file))
		{ 
		 	// On lit une ligne 
		   	$ligne = fgets($file,4096); 
			
		   	// On récupère les champs séparés par ; dans liste
		   	$liste = explode( ";",$ligne);  
			
			if ($liste[0] != "nom" )
			{
				if ( $liste[0] != "" )
				{
					// On affiche le numéro de la ligne 
					//echo "Numéro de ligne : ".$Nligne." <br />";
					
					//On assigne les variables en supprimant les espaces devant et aprés le texte ET en traduit pour le HTML
					$nom = trim(htmlentities($liste[0], ENT_QUOTES)); 
					$prenom = trim(htmlentities($liste[1], ENT_QUOTES));		
					$tel = trim(htmlentities($liste[2])); 
					$mail = trim($liste[3]);
				
					// ON DEFINIT LES MASQUES
					// contient un numéro commencant par 0 suivit par 0...9, suivit par un espace ou un tiret ou un point ou un slack et .... multiplier par 4.
					$masque_phone = "`^[0][0-9][- \.—]?([0-9][0-9][- \.—]?){4}$`";
					// contient que des nombre numérique d'une longueur comprise entre 9 et 14.
					$masque_phone2 = "`^(\d{9,14})$`";
					
					// Test du numéro de téléphone
					if ( !preg_match($masque_phone,$tel) )
					{
						if ( !preg_match($masque_phone2,$tel) )
						{
							$masque_erreur .= "Mauvaise numéro de téléphone (".$tel. ") pour ".$nom." ".$prenom.".  <br />";
						}
					}
					
					$listes->addChild("joueur");
					$joueur = $listes->joueur[$Nligne]; 
					$joueur->addChild("nom", $nom);
					$joueur->addChild("prenom", $prenom);
					$joueur->addChild("telephone", $tel);
					$joueur->addChild("E-mail", $mail);
					
					//echo $nom." ".$prenom." ".$tel." ".$mail." <br />";
					
					// On incrémente le numéro de ligne
					$Nligne = $Nligne +1  ;					
				}
			}
		}	
			
		echo "<br /> Erreur : <br />" .$masque_erreur; 
		  
	}
	// On enregistre le traitement xml dans $fichier_xml
	$racine->asXml($fichier_xml);
	// On ferme le fichier
	fclose($file);
	
}