|
Page 1 sur 3 Connexion via les services php Nous avons jusqu'à maintenant vu comment se déroulait l'échange de données entre Flash et php via Flash Remoting et Amfphp. La connexion à une base de données (ici mySQL) se déroule évidemment côté serveur au niveau du script php. Côté Flash la connexion aux services distants reste inchangée. L'essentiel réside dans l'écriture des méthodes se connectant à la base de données et le type de données que Flash reçoit en réponse à ces méthodes. En utilisant Flash Remoting pour accéder au contenu de bases de données on commence véritablement à percevoir la puissance de Remoting car sa mise en oeuvre est extrêmement simple et le traitement des données réduit au strict minimum. On constate également un enchaînement naturel entre la récupération des données dans une base de données et la mise en forme des informations dans les composants Flash UI répondants au modèle des composants Flash UI livrés avec Flash MX. Nous étudierons l'ensemble du processus, de la récupération des informations contenues dans les bases jusqu'à la mise en forme dans des composants Flash UI au cours de ce tutorial. Penchons nous maintenant sur la mise en oeuvre de la connexion à la base de donnée et de l'interrogation de la base côté serveur: Côté serveur (Php): Pour commencer, nous avons besoin de connecter le service à la base de données. Pour cela nous ajoutons ce script au sein de la fonction constructeur: class serviceBdd { function serviceBdd() { // connexion à la base mysql_connect ("localhost","root",""); mysql_select_db("nomBdd"); } } Vous pouvez constater que nous n'avons prévu aucune gestion d'erreur de connexion au serveur, grand luxe c'est AmfPhp qui retourne ces erreurs à Flash Remoting et permet de gérer les erreurs au sein des gestionnaires onStatus. Voila le tableau des différentes erreurs possibles: Tableau d'erreurs de connexion au serveur | | détails de ce qui déclenche l'erreur | level | description | code | déclenche | | mauvaise ip ou nom de serveur dans la commande mysql_pconnect | Warning | Unknown MySQL Server Host 'xxxxxx' (1) | 2 | objetReponse.methode_status ou objetReponse.onStatus | | mauvais utilisateur ou mot de passe dans la commande mysql_pconnect | Warning | Access denied for user: 'yyyyyy@xxxxxx' (Using password: YES) | 2 | objetReponse.methode_status ou objetReponse.onStatus | L'accès à une base de données inexistante (dans mysql_select_db) ne déclenche pas d'erreur cependant toute requête faite sur cette base retournera systématiquement false. Il nous faut maintenant définir une méthode que Flash pourra appeler. Nous devons comme d'habitude la déclarer dans le tableau methodTable au sein de la fonction constructeur et ensuite la définir dans la classe: class serviceBdd { function serviceBdd() { // définition de methodTable pour le constructeur de la classe $this->methodTable = array( "interrogeBdd" => array( "description" => "récupère des infos de la base", "access" => "remote", "roles" => "role, list", "arguments" => array () ) ); // connexion à la base mysql_connect ("localhost","root",""); mysql_select_db("nomBdd"); } function interrogeBdd() { return mysql_query("SELECT * FROM nomTable"); } } En étudiant le code de la méthode distante interrogeBdd, vous vous rendez compte de sa simplicité !! Il vous suffit uniquement de renvoyer le résultat de la requête, AmfPhp se charge du reste et structure le résultat de la requête mySQL. Que reçoit alors Flash ? C'est ce que nous allons étudier dans le paragraphe suivant. Si la requête s'applique à une table inexistante, la méthode distante retourne false. Côté Client (Flash): Côté serveur, la connexion et l'interrogation de la base sont réduites au strict minimum, côté flash c'est encore plus simple ! Quand une méthode distante interrogeant une base de données renvoie directement le résultat de la requête, Flash reçoit un objet RecordSet: bdd=connexion.getService("serviceBdd"); resultatBdd={}; resultatBdd.onResult=function (pData) { trace (type of pData); // retourne "object" trace (pData instanceof RecordSet); // retourne true; } bdd.interrogeBdd(resultatBdd); Les objets RecordSet sont des occurrences de la classe RecordSet que nous étudions au chapitre suivant.
|