La table des tests
Script de création
CREATE DATABASE cours DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;
USE DATABASE cours;
DROP TABLE IF EXISTS villes;
CREATE TABLE IF NOT EXISTS villes (
cp varchar(5) collate latin1_general_ci NOT NULL,
nom_ville varchar(50) collate latin1_general_ci NOT NULL,
PRIMARY KEY (cp)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
INSERT INTO villes (cp, nom_ville) VALUES ('06000', 'Nice'),
('59000', ''),
('69000', 'Lyon'),
('75011', 'Paris'),
('75012', 'Paris'),
('75021', 'Paris 21'),
('75022', 'Paris 22');
Objectif
Insérer une nouvelle ville dans la table Villes de la base Cours.
Utiliser LoadVars et send().
Le script PHP
<?php
$cp = $_REQUEST["cp" * ;
$nom_ville = $_REQUEST["nom_ville" * ;
$lien = mysql_connect("localhost","root","");
mysql_select_db("cours",$lien);
$ls_insert = "INSERT INTO villes(cp, nom_ville) VALUES('$cp','$nom_ville')";
mysql_query($ls_insert, $lien);
if(mysql_errno($lien) == 0) echo "Insertion réussie"; else echo mysql_error($lien);
?>
Syntaxes
Création d'un objet pour les attributs de la requête.
var envoi = new LoadVars();
Création d'un attribut et affectation d'une valeur.
envoi.nom_attribut = valeur;
Exécution de la requête d'envoi de valeurs avec la méthode send().
La méthode send() permet d'envoyer des valeurs.
envoi.send("url", "cible" [, "méthode" * );
L'url est composée du protocole, de l'adresse du serveur, du chemin et du document PHP.
Par exemple : http://localhost/flash_php/villes_ajout.php.
La cible prend les valeurs suivantes : "_self", "_blank", "_parent", "_top".
Les méthodes sont POST ou GET. La méthode POST est la méthode par défaut.
Démarche
Créez un nouveau .fla.
Ajouter des éléments de formulaire (Ctrl/F7).
, ,
Nommez les TextInput tb_cp et tb_nom_ville,
codez.
Code
on(click)
{
var attributs = new LoadVars();
attributs.cp = _root.tb_cp.text;
attributs.nom_ville = _root.tb_nom_ville.text;
attributs.send("http://localhost/flash_php/villes_ajout.php", "_self", "POST");
}
Commentaires
Cette méthode affiche un page HTML suite à l'insertion. Cf les paragraphes suivants avec les résultats dans la scène.
Objectif
Créer une interface permettant de saisir un CP et à partir de celui-ci afficher le nom de la ville correspondante.
Utiliser LoadVars et sendAndLoad().
Le code PHP
<?php
$cp = $_REQUEST["cp" * ;
$lien = mysql_connect("localhost","root","");
mysql_select_db("cours",$lien);
$ls_sql "SELECT nom_ville FROM villes WHERE cp $cp";
$rs = mysql_query($ls_sql, $lien);
if(mysql_errno($lien) != 0) die(mysql_error($lien));
$enr = mysql_fetch_array($rs);
echo "nom_ville=" . $enr[0 * ;
?>
Le code PHP doit renvoyer une URL type attribut=valeur.
En test direct dans le navigateur le résultat est :
URL testée | Résultat |
http://localhost/flash_php/ville_visu.php?cp=59000 | nom_ville=Lille |
http://localhost/flash_php/ville_visu.php?cp=75011 | nom_ville=Paris |
Syntaxes
Création d'objets pour les attributs de la requête aussi bien en envoi qu'en réception.
var envoi = new LoadVars();
var resultats = new LoadVars();
Création d'un attribut et affectation d'une valeur.
envoi.nom_attribut valeur; ou resultats.nom_attribut valeur;
Exécution de la requête d'envoi et de récupération de valeurs avec la méthode sendAndLoad().
La méthode sendAndLoad() permet d'envoyer des valeurs et aussi d'en recevoir.
envoi.sendAndLoad("url", resultats, "méthode");
Récupération des résultats.
Il faut que PHP renvoie une URL type attribut=valeur.
La récupération finale est réalisée via une fonction anonyme.
resultat.onLoad = function(success)
A partir du moment où l'on utilise la méthode sendAndLoad() il faut créer une fonction anonyme de callback car il faut temporiser la réception des données du serveur. C'est seulement quand le serveur a renvoyé les données que l'on peut commencer à traiter les résultats. D'où l'utilisation de l'événement onLoad.
Démarche
Créez un nouveau .fla.
Ajoutez un Label, un InputText, un Button, un TextField.
Code
on(click)
{
var attributs = new LoadVars();
var resultats = new LoadVars();
attributs.cp = _root.tb_cp.text;
attributs.sendAndLoad("http://localhost/flash_php/ville_visu.php", resultats, "GET");
resultats.onLoad = function(succes)
{
if(succes) _root.tf_nom_ville.text = "Ville : " + resultats.nom_ville;
else _root.tf_nom_ville.text = "Echec";
}
}
A la place de this il est possible d'utiliser la variable resultats.
Objectif
Visualiser les enregistrements de la table Villes de la base Cours.
Le code PHP
<?php
$lien = mysql_connect("localhost","root","");
mysql_select_db("cours",$lien);
$ls_sql = "SELECT cp, nom_ville FROM villes";
$rs = mysql_query($ls_sql, $lien);
if(mysql_errno($lien) != 0) die(mysql_error($lien));
$sCps = "cps=";
$sVilles = "&noms_villes=";
while($enr = mysql_fetch_row($rs))
{
$sCps .= $enr[0 * . ";";
$sVilles .= $enr[1 * . ";";
}
echo $sCps . $sVilles;
?>
Le résultat renvoyé est celui-ci :
cps=06000;59000;69000;75011;75012;75021;&noms_villes=Nice;Lille;Lyon;Paris;Paris;Paris 21;
donc la requête renvoie deux attributs cps et noms_villes.
Syntaxe
var tableau = chaîne.split("séparateur");
Démarche
Créez un nouveau .fla.
Ajoutez un TextArea nommé ta_villes.
Codez le scénario.
Note : il serait possible de mettre un TextField multiline à la place du TextArea mais il faudrait gérer le défilement vertical avec une barre de défilement ce qui est fait automatiquement avec le TextArea.
Code
var attributs = new LoadVars();
var resultats = new LoadVars();
_root.ta_villes.text = "";
resultats.onLoad = function(success)
{
if(success)
{
var sCps = resultats.cps;
var sNoms_Villes = resultats.noms_villes;
var tCps = sCps.split(";");
var tNoms_Villes = sNoms_Villes.split(";");
for(i=0; i<tCps.length - 1; i++)
{
_root.ta_villes.text += tCps[i * + "-" + tNoms_Villes[i] + "\n";
}
}
else _root.ta_villes.text = "Echec";
}
attributs.sendAndLoad("http://localhost/flash_php/villes_visu.php", resultats, "GET");
Commentaires
Malgré l'abscence d'attributs à envoyer, à la différence des deux précédents scripts, il faut quand même déclarer une variable d'envoi de type LoadVars().
Une erreur survient si l'URL de la requête est erronée ou si le serveur est indiponible mais si une erreur SQL survient aucun affichage. Il faut dans ce cas gérer l'erreur au niveau du PHP.
Cf paragraphe suivant.