Pages

4/30/2005

Flash connects to MySQL with PHP

วันนี้ท้าทายตัวเองหน่อย.. ไม่ใช่อยากจะท้าหรอก แต่ดันไม่ได้ทำงานให้เขามาสองอาทิตย์ละ เกิดว่าจะเร่งเอาให้ได้วันนี้.. เพิ่งรู้เืมื่อวาน
ความจริงมันก็แค่ เอา Flash ไปอ่าน MySQL แค่นี้เอง ไม่เห็นจะยากเลย มันยากตรงที่ว่าเขาไม่คุยให้รู้เรื่องมากกว่า จะได้เริ่มทำได้ซักที....

จะเรียก ให้ Flash ดึงข้อมูลจาก MySQL ได้ จะต้องทำผ่านทาง php เพราะว่า flash เองติดต่อฐานข้อมูลโดยตรงไม่ได้เลย
วิธีจะให้ flash อ่านข้อมูลจาก php (ความจริงอ่านจาก text file ยังได้เลย) แค่ให้ ใน php มันแสดงข้อความออกมา (ในรูปText ,not HTML) เป็นข้อความเช่น

ID=1&name=Phitchayaphong&surname=Tantikul

คือจะได้เป็น var_name=value [ & var_name=value ] ไปเรื่อยๆ
แล้วพอเวลาจะให้ flash ดึงข้อมูลไป

ต้องสร้างตัวแปรชนิด LoadVars ขึ้นมาก่อน แล้วก็ค่อยสั่งให้ ตัวแปรนี้ load/send/sendAndLoad ตัว php นั้นขึ้นมา
myVars.load("http://localhost/flash/connect.php?category=sci");

นี่ก็จะทำการอ่านค่าจากphp (ซึ่งตอนนี้ถ้าอ่านก้อเหมือน text file อันนึง ที่มี var=value&...อยู่ในไฟล์)
แต่การอ่านค่านั้น อาจจะอ่านค่าไม่ได้ทันที เพราะมันมีdelay จากการโหลดดค่า (ก้อไม่ได้ทำบนเครื่องตัวเองนี่นา) เลยจำเป็นต้องใช้ onLoad เข้ามาช่วย โดย function นี้จะ trigger ขึ้นตอนที่ มีข้อมูลเข้ามาแล้วเท่านั้น(ไม่ว่าจะerrorหรือไม่) แล้วมันจะdecodeข้อมูล เข้าไปสู่ตัวแปรชนิด LoadVarsที่เรียกให้เราเสร็จสรรพเลย จึงควรเขียนscriptสำหรับอ่านข้อมูล ใน .onLoadนี้เท่านั้น

สำหรับการผ่านข้อมูลให้กับ php จาก flash... จะใช้วิธีไหนก็ได้..
1. ใช้ myVars.load แล้วใส่ parameter ใ้ห้php --> php ต้องรับข้อมูลแบบ GET
2. ใช้ myVars.send หรือ myVars.sendAndLoad --> สร้าง ตัวแปรแบบ LoadVars ขึ้นมาแล้วอยากส่งตัวแปรอะไรให้กับphpก้อใส่ไว้ในนั้นแล้ว ก็ send เช่น
 myVars = new LoadVars();
myVars.nick = nickname.text;
myVars.password = password.text;

myVars.SendAndLoad("http://percorso/pagina.php", myVars, "POST");
คราวนี้ php ก้อต้องไปใช้ method $_POST กันเอง

-------------------------------------------------------------------------------
PHP
-------------------------------------------------------------------------------
(in /flash/connect.php)


include "config.php";

//echo $UserName,"
",$PassWord,"
",$URL,"
",$Database;


$DB=mysql_connect ($URL,$UserName,$PassWord) or die (mysql_error());
mysql_select_db ($Database,$DB)or die (mysql_error());


$query = "SELECT * FROM total";
if (!empty ($_GET['category']))
{
$query .= " WHERE category='".$_GET['category']."'";
}
$result=mysql_query ($query,$DB) or die( mysql_error());

$num=mysql_num_rows ($result);
echo "num=",$num,"&";
for ($i=0; $i<$num ; $i++)
{
$data=mysql_fetch_array ($result);
echo "ID",$i,"=",$data['ID'],"&";
echo "name_en",$i,"=",$data['name_en'],"&";
echo "name_th",$i,"=",$data['name_th'],"&";
echo "category",$i,"=",$data['category'],"&";
echo "viewer",$i,"=",$data['viewer'],"&";
echo "rating",$i,"=",$data['rating'],"&";
echo "relate",$i,"=",$data['relate'],"&";
}

?>

-------------------------------------------------------------------------
ActionScript
-------------------------------------------------------------------------
myVars = new LoadVars();
myVars.load("http://localhost/flash/connect.php?category=sci");

myVars.onLoad = function( success ){
if(success){
trace("variables loaded");
num=myVars['num'];
trace (num);
for (i=0;i
{
trace (myVars['ID'+i]);
trace (myVars['name_en'+i]);
trace (myVars['name_th'+i]);
trace (myVars['category'+i]);
trace (myVars['viewer'+i]);
trace (myVars['rating'+i]);
trace (myVars['relate'+i]);
}
}
else
{
trace("Error loading page");
}
}
------------------------------------------------------------------------------
และแล้วก้อใช้เวลาำทำ 9.40 ถึง 10.40 ก้อเสร็จละ... ง่ายๆ

อ้อ ลืมreference : http://www.sephiroth.it/tutorials/flashPHP/loadVars/

No comments:

Post a Comment