IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Générer un fichier XML à partir php et requête SQL


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 120
    Points : 66
    Points
    66
    Par défaut Générer un fichier XML à partir php et requête SQL
    Bonjour,

    Ma table s'appelle `prestation` (`id`,`date`,`client`,`name`,`tache`,`debut`,`fin`,`rapport`,`selection`,`note`)

    J'ai entamé mon code que je l'ai pris à partir de l'exemple suivant:

    http://www.developpez.net/forums/d79...ier-xml-mysql/

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
      <?php
     
      $prestation = 'color';
     
      include ('db.inc.php');
     
      if($_SESSION['category']=="Utilisateur")
     
      $req="select * from prestation where name in (select p.name from inscription i, project p where i.pseudo= p.affectation and i.email = '".$email."')";
     
      else
     
    	$req="select * from prestation";  
     
    	$stmt	= $connexion->prepare($req);
     
    	$stmt->execute();	
     
    	$dom = new DomDocument();
     
    	$root = $doc->createElement('root');
     
    	$root = $doc->appendChild($root);
     
    	while( $results	=	$stmt->fetchAll(PDO::FETCH_ASSOC))
    	{
    		$occ = $doc->createElement($prestation);       //--> Un noeud a chaque ligne
     
    		$occ = $root->appendChild($occ);
     
    		foreach ($row as $fieldname => $fieldvalue)   //--> Ajout d'un noeud fils pour chaque champ
    		{ 					
     
    			$child = $doc->createElement($fieldname);    //--> Nom du child et sa valeur a ajouter
     
    			$child = $occ->appendChild($child);
     
    			$value = $doc->createTextNode($fieldvalue);
     
    			$value = $child->appendChild($value);
     
    		}
     
    	}
     
    	$doc->save('prestations/prestation.xml');
     
    	$doc->formatOutput = TRUE;
     
      ?>
    Je sais qu'il y des variables qui ne sont pas dans leur place, j'ai l'erreur suivante:

    Fatal error: Call to a member function createElement() on a non-object in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\projects\PortailRessources\genererXML.php on line 21
    Est ce qu'il me fallait développer les fichiers .XML et .DTD ou ça se génère d'une façon automatique?

    Amicalement.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Hello,

    'faut choisir entre $dom ou $doc .

    Citation Envoyé par ramzi87 Voir le message
    Est ce qu'il me fallait développer les fichiers .XML et .DTD ou ça se génère d'une façon automatique?
    Je comprends pas la question mais je vais y répondre quand même, parce que, qu'est-ce que la vie sans un peu d'aventure ?

    Ce code sert à créer un fichier XML, donc je dirais que ceux-là sont générés automatiquement.

    Il n'y a pas trace de fichier DTD, par contre. Ni généré, ni dont il y ait besoin.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 120
    Points : 66
    Points
    66
    Par défaut re
    Bonsoir,
    je vous ai compris. Le fichier prestation.xml a été généré mais il est presque vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0"?>
     
    -<root>
     
    <id/>
     
    </root>
    il y a warning:

    Warning: Invalid argument supplied for foreach() in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\projects\PortailRessources\genererXML.php on line 31

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Même problème, les variables qui ont pas le bon nom.

    Mais tout ça, c'est du PHP, pas du XML.

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 120
    Points : 66
    Points
    66
    Par défaut re
    Pourquoi le même problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
      <?php
     
      $prestation = 'id';
     
      include ('db.inc.php');
     
      if($_SESSION['category']=="Utilisateur")
     
      $req="select * from prestation where name in (select p.name from inscription i, project p where i.pseudo= p.affectation and i.email = '".$email."')";
     
      else
     
    	$req="select * from prestation";  
     
    	$stmt	= $connexion->prepare($req);
     
    	$stmt->execute();	
     
    	$doc = new DomDocument();
     
    	$root = $doc->createElement('root');
     
    	$root = $doc->appendChild($root);
     
    	while( $results	=	$stmt->fetchAll(PDO::FETCH_ASSOC))
    	{
    		$occ = $doc->createElement($prestation);       //--> Un noeud a chaque ligne
     
    		$occ = $root->appendChild($occ);
     
    		foreach ($row as $fieldname => $fieldvalue)   //--> Ajout d'un noeud fils pour chaque champ
    		{ 					
     
    			$child = $doc->createElement($fieldname);    //--> Nom du child et sa valeur a ajouter
     
    			$child = $occ->appendChild($child);
     
    			$value = $doc->createTextNode($fieldvalue);
     
    			$value = $child->appendChild($value);
     
    		}
     
    	}
     
    	$doc->save('prestations/prestation.xml');
     
    	//$doc->load('prestations/prestation.xml');
     
    	$doc->formatOutput = TRUE;
     
     
     
    	include('prestation.php');
      ?>

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Même problème, les variables qui ont pas le bon nom.
    La variable $row n'existe pas, et je voudrais que tu vérifies toutes tes variables quand quelqu'un t'a déjà dit que tu t'es trompé dans tes variables.

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 120
    Points : 66
    Points
    66
    Par défaut re
    $results c'est vrai mais il reste le même problème!!
    while est fausse?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while( $results	=	$stmt->fetchAll(PDO::FETCH_ASSOC))
    	{
    		$occ = $doc->createElement($prestation);       //--> Un noeud a chaque ligne
     
    		$occ = $root->appendChild($occ);
     
    		foreach ($results as $fieldname => $fieldvalue)   //--> Ajout d'un noeud fils pour chaque champ

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 120
    Points : 66
    Points
    66
    Par défaut re
    Bonjour, où est le problème (Invalid Character Error)??

    Fatal error: Uncaught exception 'DOMException' with message 'Invalid Character Error' in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\projects\PortailRessources\genererXML.php:34 Stack trace: #0 C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\projects\PortailRessources\genererXML.php(34): DOMDocument->createElement('0') #1 {main} thrown in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\projects\PortailRessources\genererXML.php on line 34
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
      <?php
     
      $prestation = 'id';
     
      include ('db.inc.php');
     
      if($_SESSION['category']=="Utilisateur")
     
      $req="select * from prestation where name in (select p.name from inscription i, project p where i.pseudo= p.affectation and i.email = '".$email."')";
     
      else
     
    	$req="select * from prestation";  
     
    	$stmt	= $connexion->prepare($req);
     
    	$stmt->execute();	
     
    	$doc = new DomDocument();
     
    	$root = $doc->createElement('root');
     
    	$root = $doc->appendChild($root);
     
    	while( $results	=	$stmt->fetchAll(PDO::FETCH_ASSOC))
    	{
    		$occ = $doc->createElement($prestation);       //--> Un noeud a chaque ligne
     
    		$occ = $root->appendChild($occ);
     
    		foreach ($results as $fieldname => $fieldvalue)   //--> Ajout d'un noeud fils pour chaque champ
    		{ 					
     
    			$child = $doc->createElement($fieldname);    //--> Nom du child et sa valeur a ajouter
     
    			$child = $occ->appendChild($child);
     
    			$value = $doc->createTextNode($fieldvalue);
     
    			$value = $child->appendChild($value);
     
    		}
     
    	}
     
    	$doc->save('prestations/prestation.xml');
     
    	$doc->formatOutput = TRUE;
    	//$handle = fopen("prestations/prestation.xml", "r");
     
    	//$doc->load('prestations/prestation.xml');
     
      include('prestation.php');
      ?>
    Amicalement.

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Le message indique :

    DOMDocument->createElement('0')
    Ça veut dire que ta variable $fieldname contient '0', donc que tu essaies de créer un élément XML de nom <0>.
    En XML les éléments ne peuvent pas commencer par un chiffre... Et de toute façon je ne pense pas que c'est ce que tu voulais faire.

    À nouveau, je pense que ton problème est dans l'utilisation de PHP, pas de XML.

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 120
    Points : 66
    Points
    66
    Par défaut
    Le 1er champ id et se commence par '1' et le 2eme date peut etre il commence par '0' c'est ça le problème?

    c'est comme cet exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <rows>
    <row>
    <date><![CDATA[2015-09-01]]></date>
    <client><![CDATA[FTW Group Corporate]]></client>
    <project><![CDATA[START]]></project>
    <task><![CDATA[Tache matin]]></task>
    <start><![CDATA[8:00]]></start>
    <finish><![CDATA[8:01]]></finish>
    <duration><![CDATA[0.02]]></duration>
    <note><![CDATA[-Finir les tâches restantes]]></note>
    </row>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
      <?php
     
      $prestation = 'id';
     
      include ('db.inc.php');
     
      if($_SESSION['category']=="Utilisateur")
     
      $req="select * from prestation where name in (select p.name from inscription i, project p where i.pseudo= p.affectation and i.email = '".$email."')";
     
      else
     
    	$req="select * from prestation";  
     
    	$stmt	= $connexion->prepare($req);
     
    	$stmt->execute();	
     
    	$doc = new DomDocument();
     
    	$root = $doc->createElement('root');
     
    	$root = $doc->appendChild($root);
     
    	while( $results	=	$stmt->fetchAll(PDO::FETCH_ASSOC))
    	{
    		$occ = $doc->createElement($prestation);       //--> Un noeud a chaque ligne
     
    		$occ = $root->appendChild($occ);
     
    		foreach ($results as $fieldname => $fieldvalue)   //--> Ajout d'un noeud fils pour chaque champ
    		{ 					
     
    			$child = $doc->createElement($fieldname);    //--> Nom du child et sa valeur a ajouter
     
    			$child = $occ->appendChild($child);
     
    			$value = $doc->createTextNode($fieldvalue);
     
    			$value = $child->appendChild($value);
     
    		}
     
    	}
     
    	$doc->save('prestations/prestation.xml');
     
    	$doc->formatOutput = TRUE;
     
    	include('prestation.php');
     
    	//$handle = fopen("prestations/prestation.xml", "r");
      ?>
    J'ai trouvé l'erreur c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( $results	=	$stmt->fetch(PDO::FETCH_ASSOC))
    et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( $results	=	$stmt->fetchALL(PDO::FETCH_ASSOC))
    .

    Bref, comment je peux ouvrir mon fichier XML tout seul après sa création?

    Cordialement.

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155

  12. #12
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 120
    Points : 66
    Points
    66
    Par défaut re
    Bonsoir,

    echo $doc->saveHTML();
    m'affiche un bloc de données je veux qu'il soit comme le fichier XML qui est déjà enregistré avec des balises XML.

  13. #13
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 120
    Points : 66
    Points
    66
    Par défaut re
    Bonsoir,
    J'ai trouvé une solution pas mauvaise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $doc->save('prestations.xml');
     
    	$doc->formatOutput = TRUE;
     
     
    	$fichier = 'prestations.xml';
     
    	$xml = simplexml_load_file($fichier);
     
     
    	foreach($xml as $prestation){
    		echo $prestation->date.'<br>';	
    	}
    Merci tout le monde

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/09/2009, 22h19
  2. [PL/SQL] générer un fichier xml à partir du programme pl/sql
    Par moneyinthebank dans le forum PL/SQL
    Réponses: 2
    Dernier message: 15/06/2006, 18h09
  3. générer un fichier XML à partir d'un prog en C
    Par filou18fr dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 22/02/2006, 17h09
  4. générer un fichier xml à partir xsl ou xslt
    Par sarah1 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/05/2005, 18h57
  5. Réponses: 2
    Dernier message: 27/05/2004, 01h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo