Problème simplexml

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème simplexml

par yeram » 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);
	
}

par yeram » 16 nov. 2007, 16:33

Ok nikel.
Merci

par Truc » 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

par yeram » 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);
	
}

par Truc » 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);

Problème simplexml

par yeram » 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);
	
}