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 :

[XSLT] Utilisation de XML avec PHP dans le cadre d'un site


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut [XSLT] Utilisation de XML avec PHP dans le cadre d'un site
    Bonsoir,

    Je suis étudiant en Informatique et je souhaiterai refaire mon site personnel pour y accueillir mes projets, écrire des articles et mettre quelques unes de mes photos. Pour le créer, j'envisage d'utiliser le XML afin de structuer proprement mes données et de séparer la forme du contenu.

    Cependant, je n'ai pas envie de toucher au code dans mes fichiers XML. J'ai donc eu l'idée d'importer ces données d'une base de données MySQL via PHP. En résumé, j'aimerai combiner le mieux possible ces deux technologies pour que mon site soit simple, souple et puissant.

    1ère question : Est-ce une bonne idée de combiner le PHP et le XML de cette manière pour importer des données, créer les fichiers XML et ensuite afficher le tout grâce à un fichier XSLT ?

    2ème question : En général, quelles méthodes sont utilisées pour un site traditionnel pour faire cohabiter XML et PHP ? Existe-t-il d'autres alternatives avec d'autres langages ?

    Merci pour ceux qui pourront éclairer ma lanterne


    Nico.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    C'est une bonne idée, mais pense alors à un systeme de cache car le pasing XSLT est assez couteux. C'est tout ce que je peux formuler comme contribution...

  3. #3
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Après de multiples recherches sur le net, je pense avoir trouvé une solution "potable" pour faire cohabiter PHP et XML : il suffirait d'écrire le code PHP dans les fichiers XML.

    Par ailleurs, j'ai commencé à rédiger deux classes pour manipuler plus facilement les fichiers XML en PHP5. N'hésitez pas à faire des remarques, merci

    Fichier xslt.class.php5
    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
     
    include_once('error.class.php5');
     
     
    abstract class XSLT
    {
    	protected $m_XMLHandle;
    	protected $m_XSLHandle;
    	protected $m_aParameters;
    	protected $m_sOut;
    	protected $m_eError;
     
    	public function __construct()
    	{
    		$this->m_aParameters = array();
    		$this->m_sOut        = '';
    		$this->m_eError      = new Error();
    		$this->Init();
    	}
     
    	public function SetParameters($Parameters)
    	{
    		$this->m_aParameters = is_array($Parameters) ? $Parameters : array();
    	}
     
    	public function GetParameters()
    	{
    		return $this->m_aParameters;
    	}
     
    	protected abstract function Init();
    	public abstract function LoadXMLFile($XMLFile);
    	public abstract function LoadXSLFile($XSLFile);
    	public abstract function Transform();
    	public abstract function Output();
    	public abstract function Close();
     
    	public function Error()
    	{
    		return $this->m_eError;
    	}
     
    	public function __destruct()
    	{
    		$this->Close();
    	}
    }
    Fichier dom.class.php5
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    include_once('xslt.class.php5');
    include_once('error.class.php5');
     
     
    class DOM extends XSLT
    {
    	public function __construct()
    	{
    		parent::__construct();
    	}
     
    	protected function Init()
    	{
    		$this->m_XMLHandle = new DOMDocument();
    		$this->m_XSLHandle = new DOMDocument();
    	}
     
    	public function LoadXMLFile($XMLFile)
    	{
    		if( file_exists($XMLFile) )
    			$this->m_XMLHandle->load($XMLFile);
    		else
    			$this->m_XMLHandle->loadXML($XMLFile);
     
    		if( !$this->m_XMLHandle )
    			$this->m_eError->SetError('Unable to load the XML file.');
     
    		return $this->m_XMLHandle;
    	}
     
    	public function LoadXSLFile($XSLFile)
    	{
    		if( file_exists($XSLFile) )
    			$this->m_XSLHandle->load($XSLFile);
    		else
    			$this->m_XSLHandle->loadXML($XSLFile);
     
    		if( !$this->m_XSLHandle )
    			$this->m_eError->SetError('Unable to load the XSL file.');
     
    		return $this->m_XSLHandle;
    	}
     
    	public function Transform()
    	{
    		if( $this->XSLHandle )
    		{
    			$XSLTHandle = new XSLTProcessor();
     
    			if( $this->XSLHandle && !@$XSLTHandle->importStylesheet($this->XSLHandle) )
    			{
    				$this->m_eError->SetError('Unable to import stylesheet.');
    				return false;
    			}
     
    			foreach( $this->m_aParameters as $name => $value )
    			{
    				$XSLTHandle->setParameter(NULL, $name, $value);
    				echo $name.' => '.$value.'<br>';
    			}
     
    			if( !($this->m_Out = $XSLTHandle->transformToDoc($this->m_XMLHandle)) )
    			{
    				$this->m_eError->SetError('Unable to process the XML and / or XSL files.');
    				return false;
    			}
    		}
     
    		return true;
    	}
     
    	public function Output()
    	{
    		if( !$this->XSLHandle )
    			$this->m_sOut = $this->m_XMLHandle->saveHTML();
    		return $this->m_sOut;
    	}
     
    	public function Close()
    	{
    	}
    }
    Nico.

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    je pense avoir trouvé une solution "potable" pour faire cohabiter PHP et XML : il suffirait d'écrire le code PHP dans les fichiers XML.
    Exemple ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <machin>
        <truc><?php echo htmlspecialchars($truc); ?></truc>
    </machin>

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    merci mais ca je m'en doutais
    Ce que je demande c'est un exemple dans le cas de nicolas66

  7. #7
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Voilà un exemple type de ce que je compte implémenter :

    Fichier news.xml
    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
     
    <?xml version="1.0" encoding="ISO-8859-15"?>
    <?php
    include('adodb.inc.php');
    include('tohtml.inc.php');
    include('private.php'); // défini les variables de connexion a la base.
    // Connexion à la base
    $db = &ADONewConnection($dbtype);    // create a connection
    $db->PConnect($dbhost,$dbuser,$dbpass,$dbname);   // connect to database// Connexion à la base
    if ($db === false)
    {
            die("Connexion échouée");
    }
    ?>
    <news title="News">
    	<?php
    		$sql = "SELECT id, titre, date, auteur, corps FROM t_news WHERE visible=1 ORDER BY date DESC LIMIT 5";
    		$news = $db->Execute($sql);
    		if ( $news == false)
    		{
    	?>
    		<new title="La requete a échouée">
    			<content><?php print $sql; ?></content>
    		</new>
    	<?php
    		}
    		else
    		{
    			while ( ! $news->EOF )
    			{
    				$id = $news->fields[0];
    				$titre = $news->fields[1];
    				$date = $news->fields[2];
    				$date = date("d.m.Y", strtotime($date));
    				$auteur = $news->fields[3];
    				$corps = $news->fields[4];
    	?>
    	<new>
             <title><?php print $titre ?></title>
             <author><?php print $auteur ?></author>
             <date><?php print $date ?></date>
             <content><?php print $corps ?></content>
    	</new>
    	<?php
    				$news->MoveNext();
    			}
    			$news->Close();
    		}
    	?>
    </news>

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    L'avantage du format XML est que les données peuvent être facilement rendues sous différents formats. Quels formats supportes-tu pour ton site ?

  9. #9
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Une sortie HTML et certainement LaTeX dans le futur.

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ok. pdf aussi je pense (pratique pour envoyer son cv)

    Bon dev

  11. #11
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Qu'est-ce que t'en penses sinon du code que j'ai posté au début ?

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Tu l'as testé ?

  13. #13
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    En partie seulement mais s'il y a quelques bugs, ils doivent être mineurs. J'ai essayé de penser à des patrons de classe génériques pour que je puisse les réutiliser ultérieurement ...

  14. #14
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ca m'a lair pas mal en soi. Après faut voir avec le reste de l'appli comment c'est integré mais là je peux visiblement te faire confiance

  15. #15
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Ok merci, je te file l'adresse de mon futur site si tu voudras le consulter et récupérer les sources : http://nicolas.lerme.free.fr

    Encore merci et bonne fin de soirée

  16. #16
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Je poste aussi mes deux classes pour établir une connexion à MySQL si ca peut aider quelqu'un :

    sgbd.class.php5
    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
     
    abstract class SGBD
    {
    	protected $m_sLogin;
    	protected $m_sPassword;
    	protected $m_sHost;
    	protected $m_sBase;
    	protected $m_rConnectionId;
    	protected $m_rResultId;
    	protected $m_sQuery;
     
    	function __construct($Host, $Login, $Password, $Base)
    	{
    		$this->m_sLogin    = $Login;
    		$this->m_sPassword = $Password;
    		$this->m_sHost     = $Host;
    		$this->m_sBase     = $Base;
    	}
     
    	public abstract function Connect();
    	public abstract function SendQuery($Query);
    	public abstract function GetNumRows();
    	public abstract function FreeResult($ConnectionId);
    	public abstract function Error();
    	public abstract function Deconnect();
     
    	function __destruct()
    	{
    		$this->Deconnect();
    	}
    }
    mysql.class.php5
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    include_once('sgbd.class.php5');
    include_once('error.class.php5');
     
     
    class MySQL extends SGBD
    {
    	function __construct($Host = 'localhost', $Login = 'root', $Password = '', $Base = '')
    	{
    		parent::__construct($Host, $Login, $Password, $Base);
    	}
     
    	public function Connect()
    	{
    		if( $this->m_rConnectionId = @mysql_connect($this->m_sHost, $this->m_sLogin, $this->m_sPassword) )
    		{
    			if( @mysql_select_db($this->m_sBase, $this->m_rConnectionId) )
    				return $this->m_rConnectionId;
    		}
     
    		return false;
    	}
     
    	public function SendQuery($Query)
    	{
    		if( $this->m_rResultId = @mysql_query($Query, $this->m_rConnectionId) )
    		{
    			$this->m_sQuery = trim($Query);
    			return $this->m_rResultId;
    		}
     
    		return false;
    	}
     
    	public function GetNumRows()
    	{
    		if( isset($this->m_ResultId) )
    		{
    			if( preg_match('`^select`i', $this->m_sQuery) )
    				return @mysql_num_rows($this->m_rResultId);
     
    			if( preg_match('`^(insert|update|delete)`i', $this->m_sQuery) )
    				return @mysql_affected_rows($this->m_rResultId);
    		}
     
    		return -1;
    	}
     
    	public function FreeResult($ConnectionId)
    	{
    		return @mysql_free_result($this->m_rConnectionId);
    	}
     
    	public function Error()
    	{
    		return new Error(@mysql_error($this->m_rConnectionId), @mysql_errno($this->m_rConnectionId));
    	}
     
    	function LastInsertId()
    	{
    		return @mysql_insert_id($this->m_rConnectionId);
    	}
     
     
    	function FetchObject($Query)
    	{
    		return @mysql_fetch_object($Query);
    	}
     
    	function FetchArray($Query, $Mode = 'ASSOC')
    	{
    		if( $Mode ==  'NUMERIC' )
    			return @mysql_fetch_array($query, MYSQL_NUM);
     
    		if( $Mode == 'BOTH' )
    			return @mysql_fetch_array($query, MYSQL_BOTH);
     
    		return @mysql_fetch_assoc($query);
    	}
     
    	public function Deconnect()
    	{
    		@mysql_close($this->m_rConnectionId);
    	}
    }
    Nico.

Discussions similaires

  1. [MySQL] Utiliser Mysql avec php dans un tableau html
    Par xunil2003 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 20/02/2010, 18h39
  2. ecrire dans un fichier xml avec php
    Par gilbertbicot dans le forum Langage
    Réponses: 1
    Dernier message: 21/01/2009, 13h10
  3. [XSLT] Générer des fichiers XML avec PHP
    Par oneTime dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 28/04/2008, 21h27
  4. [DOM XML] Insertion données dans fichier XML avec PHP pour Flash ?
    Par ExSter dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 10/05/2006, 11h16
  5. [DOM XML][XSLT] Création d'un document XML avec PHP
    Par ToxiZz dans le forum Bibliothèques et frameworks
    Réponses: 21
    Dernier message: 16/01/2006, 17h44

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