มาด้วยความรวดเร็ว
Code ต่อไปนี้ทำเพื่อสอนเป็นตัวอย่างครับ ไม่ได้เสร็จสมบูรณ์ทั้งหมด (การเช็คตัวอักษร, ความถูกต้อง ฯลฯ)
แต่สามารถนำไป Apply และเพิ่มเติมได้เองครับผม=========================
ไฟล์ทั้งหมด- test_query.php (เอาไปไว้ใน Appserv\www\.... ครับ)
- fl_db.fla (ผมทำใน Flash CS3 ครับ แต่ Save เป็น Flash 8 ให้)
- fl_db.swf
โปรแกรมที่ใช้- Flash MX ขึ้นไป (แนะนำ Flash 8 ขึ้นไปครับ จะได้โหลดไฟล์ของผมไปดูได้)
- Text Editor เช่น Editplus, Notepad หรือจะ Dreamweaver สำหรับทำ PHP
- Appserv สำหรับจำลองเครื่องเพื่อทดสอบ PHP
-------------------------------------
PHPทำส่วนของ PHP ก่อนนะครับ จะได้ไม่งง ^^
**อ่านก่อน**
1. ให้สร้าง Database พร้อมตารางและข้อมูลครับ หรือถ้ามีอยู่แล้วก็เลือกไว้ในใจเลยนะครับ
2. ใช้ code ด้านล่าง ปรับแต่งให้ตรงกับ Username/Password และฐานข้อมูล รวมถึงตารางและ Attribute ของตารางที่ใช้อยู่ด้วยนะครับ
**********
สำหรับฐานข้อมูลของผม มีโครงสร้างตามนี้ครับ
ฐานข้อมูล: test
ตาราง: highscore
มี 3 Fields (Attributes) ครับคือ id, user, และ score
>>
id เป็น Primary key, Auto increment ชนิด INT(2)
>>
user ชนิด VARCHAR(20)
>>
score ชนิด INT(6)
SQL ทั้งหมด (ตั้งแต่สร้างตารางและเพิ่มข้อมูลลงในตาราง)CREATE DATABASE `test` DEFAULT CHARACTER SET tis620 COLLATE tis620_thai_ci;
USE `test`;
--
-- Table structure for table `highscore`
--
CREATE TABLE `highscore` (
`id` int(2) NOT NULL auto_increment,
`user` varchar(20) NOT NULL,
`score` int(6) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
INSERT INTO `test`.`highscore` (`id` ,`user` ,`score`)
VALUES (NULL , 'korstudio', '152075'), (NULL , 'aloha', '78520');
**หมายเหตุ**
โดยปกติแล้ว เมื่อลง Appserv จะมีฐานข้อมูลที่ชื่อ test ให้อัตโนมัติครับ
ใน PHP ครับ
<?
$conn_sv = "localhost"; //Host โดยปกติจะเป็น localhost
$conn_user = "root"; //Username สำหรับเชื่อมต่อไปยัง SQL
$conn_pw = "1234"; //Password
$conn_db = "test"; //Database name
@mysql_connect($conn_sv,$conn_user,$conn_pw)or die("Cannot connect to database");
@mysql_select_db($conn_db)or die("Cannot select database");
@mysql_db_query($conn_db,"SET NAMES tis620"); //เนื่องจาก MySQL 5ขึ้นไปจะใช้ Encoding แบบ UTF8 แต่เผื่อมีการติดต่อโดยใช้ encoding เป็น TIS-620 และเพื่อไม่ให้เกิดปัญหากับภาษาไทยในฐานข้อมูล โดยที่ข้อมูลเป็น TIS-620ครับ
//เริ่ม Query ข้อมูล
$sql = "select * from `highscore` where `id` = 1"; //เอาข้อมูลที่ id เป็น 1 ออกมา
$rs = mysql_query($sql) or die("Cannot query"); //สั่งทำ SQL
$rt = mysql_fetch_array($rs); //รับข้อมูลที่ Query ออกมาในรูปแบบ Array
$data_id = $rt["id"]; //รับข้อมูลที่คอลัมน์ id
$data_user = $rt["user"]; //รับข้อมูลที่คอลัมน์ user
$data_score = $rt["score"]; //รับข้อมูลที่คอลัมน์ score
//ส่งค่าออกไปให้ Flash
echo "score_id=".$data_id."&user=".$data_user."&scores=".$data_score;
?>
ถ้าไม่เกิดปัญหาอะไร เมื่อทดสอบรัน PHP แล้วจะได้ผลลัพธ์ออกมาตามนี้ครับ
score_id=1&user=korstudio&scores=152075
ไปลุยใน Flash ต่อเลยครับ
-----------------------------
FLASH**อ่านก่อน**
1. สร้างไฟล์ กว้าง-ยาวเท่าไหร่ก็ได้ครับ (ในตอนนี้จะให้ trace ออกมาทาง Output อย่างเดียว)
2. สำหรับ Flash CS3 เวลาสร้างไฟล์ใหม่ ให้เลือก
Flash File (ActionScript 2.0) ครับ
**********
AS หลักๆ ที่ใช้
- LoadVars class -> สำหรับการติดต่อกับไฟล์ PHP ครับผม (จริงๆ แล้วติดต่อกับไฟล์ได้หลายชนิดครับ เช่น ASP, JSP, TXT, ...)
**ไว้ผมจะอธิบาย LoadVars class ทีหลังนะครับ (ThaiFlashDev ก็ไม่เปิดซะที - -")
ลุย Script ครับ
Flash AS (Frame 1)stop(); //กันไหลไปเฟรมอื่น
var test_lv = new LoadVars(); //สร้างตัวแปร LoadVars
/////สร้าง function ที่จัดการเมื่อทำการติดต่อ+ดึงข้อมูลกับ PHP เสร็จแล้ว
test_lv.onLoad = function(done){
if(done){
//เมื่อการดึงข้อมูลเสร็จสมบูรณ์ไร้ปัญหา
trace("*****ข้อมูลที่อ่านได้จากฐานข้อมูล 'test' ตาราง 'highscore' ที่ 'id' = 1*****");
trace("id: "+this.score_id); //trace ตัวแปร score_id ที่มาจาก PHP
trace("user: "+this.user); //trace ตัวแปร user ที่มาจาก PHP
trace("scores: "+this.scores); //trace ตัวแปร scores ที่มาจาก PHP
trace("**********************************************************************");
}else{
//ถ้าไม่สำเร็จ ก็ว่ากันไป -..-
}
}
/////สั่งดึงข้อมูลจากไฟล์ PHP
test_lv.load("http://localhost/kstests/test_query.php");
เมื่อรันแล้วจะได้ผลตามด้านล่างครับ
*****ข้อมูลที่อ่านได้จากฐานข้อมูล 'test' ตาราง 'highscore' ที่ 'id' = 1*****
id: 1
user: korstudio
scores: 152075
**********************************************************************
เสร็จแล้ว ^^
==============================
จุดสังเกต1. ที่ PHP บรรทัดที่มีการ echo จะต้อง
echo ออกมาในรูปแบบ pair value ครับ คือ
ตัวแปร1=
ค่าตัวแปร1&
ตัวแปร2=
ค่าตัวแปร22. ถ้าใน PHP เราจัดการ echo ในชื่อตัวแปรอะไร ใน Flash ก็ต้องเรียกใช้ชื่อนั้นครับ เช่น จากโค้ดที่ผมทำ
echo "
score_id=".$data_id."&
user=".$data_user."&
scores=".$data_score;
ใน Flash ผมก็เรียกใช้ตัวแปรพวกนั้นตามนี้ครับ
trace("id: "+this.
score_id);
trace("user: "+this.
user);
trace("scores: "+this.
scores);
3. อย่าลืมแก้ Path ของไฟล์ PHP ที่จะดึงด้วยนะครับ
==========================
สำหรับข้อมูลที่ส่งมาหลายๆ ตัว ต้อง Serialize หรือนำข้อมูลที่มีมาต่อๆ กันโดยใช้ตัวคั่นด้วยครับ เช่น
echo "score_id=1||2||3||4&user=korstudio||aloha||testuser||aaaa&scores=150725||70528||112635||125000";
แล้วใน Flash ค่อยทำการ Split ค่าที่ได้อีกทีครับ
ดาวน์โหลดไฟล์ตัวอย่างloadvars.zip