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

Bibliothèques et frameworks PHP Discussion :

Insérer des variables php dans un fichier xml


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Insérer des variables php dans un fichier xml
    Bonjour à tous.
    Je débute en xml et n'est que peu d'expérience en php.

    Je souhaite changer dynamiquement l'intitulé des continents d'une carte intéractive codée en xml.

    Voici le fichier xml de départ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <map map_file="maps/continents.swf" zoom_x="0%" zoom_y="0%" zoom="100%" tl_long="-168.49" tl_lat="83.63" br_long="190.3" br_lat="-55.58" >
      <areas>
        <area mc_name="africa" title="Africa" color="#7F7F65" zoom="250%" zoom_x="-84.94%" zoom_y="-118.95%" url="!ammap/ammap_data_africa.xml"/>
        <area mc_name="australia" title="Australia and Oceania" color="#B8183E" zoom="400%" zoom_x="-294.35%" zoom_y="-280.58%" url="!ammap/ammap_data_australia.xml"/>
        <area mc_name="europe" title="Europe" color="#BC2737" zoom="310%" zoom_x="-116.92%" zoom_y="-80.99%" url="!ammap/ammap_data_europe.xml"/>
        <area mc_name="asia" title="Asia" color="#CDC9AC"  zoom="240%" zoom_x="-125.46%" zoom_y="-78.18%" url="!ammap/ammap_data_asia.xml"/>
        <area mc_name="north_america" title="North America" color="#313326" zoom="270%" zoom_x="-9.51%" zoom_y="-74.75%" url="!ammap/ammap_data_namerica.xml"/>
        <area mc_name="south_america" title="South America" color="#A14F4F" zoom="250%" zoom_x="-32.36%" zoom_y="-151.95%" url="!ammap/ammap_data_samerica.xml"/>
      </areas>
    </map>
    N'étant qu'en phase de "prise en main", je ne cherche qu'à faire changer le title en fonction d'une base de données toute bêbête. J'ai donc (peut-être un peu naïvement) fait une connection à une db ainsi qu'un query, mis le code xml dans des echo, en le concaténant avec les variables contenant les valeurs de la base de données. Evidemment ça ne marche pas, et pour ne rien arranger, la carte ne me permet pas de savoir de quel type d'erreur il s'agit. Bref, 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
    <?php
    	header('Content-Type: text/xml');
    	try
    	{
    		mysql_connect('localhost', 'root', '');
    		mysql_select_db('panjiia');
    		$requete = mysql_query('select * from test');
    		$arr = array();
    		while ($obj = mysql_fetch_object($requete))
    		{
    			$arr[]= $obj;
    		}
    		echo '<?xml version="1.0" encoding="UTF-8"?>';
    		echo '<map map_file="maps/continents.swf" zoom_x="0%" zoom_y="0%" zoom="100%" tl_long="-168.49" tl_lat="83.63" br_long="190.3" br_lat="-55.58" >';
    		echo '<areas>';
    		$texte = $arr[0]->valeur_continent;
    		echo '<area mc_name="africa" title="'.$texte.'" color="#006A6A" zoom="250%" zoom_x="-84.94%" zoom_y="-118.95%" url="!ammap/ammap_data_africa.xml"/>';
    		$texte = $arr[1]->valeur_continent;
    		echo '<area mc_name="australia" title="'.$texte.'" color="#55604F" zoom="400%" zoom_x="-294.35%" zoom_y="-280.58%" url="!ammap/ammap_data_australia.xml"/>';
    		$texte = $arr[2]->valeur_continent;
    		echo '<area mc_name="europe" title="'.$texte.'" color="#55604F" zoom="310%" zoom_x="-116.92%" zoom_y="-80.99%" url="!ammap/ammap_data_europe.xml"/>';
    		$texte = $arr[3]->valeur_continent;
    		echo '<area mc_name="asia" title="'.$texte.'" color="#70A184" zoom="240%" zoom_x="-125.46%" zoom_y="-78.18%" url="!ammap/ammap_data_asia.xml"/>';
    		$texte = $arr[4]->valeur_continent;
    		echo '<area mc_name="north_america" title="'.$texte.'" color="#337D63" zoom="270%" zoom_x="-9.51%" zoom_y="-74.75%" url="!ammap/ammap_data_namerica.xml"/>';
    		$texte = $arr[5]->valeur_continent;
    		echo '<area mc_name="south_america" title="'.$texte.'" color="#8CA19A" zoom="250%" zoom_x="-32.36%" zoom_y="-151.95%" url="!ammap/ammap_data_samerica.xml"/>';
    		echo '</areas>';
    		echo '</map>';
    	}
    	catch (exception $e)
    	{
    		die('Erreur : '.$e->getmessage());
    	}
    ?>
    Voilà, merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut
    Marrant, j'ai déjà du générer des fichiers xml pour AMMAP.

    Qu'est ce qui ne fonctionne pas exactement?
    As-tu essayé d'afficher ton fichier xml simplement dans ton navigateur?

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Tu sais que tu peux toujours faire ça en PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?=$xml_header;?>
    <root>
      <node value="<?=$value?>"><?=$content?></node>
    </root>
    Tu mets ça dans un fichier que tu appelles par exemple test.xml.php
    et tu l'appelles comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $value = 1;
    $content = "Lorem ipsum sit amet...";
    $xml_header = '<?xml version="1.0" encoding="UTF-8"?>';
     
    header('Content-Type: text/xml');
    include 'test.xml.php';
    et c'est dans la boite.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    J'étais sur le point de vous répondre (un truc incompréhensible et incompris) quand quelquechose a fait tilt. Le fichier text.XML.php dont parle Benjamin Delespierres. Je n'avais mis le .xml.

    Merci à vous deux en tout cas, et restez à l'écoute, je risque d'avoir besoin de vous rapidement et intensivement
    Merci encore !

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Dolu02 j'aurais encore une question pour toi (tu n'aurais jamais dû dire que tu connaissias ammap ). Comment fait-on pour envoyer des variables php dans les fichiers amma_data_africa, amma_data_europe...? D'ailleurs, ces fichiers sont quasiment identiques, et listent les pays de tous les continents, ça ne fait pas un peu double (enfin sextuple) emploi ? Il n'ya pas moyen de simplifier tout ça avec du php ? Ca fait beaucoup de questions désolé ^^
    Merci d'avance.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut
    Moi je n'ai travaillé qu'avec une seule carte du monde.
    Mais à mon avis, tu peux travailler avec un seul fichier de données qui sera utilisé par toutes tes cartes. Lors de l'appel de tes cartes tu peux spécifier le fichier de settings et le fichier data :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	<script type="text/javascript">
    		// <![CDATA[		
    		var so = new SWFObject("/dossier-de-la-carte/ammap.swf", "ammap", "910", "400", "8", "#FFFFFF");
    		so.addVariable("path", "/ton/chemin/");
    		so.addVariable("settings_file", escape("/ton-dossier/ton-fichier-settings.xml"));
    		so.addVariable("data_file", escape("/ton-dossier/ton-fichier-data.xml"));
    		so.addParam("scale", "noscale"); 
       		so.addParam("salign", "lt");
    		so.addParam("wmode", "transparent");
    		so.write("flashcontent");
    		// ]]>
    	</script>
    Je parle donc des variables settings_file et data_file.

    Ensuite la carte de chaque continent ira piocher dans les pays qui le concernent.

    J'espère que ça pourra t'aider pour la suite!

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse.
    Ca en fait je l'avais déjà fait. Mais un truc me titille, les fichiers de chaque continent sont en tous points identiques, à l'exception du zoom.
    Bref, la solution que j'ai retenue est la suivante.
    Je crée des fichiers ammap_data_africa.xml.php etc... qui appellent le fichier xml de départ ainsi qu'une fonction de parsage qui cherche chaque title pour le modifier en fonction d'une bas de données. Dans le code ci dessous j'ai zappé la base de données pour faire un truc statique, histoire de simplifier, mais l'erreur reste la même, j'en déduis qu'a priori, mon fichier php est correct.

    Donc, voici ammap_data_africa.xml.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    	session_start();
    	header('Content-Type: text/xml');
    	require ('parsage.php');
    	//$i = 1;
    	//while (isset($_SESSION[$i]))
    	//{
    		echo parsage('ammap_data_africa.xml', 'plop', 'FRANCE');
    		//echo parsage('ammap_data_africa.xml', $_SESSION[$i], $_SESSION['pays']);
    		//$i++;
    	//}
    ?>
    et la fonction de parsage (pour laquelle j'ai de sérieux doutes) :

    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
    <?php
    	function parsage ($document, $newtitle, $pays_actuel)
    	{
    		$doc_xml = new DomDocument();
    		$doc_xml->load($document);
    		$elements = $doc_xml->getElementsByTagName('map');
    		foreach ($elements as $element);
    		{
    			if ($element->node_Value == $pays_actuel)
    			{
    				$element->node_Value = $newtitle;
    			}
    		}
    		return $doc_xml;
    	}
    ?>
    D'ailleurs, je ne suis même pas sûr que ce soit à proprement parlé une fonction de parsage, je débute réellement alors cette map que m'a donné mon patron est un vrai calvaire.
    Merci d'avance pour ta (ou vos) réponse.

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut
    Chez moi, dans le(s) fichier(s) data, l'élément <map> est la racine du document et dans lequel se trouvent des <area> pour chaque pays.

    Si je comprends bien tu essaie de changer le nom du pays?

    Sinon, il y a plus simple :
    Dans le dossier ammap_data_africa.xml, tu insères des "tokens", par exemple [MNO-PAYS-1], [MON-PAYS-2] etc...

    Ensuite au lieu de jouer avec simplexml, tu fais un str_replace sur tes toeks et tu renvoies le tout.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Hmm Hmm, mais euh, c'est quoi un token exactement ? Et le str_replace s'utilise en php ? Dans le parsage ? OMG je vais jamais m'en sortir :/

    Hmm ok je crois que je vois le genre.
    Le problème, c'est que cdata est une balise, si je me trompe pas.
    Or le truc que je veux changer est uniquement le title d'une autre balise, et il ne semble pas apprécier une balise cdata à l'intérieur d'une autre (les balises <area> en l'occurence). Je pourrais mettre celle-ci entière dans cdata, mais après il faudrait ne changer que le title... En utilisant les expréssions régulières en php peut-être...

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut
    Disons que tu pars de ce fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <map map_file="maps/continents.swf" zoom_x="0%" zoom_y="0%" zoom="100%" tl_long="-168.49" tl_lat="83.63" br_long="190.3" br_lat="-55.58" >
      <areas>
        <area mc_name="africa" title="[TITLE-1]" color="#7F7F65" zoom="250%" zoom_x="-84.94%" zoom_y="-118.95%" url="!ammap/ammap_data_africa.xml"/>
        <area mc_name="australia" title="[TITLE-2]" color="#B8183E" zoom="400%" zoom_x="-294.35%" zoom_y="-280.58%" url="!ammap/ammap_data_australia.xml"/>
        <area mc_name="europe" title="[TITLE-3]" color="#BC2737" zoom="310%" zoom_x="-116.92%" zoom_y="-80.99%" url="!ammap/ammap_data_europe.xml"/>
        <area mc_name="asia" title="[TITLE-4]" color="#CDC9AC"  zoom="240%" zoom_x="-125.46%" zoom_y="-78.18%" url="!ammap/ammap_data_asia.xml"/>
        <area mc_name="north_america" title="[TITLE-5]" color="#313326" zoom="270%" zoom_x="-9.51%" zoom_y="-74.75%" url="!ammap/ammap_data_namerica.xml"/>
        <area mc_name="south_america" title="[TITLE-6]" color="#A14F4F" zoom="250%" zoom_x="-32.36%" zoom_y="-151.95%" url="!ammap/ammap_data_samerica.xml"/>
      </areas>
    </map>
    D'abord, tu récupères le contenu du fichier dans une variable, ensuite tu remplaces tes "tokens" par tes variables.
    Donc quelquechose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Récupération du contenu du fichier xml
    $xml = file_get_contents('ton-dossier/ton-fichier.xml');
    //Insertion de tes variables
    while($row = myqsl_fetch_object($ton_result_sql)) {
    	$xml = str_replace('TITLE-'.$row->ton_ID, $row->ton_champs, $xml);
    }
    //Output de ton fichier final
    echo $xml;
    Ici, la variable $row->ton_ID, doit bien entedu correspondre avec les variables que tu as définie dans le fichier xml.
    C'est juste une idée, c'est à adapter en focntion de tes besoins.

    Les CDATA servent à mettre du texte dans le fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <root>
    	<item1>
    		<id>123</id>
    		<description><![CDATA[Ici je mets le texte dont j'ai envie, avec de la poncutation; un peu d'accents éàç aussi, des apostrophes ' " ' et des caractères spéciaux & @ $.]]></description>
    	</item1>
    </root>

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    OK j'ai fait un truc dans le genre, sans utiliser des pseudo-variables du genre TITLE-1. Donc maintenant, si je lance mon fichier ammap_data_africa.xml.php seul, il fonctionne. Si je l'appelle via ammap_data.xml.php, là il boude.
    Ca me sort "Un seul élément de niveau supérieur est autorisé dans un document XML." j'en conclut donc qu'il y a plusieurs balises <map> en sortie.

    Là où je ne comprends pas, c'est que le fichier ammap_data_africa est appelé par ammap_data, auquel je n'ai pas touché ! Le php que j'utilise dans ammap_data.xml.php n'influe pas directement sur ammap_data, il calcule juste des variables de sorties utilisées dans ammap_data_africa.xml.php.

    Y a-t-il un moyen de voir le xml généré par php ? Le source de la page (qui bug, donc) n'est pas disponible.

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut
    Citation Envoyé par Aezerium Voir le message
    Y a-t-il un moyen de voir le xml généré par php ? Le source de la page (qui bug, donc) n'est pas disponible.
    A priori (je peux me tromper), on peut toujours voir la source d'un document, même quand il est mal formé. Quel navigateur utilise-tu?

    Sinon il est possible de voir ça en utilisant un webdebugger de type Fiddler lorsque tu lance ta map, ou alors HttpFox (ou autre) dans Firefox.

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ah bah oui, je vois le code de ma page. Y'a dû y avoir un bug la dernière fois.
    Mais bon, j'utilise des frames (mouais, mes profs datent de la guerre de 14) donc en source je vois que le frameset. Je bidouille mes fichiers pour faire correler tout ça, et je re-post

    PS : Avant de continuer, faudra m'indiquer le montant de tes honoraires xD
    En tout cas merci beaucoup pour ton aide.

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut
    Avec le module Webdevelopper de Firefox, tu peux afficher la source d'une frame :

    Click droit -> Webdevelopper -> voir source -> voir code source du cadre.

    Pour les honoraires, je suis peut-être un peu cher alors un fera l'affaire!

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    C'est bon ! J'ai réussi à modifier l'intitulé des pays dans ammap. Bon, mon sql foire et mes title affichent tous 0%. Pour un site de statistiques, c'est dommage :p. Mais ça c'est une autre histoire...
    Donc voilà, merci bien pour ton aide précieuse !

Discussions similaires

  1. Variable PHP dans un fichier XML
    Par BOUHH37 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 04/06/2015, 14h30
  2. Insérer des balises html dans un fichier xml
    Par Abac_Angelique dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 29/04/2009, 17h41
  3. [SQL] insérer des variables php dans une requête sql
    Par lili38 dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 22/06/2007, 16h38
  4. [PHP-JS] comment recupérer des variables javascript dans un fichier php
    Par domino_dj dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/02/2007, 11h46
  5. Réponses: 12
    Dernier message: 27/01/2006, 11h07

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