0

セットアップは簡単です。Joomla アカウントが作成された後、データ (cURL ポスト) を別のデータベース ベースのアプリケーション (MS SQL を使用した ASP) に送信する Joomla e コマース サイト (MySQL バックエンド)。

問題は、このデータが受信データベースに空白なしで保存される場合があることです。例: Joomla サイトで収集された住所は"123 example road"としてデータベースに保存されますが、受信側のデータベースでは"123exampleroad"として保存されます。これは常に発生するわけではありません。そのため、原因が何であるかにかなり困惑しています。

誰もそのような問題を経験しましたか? どんな助けでも大歓迎です。

cURL コードは次のようになります。

//create array of data to be posted

foreach( $registrationfields as $field ) {

if( $field->name == 'email') $field->name = 'user_email';

if( $field->name == 'delimiter_sendregistration') continue;

if( $field->type == 'captcha') continue;

if( $field->type == 'delimiter') continue;



switch($field->name) {

    case 'country':

        require_once(CLASSPATH.'ps_country.php');

        $country = new ps_country();

        $dbc = $country->get_country_by_code($dbbt->f($field->name));

        if( $dbc !== false ) $val = $dbc->f('country_name');

        break;

    default: 

        $val = $dbbt->f($field->name);

        break;

}



$post_data[$field->name] = $val;



} 

$post_data['order_id'] = $order_id;

$post_data['order_date'] = $order_date;

$post_data['order_status'] = $order_status;



$post_data['username'] = $username;



//traverse array and prepare data for posting (key1=value1)

foreach ( $post_data as $key => $value) {

    $post_items[] = $key . '=' . $value;

}



//create the final string to be posted using implode()

$post_string = implode ('&', $post_items);



//create cURL connection

$curl_connection = 

  curl_init('http://--url-here');



//set options

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);

curl_setopt($curl_connection, CURLOPT_USERAGENT, 

  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);



//set data to be posted

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);



//perform our request

$result = curl_exec($curl_connection);



//show information regarding the request

print_r(curl_getinfo($curl_connection));

echo curl_errno($curl_connection) . '-' . 

                curl_error($curl_connection);



//close the connection

curl_close($curl_connection);
4

2 に答える 2

1

この問題は、コードをリファクタリングした後に修正されました。ループを使用して配列を変更し、次に「内破」して文字列を形成する代わりに、次のようにします。

//traverse array and prepare data for posting (key1=value1)
foreach ( $post_data as $key => $value) {
  $post_items[] = $key . '=' . $value;
}

//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);

代わりに「http_build_query」関数を使用しました。これは、エラーを引き起こすことなく同じことを達成します。

$post_string = http_build_query($post_data) . "\n";
于 2013-04-30T20:27:05.193 に答える