 |
6. ACTIONSCRIPT ET LES BASES DE DONNEES |
ActionScript
et les bases de données
Communication avec l'extérieur
* Une application Flash peut communiquer avec un serveur
* Possibilité de transmettre des variables
* Méthodes "get" et "post"
* Une page PHP peut donc recevoir ces informations
* La page PHP peut aussi répondre et transmettre des variables
* Mécanisme de dialogue simple
* Adapté pour envoyer un ordre à un serveur
* Adapté lorsqu'il y a peu de données à échanger
* Une application Flash peut lire des données XML
* Ces données peuvent provenir d'un fichier local ou distant
* Elles peuvent aussi provenir du résultat d'une page PHP
* Possibilité d'effectuer une requête dans une base de données
* Récupération au format XML du résultat
* Mécanisme de récupération de données
* Adapté lorsqu'il y a beaucoup de données
* Ne permet pas d'envoyer des ordres à un serveur
Dialogue simplifié (1/4)
* Pour transmettre des variables: la classe "URLVariables"
* Représente une liste de variables
* Cette liste peut être transmise à une page PHP
* Une page PHP peut renvoyer une liste de variables
* Il faut déclarer deux listes: envoi + réception
* Exemple d'envoi: login + mot de passe
* Exemple de réception: validité des identifiants
* Préparation de la liste des variables envoyées
* var envoi : URLVariables = new URLVariables();
envoi.login = "Nawouak";
envoi.pass = "12345";
* Rappel: en PHP, deux manières de transmettre des variables
* Méthode "get": variables transmises dans l'URL
* login.php?login=Nawouak&pass=12345
* Méthode "post": variables transmises cachées dans l'entête
Dialogue simplifié (2/4)
* Exemple PHP: vérification d'identifiants
<?php
$login = $_GET["login"];
$pass = $_GET["pass"];
... // Requête pour vérifier la validité des identifiants,
... // et récupération de l'ID.
if ($valide) echo "valide=oui&id=$id";
else echo "valide=non&id=0";
?>
* Retour de variables: PHP génère une chaîne au format "get"
* echo "valide=oui&id=$id"; ==> valide=oui&id=27
* Préparation à la réception d'une liste de variables
* var reception : URLVariables = new URLVariables();
function echange_reussi(e:Event) {
reception = loader.data;
trace("validité = " + reception.valide);
trace("id = " + reception.id);
}
Dialogue simplifié (3/4)
* Transmission des paramètres à la page PHP
* Préparation de la requête
* URL
* var requete : URLRequest
= new URLRequest("http://localhost/login.php");
* Méthode d'envoi
* requete.method = URLRequestMethod.GET;
* Données à transmettre
* requete.data = envoi;
* Envoi de la requête
* Objet chargé de l'envoi
* var loader : URLLoader = new URLLoader();
* Format de retour des données
* loader.dataFormat = URLLoaderDataFormat.VARIABLES;
* Capter l'événement de retour des données
* loader.addEventListener(Event.COMPLETE,echange_reussi);
* Déclencher l'envoi
* loader.load(requete);
Dialogue simplifié (4/4)
* Code ActionScript complet
var envoi : URLVariables = new URLVariables();
envoi.login = "Nawouak";
envoi.pass = "12345";
var reception : URLVariables = new URLVariables();
function echange_reussi(e:Event) {
reception = loader.data;
trace("validité = " + reception.valide);
trace("id = " + reception.id);
}
var requete : URLRequest
= new URLRequest("http://localhost/login.php");
requete.method = URLRequestMethod.GET;
requete.data = envoi;
var loader : URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE,echange_reussi);
loader.load(requete);
Le langage XML
* HTML: HyperText Markup Language
* Langage à balise
* XML: eXtensible Markup Language
* Langage à balise
* Extensible: ajout à l'infini de nouvelles balises
* Création de son propre langage
* Objectif: séparer les données de la manière de les représenter
* XHTML: eXtensible HyperText Markup Language
* Successeur de HTML
* Langage formulé à partir de XML
* Première version: reformulation de HTML en XML
Structure du langage XML
* XML
* Langage sous forme de balises
* Langage générique permettant de définir son propre langage
* Format XML
* Contient des éléments
* Un élément peut contenir d'autres éléments
* Un élément peut posséder des attributs
* Balise = élément
* <balise>contenu balise</balise>
* Contrairement à HTML, toutes les balises sont fermées
* "/" représente la fermeture d'une balise
* <balise> seule est interdite en XML
* Il faut impérativement <balise/>
* Attribut
* <balise attribut="valeur attribut">contenu balise</balise>
* <balise attribut="valeur attribut"/>
Exemple de langage formulé avec XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<biblio>
<ouvrage type="thriller">
<titre>Dragon rouge</titre>
<auteur>Harris, Thomas</auteur>
</ouvrage>
<ouvrage type="science fiction">
<titre>Contact</titre>
<auteur>Sagan, Carl</auteur>
</ouvrage>
<ouvrage type="roman">
<titre>Et si c'était vrai</titre>
<auteur>Lévy, Marc</auteur>
</ouvrage>
</biblio>
Génération de XML avec PHP
<?php
header("Content-type: application/xml");
echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<biblio>";
if (@mysql_connect("localhost","root","")) {
if (@mysql_select_db("bibliotheque")) {
$requete="SELECT * FROM ouvrage";
$result=@mysql_query($requete);
while ($enr=@mysql_fetch_object($result)) {
echo "<ouvrage type='$enr->type'>";
echo "<titre>$enr->titre</titre>";
echo "<auteur>$enr->auteur</auteur>";
echo "</ouvrage>";
}
}
}
echo "</biblio>";
?>
Accès "asynchrone" à une base de données
Charger un document XML
* Récupération des données XML
var loader : URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE,echange_reussi);
loader.load(new URLRequest(url));
function echange_reussi(e:Event) {
var xml : XMLDocument = new XMLDocument(loader.data);
...
}
* Accès à un fichier local ou au résultat d'une page PHP
* url = "ouvrages.xml";
* url = "http://localhost/ouvrages.php?type=thriller";
Parcourir un document XML
* Document XML = hiérarchie de noeuds
* Un noeud appartient à la classe "XMLNode"
* Parcourir la hiérarchie des noeuds
* n.firstChild: premier sous-noeud du noeud n
* n.childNodes: tableau des sous-noeuds du noeud n
* n.childNodes[i]: ième sous-noeud du noeud n
* n.childNodes.length: nombre de sous-noeuds de n
* Accéder aux données
* n.attributes: tableau des attributs du noeud n
* n.attributes.attr: valeur de l'attribut "attr" du noeud n
* n.nodeValue: valeur du noeud n, si celui-ci est un noeud texte
* n.nodeName: nom de balise du noeud n, si celui-ci est une balise
Structure hiérarchique d'un document XML
| |
| |
| Copyright (c) 1999-2016 - Bruno Bachelet
- bruno@nawouak.net -
http://www.nawouak.net |
| La permission est accordée de
copier, distribuer et/ou modifier ce document sous les termes de la licence
GNU Free Documentation License, Version 1.1 ou toute version
ultérieure publiée par la fondation Free Software
Foundation. Voir cette licence pour plus de détails (http://www.gnu.org). |
|
|