MME Lente 06| Data Retour vanuit Flash

PHP

Het script in php, houdt er rekening mee dat je altijd op je localhost de swf test. Alleen op localhost kan de swf een geparste php file in lezen. Deze ziet er dan uit, uit een tekstfile.

<?php
 if ($_POST["vTest"]){
	 $dataForCombobox_1 = $_POST["comboData1"];
	 $dataForCombobox_2 = $_POST["comboData2"];
	 $dataForCombobox_3 = $_POST["comboData3"];

 }else {
	 $dataForCombobox_1 = "Dit is het eerste ComboBoxItem";
	 $dataForCombobox_2 = "Dit is het tweede ComboBoxItem";
	 $dataForCombobox_3 = "Dit is dan anders";
 }
 print("&comboData1=$dataForCombobox_1");
 print("&comboData2=$dataForCombobox_2");
 print("&comboData3=$dataForCombobox_3");
?>

   

Flash

Eerst moet het php bestand geladen worden. Omdat PHP door apache al op de server vertaald wordt naar een html bestand, ziet de flash player geen php code meer, maar alleen het resultaat van de echo. Dit resultaat lijkt op de inhoud van een tekstfile en werkt dus ook.

Wat ik heb toegevoegd ten opzicht van de vorige les, is een removeAll(); Dit is nodig wanneer je de php-reload. Na het reloaden zou je de nieuwe data in de dropdownbox willen laden. Daarvoor moet je eerst de oude data weggooien. Anders zouden de nieuwe gegevens er bij komen te staan, ipv de oude data vervangen.

De functie die je hebt gekoppeld aan myData wordt altijd gebruikt wanneer flash aan het laden is. Dus ook als je op de knop hebt gedrukt (zie volgende scriptje).

Script in frame 1:

myData = new LoadVars();
myData.onLoad = function() {
	 plaatsDeDataOpDeGoedePlaats();
};
myData.load("combo2.php");
plaatsDeDataOpDeGoedePlaats = function () {
	 myComboBox.removeAll();
	 myComboBox.addItemAt(0, myData.comboData1);
	 myComboBox.addItemAt(1, myData.comboData2);
	 myComboBox.addItemAt(2, myData.comboData3);
};

Omdat dit een zo eenvoudig mogelijk voorbeeld is maak ik nu ook nog een button. Met deze nieuwe button, bewaar je nieuwe data in het myData object. Daarmee overschrijf je de data die je uit de php hebt binnen gehaald. Wanneer je daarna sendAndload doet, verstuurd de flash het myData object met de nieuwe waardes naar de phpcode (zie php script). Deze verwerkt deze data door het weer te echo-en. Deze echo wordt vervolgens weer geladen in flash ( zie bovenstaand script). En dan is de cirkel weer rond.

Script onder de button:

on (release){
	 myData.vTest = "nieuw";
	 myData.comboData1 = "test 1";
	 myData.comboData2 = "test 2";
	 myData.comboData3 = "test 3";
	 myData.sendAndLoad("combo2.php",myData,"POST");
}

wegschrijven naar tekstfile

De PHP die gebruikt wordt, schrijft in een txt-bestand. In dit geval wordt de variabele die in de swf ingevoerd wordt, opgeslagen in een bestaand txt-bestand.
Er moet dus een leeg txt-bestand met de naam: "FlashVars.txt" aanwezig zijn in de map waar ook het PHP-bestand: "txtschrijven.php" staat.
<?php
if ($_POST["vTest"]){
	$lezenSchrijven = fopen("FlashVars.txt","r+"); 
	$txtSchrijven = fwrite($lezenSchrijven,"&comboData1=$dataForCombobox_1 "); 
	fclose($lezenSchrijven);  
}
?>

Deze tekstfile zou je natuurlijk ook kunnen importeren in flash. Je zult wel nog steeds met sendAndLoad Je data naar de php moeten sturen. Zie voor uitgebreider voorbeeld de les van Barend Hendriks: http://docent.cmd.hro.nl/henbj/mme/jaar2/CMDMME2_l2.html

wegschrijven naar database

Hieronder een voorbeeld. Ik heb een fictieve database genomen met de tabel die ik 'Tabel' hebt genoemd en veld 'combo'. Hierin zitten de waardes die in de combobox terug moeten komen.

<?php
	if ($_POST["vTest"]){
		mysql_query("INSERT INTO Tabel (combo) VALUES ('$dataForCombobox_1') WHERE id=1");
		mysql_query("INSERT INTO Tabel (combo) VALUES ('$dataForCombobox_2') WHERE id=2");
		mysql_query("INSERT INTO Tabel (combo) VALUES ('$dataForCombobox_3') WHERE id=3");
	}
	// gegevens ophalen
	$result = mysql_query("SELECT * FROM Tabel);
	while ($row = mysql_fetch_array($result)) {
		print("&comboData.$row['id']=$row['combo']");
	}
?>

Wanneer er data uit de flash komt stuurt de php deze data naar de database. En het printen op het scherm gebeurd altijd op basis van de php gegevens.

Auteur: Roos Groenewegen
Seizoen: Lente
Lesnummer: 6
Datum: 27-03-2007
Type les: MME