Flex按鈕,透過php,更新MySQL的值

這是初學 Flex 的一點心得,因為剛學,下面分享的程式碼必然有不少不夠好的地方,各路高手敬請不吝指教!

程式目的是利用 Flex 做出一個 flash 按鈕,並且可以利用這個按鈕更新 MySQL 裡面的值。

因為找不到 Flex 直接與 MySQL 溝通的方法,所以利用 HTTPService 這個東西來完成。



    
    	
        
    
    
        
    
    
    
        
            
        
    
    
    
        
        	
            McD
        
    

<?php
define( "DATABASE_SERVER", "server ip" );
define( "DATABASE_USERNAME", "db user name" );
define( "DATABASE_PASSWORD", "db user passwd" );
define( "DATABASE_NAME", "db table name" );

//connect to the database.
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
if($mysql == FALSE){
	echo "mysql_connect failure
"; } $r = mysql_select_db( DATABASE_NAME ); if($r == FALSE){ echo "mysql_select_db failure
"; } $Var = $_POST["name"]; //return a list of all the users $Query = "SELECT comment FROM food_data WHERE name='$Var'"; $Result = mysql_query( $Query ); if($Result == NULL){ echo "NULL_1"; } $Shop = mysql_fetch_object( $Result ); $new_comment = $Shop->comment; $new_comment = $new_comment + 1; $Query = "UPDATE food_data SET comment = '$new_comment' WHERE name='$Var'"; $Result = mysql_query( $Query ); if($Result == NULL){ echo "NULL_2"; } $Query = "SELECT comment FROM food_data WHERE name='$Var'"; $Result = mysql_query( $Query ); if($Result == NULL){ echo "NULL_3"; } $Return = ""; while ( $Shop = mysql_fetch_object( $Result ) ) { $Return .= "".$Shop->comment.""; } $Return .= ""; mysql_free_result( $Result ); print ($Return) ?>

Flex 連結 MySQL, ,利用 HTTPSericve 呼叫 php 達成

目前好像還沒有 Flex 直接呼叫 MySQL 的方法,一定要透過 PHP 之類的,之前有篇文章分享 AMFphp 的方法,這篇要分享關於利用 Flex 裡面的 HTTPService 這個屬性來呼叫 PHP 程式,一樣達成與 MySQL 溝通的目的!

mxml code:



    
        
    
    
        
            
            
        
        
            
            
        
        
    
    
        
            
            
        
    
    
    
    
        
            {username.text}
            {emailaddress.text}
        
    

php code:

<?php
define( "DATABASE_SERVER", "server ip" );
define( "DATABASE_USERNAME", "db username" );
define( "DATABASE_PASSWORD", "db passwd" );
define( "DATABASE_NAME", "db table name" );

//connect to the database.
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);

mysql_select_db( DATABASE_NAME );

// Quote variable to make safe
function quote_smart($value)
{
 // Stripslashes
 if (get_magic_quotes_gpc()) {
 $value = stripslashes($value);
 }
 // Quote if not integer
 if (!is_numeric($value)) {
 $value = "'" . mysql_real_escape_string($value) . "'";
 }
 return $value;
}

if( $_POST["emailaddress"] AND $_POST["username"])
{
//add the user
$Query = sprintf("INSERT INTO users VALUES ('', %s, %s)", quote_smart($_POST['username']), quote_smart($_POST['emailaddress']));

$Result = mysql_query( $Query );
}

//return a list of all the users
$Query = "SELECT * from users";
$Result = mysql_query( $Query );

$Return = "";

while ( $User = mysql_fetch_object( $Result ) )
{
$Return .= "".$User->userid."".$User->username."".$User->emailaddress."";
}
$Return .= "";
mysql_free_result( $Result );
print ($Return)
?>

MySQL資料產生命令

CREATE TABLE `users` (
`userid` int(10) unsigned NOT NULL auto_increment,
`username` varchar(255) collate latin1_general_ci NOT NULL,
`emailaddress` varchar(255) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=utf-8_unicode_ci AUTO_INCREMENT=3 ;

參考網頁:
Adobe 官方教學文章
Ubuntu 安裝 Flex 編譯器
Flex SDK 下載頁面

flex使用amfphp連結資料庫範例。

關於 Flex ,基礎環境架設就 看這一篇 吧!

不過,我只有參考 AMFphp 的安裝部份,其他的 XAMPP、php IDE我倒是沒裝

安裝 AMFphp 的部份簡述如下:
amfphp 下載 AMfphp 檔案

當然了,你必須先擁有 apache 以及 php 的環境,關於這點可以看連結的教學或者上網查『LAMP (linux apache mtsql php)』

下載好 AMfphp 之後解壓縮,把解壓縮出來的 amfphp 這個資料夾上傳到伺服器的網頁根目錄底下隨便一個地方

接下來就和連結裡面的教學 STEP2 一樣了。

下面貼的這個是程式碼是 flex 連結到資料庫的範例,不是很難。

query("SET NAMES 'utf8'");
		if(mysqli_connect_errno() != 0 ){
			$messenge = mysql_connect_error();
			return "

MySQL Connect Error!

"; $conn->close(); } else{ } $sql1="SELECT comment FROM food_data WHERE phone = "{$phone}""; $result = $conn->query($sql1); if( ($data = @$result->fetch_assoc() ) !== NULL){ return "The comment of {$phone} is {$data['comment']}"; } else{ return "There is no info about {$phone},Do you want to add it?"; } } } ?>

只要把上述程式碼存檔到 /your/htdocs/amfphp/services/ 底下,就可以用 AMFphp 裡面原始附的 swf 來呼叫並執行。
程式碼第十七行回傳的結果即出現在 Result 欄裡面。
flex php mysql 連結範例

好像只要是你原本 php 裡面有的模組,就可以直接透過 AMFphp 讓 Flex 呼叫使用。
上的時候要把 echo 之類的語法拿掉,否則會出現下面這樣的錯誤

(Object)#0
message = “faultCode:INVALID_AMF_MESSAGE faultString:’Invalid AMF message’ faultDetail:’Ha Ha


剛剛我成功的在 Windows 上面執行了 Flex 使用 remoting 連結,其中比較不明白的地方是,在 Flex Builder 裡面新增一個 Flex Project ,在 server location 的設定部份為什麼好像只能用 localhost 或者 127.0.0.1 或者本機 IP

Web root這個設定值意思是產生出來的專案檔案放置的地方,建議是你的機器上面的網頁根目錄

Root URL的意思應該是你產生出來的檔案要在哪個網站執行就填入該網站的網頁根目錄

例如我在我家裡面產生出來的檔案是要在 http://magicallove.ccns.ncku.edu.tw/flex1 這邊執行的話

那 Root URL 就填入 http://magicallove.ccns.ncku.edu.tw ,即使程式告訴你 Cannot access the web server 也沒關係


  • 被呼叫的 php 程式
  • 這個範例剛好有用 fopen 開了一個檔案, fopen 的第一個參數是要開啟的檔案路徑,我寫的相對路徑會在 HelloWorld.php 相同的

    資料夾底下開一個檔案,然後寫入兩行字,關閉檔案

    開檔關檔的概念跟 php 沒啥關係,反正程式裡面對於檔案就是這樣操作,記住吧!

    
    
    	
    	
    	
    
    
  • 產生 swf 的 mxml 檔案
  • 注意三四五這三行裡面出現 sayHello、HelloWorld 的地方
    第四行的 click="this.amfphp.Remoting.sayHello()" 是執行 HelloWorld.php 裡面的 function sayHello
    第五行的 source="HelloWorld" 指的是載入 HelloWorld.php 這隻程式的意思

    載入 HelloWorld.php 的位址好像是在電腦第一次拜訪該伺服器網頁的時候會設定(有錯歡迎指正)
    例如我的 services 位址是 webroot/amfphp/services

    你也可以把 source 寫成 source="flex.HelloWorld"
    這樣他就會變成到 webroot/amfphp/services/flex/ 底下去載入 HelloWorld.php 這隻程式了
    範例Demo
    http://magicallove.ccns.ncku.edu.tw/flex1/flex1.html

    感謝 Ausir 的指教!

    推薦閱讀:AMFPHP-搭起Flash與PHP的美麗橋樑