2011-04-06 12 views
0

在AS3到PHP的Flash中聯繫表單。在Flash中的聯繫表格:AS3檢查如果PHP發送電子郵件*問題*

我的問題是AS3中的函數「showdata」沒有使用PHP代碼中的變量。它無法看到來自PHP的數據=成功,所以即使電子郵件已成功發送,我仍會收到「錯誤」。 你能幫助我建議什麼改變功能「showdata」或其他功能?

我是一個在線服務器上進行測試

PHP代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<body> 
    <?php 
     $subject =$_POST[theme]; 
     $message=$_POST[msg]; 
     $mail_from=$_POST[email]; 
     $header="from: $name <$mail_from>"; 
     $to ='[email protected]'; 
     $sending=mail($to,$subject,$message,$header);  
     if ($sending) 
      { 
      echo "answer=success"; 
      } 
     else 
      { 
      echo "answer=error"; 
      } 
    ?> 
</body> 
</html> 

AS3代碼

sendbtn.addEventListener(MouseEvent.CLICK,trysend); 
function trysend(e:MouseEvent):void{ 
    if (subject.text == "") { 
     statustext.text = "give theme"; 
    } else if (isValidEmail(from.text) != true) { 
     statustext.text = "give email."; 
    } else if (body.text == "") { 
     statustext.text = "write a message"; 
    } else { 
     var variables:URLVariables = new URLVariables(); 
     variables.theme = subject.text; 
     variables.email = from.text; 
     variables.msg = body.text; 

     var urlRequest:URLRequest = new URLRequest("mail.php"); 
     urlRequest.method = URLRequestMethod.POST; 
     urlRequest.data = variables; 

     var loader:URLLoader=new URLLoader(); 
     loader.dataFormat=URLLoaderDataFormat.VARIABLES; 
     loader.addEventListener(Event.COMPLETE, showData); 
     loader.load(urlRequest); 
    } 
} 

function showData(evt:Event):void { 
    var loader:URLLoader=URLLoader(evt.target); 
    var resulting:URLVariables = new URLVariables(loader.data); 
    if (resulting.answer == "error") {  
     statustext.text = "Success!"; 
    } else if (resulting.answer == "success"){ 
     statustext.text = "error..."; 
     subject.text=""; 
     from.text=""; 
     body.text=""; 
    } 
} 


//Validation Email 
function isValidEmail(email:String):Boolean { 
    var emailExpression:RegExp = /^[a-z][\w.-][email protected]\w[\w.-]+\.[\w.-]*[a-z][a-z]$/i; 
    return emailExpression.test(email); 
} 
+0

什麼是'跟蹤(loader.data)的輸出;'? – bmleite 2011-04-06 11:27:57

+0

在PHP方面不是問題嗎?試着做這個'if($ sending){echo「data = success」; } else {echo「data = error」; }'然後,在_showData_函數中更改/添加條件if(result.data ==「error」){...}'。 – bmleite 2011-04-06 14:10:30

+0

@ bmleite:仍然沒有功能 – Nickos 2011-04-07 08:07:35

回答

0

現在的工作是這樣的:

PHP(不要把它放在'html''head''body'標籤中。創建一個只有這樣的代碼的文件:)

<?php 
    $subject =$_POST[theme]; 
    $message=$_POST[msg]; 
    $mail_from=$_POST[email]; 
    $header="from: $name <$mail_from>"; 
    $to ='[email protected]'; 
    $sending=mail($to,$subject,$message,$header); 
    if ($sending){  
    print 'response=success';} 
?> 

的ActionScript3

function trysend(e:MouseEvent):void{ 
    Theme = subject.text; 
    Email = from.text; 
    Message = body.text; 

    if (Theme == "") { 
     statustext.text = "give a theme"; 
    } else if (Email == "") != true) { 
     statustext.text = "give an email."; 
    } else if (Message == "") { 
     statustext.text = "give a message"; 
    } else { 

     var variables:URLVariables = new URLVariables(); 
     variables.theme = Theme; 
     variables.email = Email; 
     variables.msg = Message; 

     var urlRequest:URLRequest = new URLRequest("mail.php"); 
     urlRequest.method = URLRequestMethod.POST; 
     urlRequest.data = variables; 

     var loader:URLLoader = new URLLoader(); 
     loader.load(urlRequest); 
     loader.addEventListener(Event.COMPLETE, showData); 
    } 
} 


    function showData(evt:Event):void { 
     var Result:URLVariables = new URLVariables(evt.target.data); 
     if (Result.response == "success") { 
      statustext.text = "Success!"; 
      subject.text=""; 
      from.text=""; 
      body.text=""; 
     } else { 
      statustext.text = "error"; 
     } 
    } 
+0

最好的做法是把你的URLLoaders *放在你的函數之外。這樣它不會被垃圾收集。 – NemoStein 2011-04-07 12:54:40

0

loader.data必須包含你的PHP代碼呼應的字符串。你必須把它放在URLVariables才能解析它。

function showData(evt:Event):void { 
    var result:URLVariables = new URLVariables(loader.data); 
    if (result.data == "success") { 
    ... 

順便說一下,將你的裝載機作爲一個成員變量,不要寫在函數內部功能;)

+0

親愛的朋友。感謝您的迴應。我必須只更改你寫下的行嗎?還是別的什麼?我仍然沒有得到結果。你的建議uppon函數裏面的函數怎麼樣?你能否寫下你認爲可以爲我工作的整個代碼?在此先感謝 – Nickos 2011-04-06 11:52:21

+0

你能告訴我,如果你的trace(loader.data)返回一些東西嗎? – Kodiak 2011-04-06 11:55:36

+0

不,它不返回任何東西。代碼的方式,如果總是導致其他人 – Nickos 2011-04-06 11:59:29

相關問題