2012-08-05 71 views
0

更新1:處理數組中的數組?

我也有我的代碼如下foreach循環:

foreach ($_POST as $key => $value){ 
    $message .= $key . " = " .$value ."\n\n<br />"; 
} 

這是最後一個。

或者,也許問題出在線路:

curl_setopt($ch, CURLOPT_POSTFIELDS, $req); 

不喜歡生成的字符串中的%5B0%5D,即

transaction%5B0%5D=USD+21.00 

使用的代碼$req = http_build_query($_POST);

原題:

我收到以下錯誤信息:

[Sun Aug 04 10:00:00 2012] [error] [client 000.0.00.000] PHP Warning: stripslashes() expects parameter 1 to be string, array given in /var/www/page.php on line 20 
[Sun Aug 04 10:00:00 2012] [error] [client 000.0.00.000] PHP Stack trace: 
[Sun Aug 04 10:00:00 20122] [error] [client 000.0.00.000] PHP 1. {main}() /var/www/page.php:0 
[Sun Aug 04 10:00:00 2012] [error] [client 000.0.00.000] PHP 2. stripslashes() /var/www/page.php:20 

問題的代碼是這樣的:

Line 19: foreach ($_POST as $key => $value) { 
Line 20:  $value = urlencode(stripslashes($value)); 
Line 21:  $req .= "&$key=$value"; 
Line 22: } 

$_POST包含以下內容:

Array 
(
    [transaction] => Array 
     (
      [0] => USD 21.00 
     ) 

    [payment_request_date] => Sat Aug 04 10:00:00 PDT 2012 
    [return_url] => http://000.000.000.000/success.php 
    [fees_payer] => EACHRECEIVER 
    [ipn_notification_url] => http://000.000.000.000/ipn.php 
    [sender_email] => [email protected] 
    [verify_sign] => slkdfj30r2489urj0947830ru0ty80ur0er037jfgoiru932e.as329e 
    [test_ipn] => 1 
    [cancel_url] => http://000.000.000.000/cancel.php 
    [pay_key] => AP-SLKJ30F9J90J3RSD3 
    [action_type] => PAY 
    [transaction_type] => Adaptive Payment PAY 
    [tracking_id] => E4902RJF2 
    [status] => COMPLETED 
    [log_default_shipping_address_in_transaction] => false 
    [charset] => windows-1252 
    [notify_version] => UNVERSIONED 
    [reverse_all_parallel_payments_on_error] => false 
) 

stripslashes()是否因爲數組中的數組而給我一個問題?如果是的話,我如何處理foreeach循環中的$_POST,如果不是,那麼問題是什麼?

回答

1

只需使用函數http_build_query,它將爲您生成一個URL編碼的查詢字符串。

$query_str = http_build_query($_POST); 
+0

所以更換與單行整個'foreach'循環? – oshirowanen 2012-08-05 08:16:56

+0

@oshirowanen是的,就是這樣。 – xdazz 2012-08-05 08:17:25

+0

不錯,我現在就試試。 – oshirowanen 2012-08-05 08:17:44

0
function stripslashes_every_string($array){ 
    foreach($array as $key => $value){ 
    $array[$key] = is_array($value) ? stripslashes_every_string($value) : stripslashes($value); 
    } 
    return $array; 
} 
$postdata = stripslashes_every_string($_POST); 
+0

這是否適用於我的「foreach」循環,如我的更新問題所示? – oshirowanen 2012-08-05 08:38:46

+0

我在原始問題中增加了更多詳細信息到'update 1'。 – oshirowanen 2012-08-05 08:48:46

+0

而不是你原來的foreach,只需要在這個函數中設置一個變量來傳遞參數中的$ _POST,它應該去掉每個字符串的反斜槓。您可能需要根據您需要的功能進行定製。 – jeremy 2012-08-05 15:07:11