0

だから、私はcURLの完全な初心者ですが、phpを使用してflash as3を介してデータベースにデータを挿入するのに問題があるため(ファイルは異なるサーバーにあります)、cURLスクリプトを使用して両方をブリッジすることをお勧めしました。

これが私のcURLコードです(これは別の質問からコピーして貼り付けたものです。値を変更しただけなので、ここに明らかなエラーがある場合は失礼します):

<?php

//where are we posting to?
$url = 'url'; //I have the correct url of the file (insert.php) on the other server

//what post fields?
$fields = array(
   'Nome'=>$_POST['nome'],
   'Email'=>$_POST['email'],
   'Idade'=>$_POST['idade'],
   'Profissao'=>$_POST['profissao'],
   'Pais'=>$_POST['pais']
);

//build the urlencoded data
$postvars='';
$sep='';
foreach($fields as $key=>$value) 
{ 
   $postvars.= $sep.urlencode($key).'='.urlencode($value); 
   $sep='&'; 
}


//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);
?>

これがフラッシュas3です

function WriteDatabase():void{

    var request:URLRequest = new URLRequest ("curl.php file here"); 

    request.method = URLRequestMethod.POST; 

    var variables:URLVariables = new URLVariables(); 

    variables.nome = ContactForm.nomefield.text;
    variables.email = ContactForm.emailfield.text;
    variables.idade = ContactForm.idadefield.text;
    variables.profissao = ContactForm.proffield.text;
    variables.pais = LanguageField.selectedbutton.text;

    request.data = variables;

    var loader:URLLoader = new URLLoader (request);

    loader.addEventListener(Event.COMPLETE, onComplete);
    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.load(request);

    function onComplete(event):void{
        trace("Completed");


}
    }
// I am assuming (incorrectly perhaps) that if is called the same way you would call a php file. It also traces "Completed" inside the flash, so it comunicates with it.

実際にデータベースにエントリを作成するため、他のファイルを正しく呼び出していることはわかっていますが、すべてが空白です。すべてのフィールド。また、フラッシュファイルをオフラインでテストすると、オンラインではなく機能するため、他のファイルが機能することもわかっています。

どんな助けでもありがたいです。

4

1 に答える 1

1

独自のクエリ文字列を作成しないでください。cURLはPHP配列を受け入れ、すべての作業を実行できます。

$fields = array('foo' => 'bar', 'baz' => 'fiz');
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);

curlは、文字列がすでにURL形式にエンコードされていることを認識できるほど賢くはないため、「name」値のないプレーンな文字列が投稿されていることを確認できます。

同じように、

curl_setopt($ch,CURLOPT_POST,count($fields));

それをどのように使うかではありません。CURLOPT_POSTは、POSTが実行されていることを示す単純なブール値です。フィールドがまったくない場合、突然POSTがfalseになり、クライアントアプリが予期しないGETなどの他のメソッドを使用しています。

于 2012-05-25T15:02:44.073 に答える