Flash in samenwerking met PHP & MySQL
Flash en php, het verzenden en ontvangen van gegevens.
Flash kan je prima gebruiken ism met php (of andere scripttaal zoals asp, omdat ik niet thuis ben met asp gebruik ik php, de basis blijft hetzelfde)
Waarom zou je flash willen laten samenwerken met php ?
Voorbeeldje
Stel we hebben een formulier in flash met een aantal input tekstvelden, een voor de naam, een voor een email adres, etc etc.
De naam willen we opslaan in een database, aangezien flash niet met mySql overweg kan, moeten we dit dus via php realiseren.
We willen niet dat er dubbele namen voorkomen in de database, dus laten we php controleren of de naam al in gebruik is, mocht dit wel het geval zijn, dan stuurt onze php file een bericht naar onze flash en via flash word de gebruiker dan verteld dat hij een andere naam moet kiezen.
In deze tutorial gaan we dus een heel simpel registreer formuliertje maken, met wat fantasie kan je de "leerstof" zelf ook wel aanpassen zodat je het ook voor andere doeleinden kan gebruiken zoals het plaatsen van de highscores in een spelletje, of de integriteit checken van eoa email adres, of....
Het flash formulier
Om te beginnen hebben we natuurlijk een formuliertje nodig om onszelf te registreren, met daarin de inputvelden, maak dus een input veld groot genoeg om er de naam in te kunnen vullen, en geef het de instanceNaam "naam".
Dan moeten we ook nog een tekstveld hebben wat onze "meldingen" toont die php routeneert, dus maak een dynamisch tekstveld aan met de instanceNaam "info".
Nu hebben we nog een verzend knop nodig (met de instanceNaam "knop"), en dan positioneren we de tekstvakken en de button zo dat het er overzichtelijk uitziet.
Nu we dus een deftig design hebben, moeten we nog een heel klein beetje ActionScript plaatsen, dit AS plaatsen we in een keyFrame.
Open dus het AS panel (f9) en plaats de volgende AS
knop.onRelease = function() {
ontvang = new LoadVars();
zend = new LoadVars();
zend.naam = naam.text;
zend.sendAndLoad("flashPHP.php", ontvang, "POST");
ontvang.onLoad = function(success) {
if (success) {
info.text = ontvang.flashWaarde;
} else {
info.text = "Er is een fout opgetreden, probeer later nog eens";
}
};
};
|
In bovenstaande voorbeeldje "stuur" ik maar één variable vanuit flash naar het php bestand, dit kunnen er natuurlijk veel meer zijn.
Door middel van: zend.naam = naam.text; wordt de inhoud van het textveldje "naam" onder de variablenaam "naam" verzonden.
Wil je meerdere variabelen verzenden, dan doe je dat gewoon door zend.email=email.text; zend.website=website.text; etc
Die gegevens kan je in php opvragen dmv $_POST['naam'], $_POST['email'], $_POST['website'] etc.
De loadVars "ontvang" word dus gevuld door hetgeen wat php echoed, je kan natuurlijk meerdere variabelen laten opsturen.
We willen bijvoorbeeld dat php 3 variables opstuurt, bijvoorbeeld
<?php
echo "&waarde1=een";
echo "&waarde2=twee";
echo "&waarde3=drie";
?>
Dan kan je die waardes in flash opvragen dmv
trace(ontvang.waarde1); //output een
trace(ontvang.waarde2); //output twee
trace(ontvang.waarde3); //output drie
php en database structuur
Ik ga ervanuit dat jullie zelf wel weten hoe je een database connectie maakt en hoe je dan gegevens post in de db, maar voor de absolute beginner leg ik het nog even simpeltjes uit.
We hebben dus een database nodig met een veld voor de naam, deze zou er dus zo uitzien:
-- onze tabel noemen we `flashtabel`
-- rage deze code eventueel in phpMyadmin
CREATE TABLE `flashtabel` (
`naam` varchar(50) NOT NULL default ''
) ENGINE=MyISAM;
|
Onze flash waardes worden door een php file opgeslagen, die php zou er zo uit kunnen zien:
<?php
//connectie
mysql_connect ("host", "user", "wachtwoord");
mysql_select_db("flashtabel")or die ("&flashWaarde=".mysql_error());
if($_SERVER['REQUEST_METHOD'] == "POST")
{
//controle of de naam al in de database zit
$check_naam = mysql_query("SELECT naam FROM flashtabel
WHERE naam = '".mysql_real_escape_string($_POST['naam'])."'")
or die ("&flashWaarde=".mysql_error());
$aantal_rijen=mysql_num_rows($check_naam);
if($aantal_rijen > 0)
{
//Ja, de naam zit al in de database
//boodschap voor flash
echo "&flashWaarde=Deze naam is al in gebruik, gebruik een andere naam svp.";
}
else
{
//Nee, de naam zit nog niet in de database
//insert in de db
mysql_query("INSERT INTO flashtabel (naam)
VALUES ('".mysql_real_escape_string($_POST['naam'])."')")
or die ("&flashWaarde=".mysql_error());
//boodschap voor flash
echo"&flashWaarde=Je hebt daarnet jezelf geregistreerd onder de naam ".$_POST['naam'];
}
}
else
{
//bericht voor mensen die deze file bekijken via hun browser
echo "deze pagina is alleen nuttig ism met bijbehorende swf";
}
?>
|
Ik denk dat ik de codes wel voldoende heb becommentariseerd (lol, wat een woord)
Dit is een flash tutorial dus verder ga ik niet op php en MySql in.
security (bron: adobe/macromedia)
For Flash Player 8:
- Data loading is not allowed if the calling SWF file is in the local-with-file-system sandbox and the target resource is from a network sandbox.
- Data loading is also not allowed if the calling SWF file is from a network sandbox and the target resource is local.
For Flash Player 7 and later:
- Websites can permit cross-domain access to a resource via a cross-domain policy file.
- In SWF files of any version running in Flash Player 7 and later, url must be in exactly the same domain. For example, a SWF file at www.someDomain.com can load data only from sources that are also at www.someDomain.com.
In SWF files that are running in a version of the player earlier than Flash Player 7, url must be in the same superdomain as the SWF file that is issuing this call. A superdomain is derived by removing the left-most component of a file's URL. For example, a SWF file at www.someDomain.com can load data from sources at store.someDomain.com because both files are in the same superdomain named someDomain.com.
Wat er hierboven ongeveer word uitgelegt is dat je vanaf player7 de swf en de php in hetzelfde domein moet hebben, er is wel een manier om ook met verschillende domeinen, dit is te realiseren via een "cross-domain policy file", dit is een xml bestand wat op de andere host moet worden geplaatst, in dat xml bestand word het ip of domeinnaam gezet van de vragende server, dit xml bestand ziet er ongeveer zo uit:
<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
<allow-access-from domain="www.friendOfFoo.com" />
<allow-access-from domain="*.foo.com" />
<allow-access-from domain="105.216.0.40" />
</cross-domain-policy> |
Tot zover deze tutorial, hopelijk heb je nu weer een reden meer om toch iets vaker flash te gebruiken
Natuurlijk kan een werkend voorbeeldje niet ontbreken, SEE IT.
Mocht je toch ergens problemen hebben, download dan hier de door mij gebruikte bestanden.
Mocht deze tutorial nog niet helemaal voldoen aan je verwachting, bezoek
dan mijn website voor een
eventuele geupdate tutorial.
mvg vinTage
|