2012-10-14 56 views
0

我想通過使用cURL將表單從一個站點提交到另一個站點。但它給我一些$ fields_string變量錯誤(未定義的變量)。cURL變量錯誤

這是我第一次使用cURL並且沒有太多的知識。所以請指導我解決這個問題,我可以成功提交表單。

信息:我現在正在本地主機上工作,並試圖提交表單本地主機的另一個網站進行測試。

這裏是我的代碼

<?php 

    $url = 'http://localhost/qa/ask'; 
    $fields = array(

       'title'=>urlencode($_POST['title']), 
       'content'=>urlencode($_POST['content']), 
       'tags'=>urlencode($_POST['tags']), 
       'q_notify'=>urlencode($_POST['q_notify']), 

      ); 


    foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
    rtrim($fields_string,'&');  

    $ch = curl_init(); 

    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_POST,count($fields)); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 

    $result = curl_exec($ch); 

    curl_close($ch); 
?> 

這是我的HTML表單

<form action="submit.php" method="POST"> 
    <INPUT NAME="title" TYPE="text" CLASS="qa-form-tall-text custom-ask-text" value="" placeholder="Ask your question" autocomplete="off" role="textbox"> 

    <TEXTAREA NAME="content" CLASS="qa-form-tall-text"></TEXTAREA> 

    <INPUT NAME="tags" TYPE="text" CLASS="qa-form-tall-text custom-ask-text" value=""> 

    <label><input type="checkbox" class="qa-form-tall-checkbox" checked="" value="1" name="q_notify">Email me if my question is answered or commented on</label> 

    <INPUT CLASS="custom-ask-submit" TYPE="submit" value="ask"> 

    <INPUT TYPE="hidden" NAME="doask1" VALUE="1"> 
</form> 

感謝您

編輯:NEW CODE

<?php 

$url = 'http://localhost/qa/ask'; 
$fields = array(
      'title'=>$_POST['title'], 
      'content'=>$_POST['content'], 
      'tags'=>$_POST['tags'], 
      'q_notify'=>$_POST['q_notify'], 

     ); 

$fields_string = ''; 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 

$ch = curl_init(); 

curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields); 

$result = curl_exec($ch); 

curl_close($ch); 

?> 

如果一切都是正確的,可能是我分配錯誤的網址。我正在使用question2answer.org腳本,並希望在我的用戶可以從我的其他網站提交表單/問題的地方製作表單。

編輯: @GBD

Curl error: array(22) { ["url"]=> string(23) "http://localhost/qa/ask" ["content_type"]=> string(24) "text/html; charset=utf-8" ["http_code"]=> int(200) ["header_size"]=> int(443) ["request_size"]=> int(211) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0.141) ["namelookup_time"]=> float(0) ["connect_time"]=> float(0.016) ["pretransfer_time"]=> float(0.016) ["size_upload"]=> float(87) ["size_download"]=> float(16130) ["speed_download"]=> float(114397) ["speed_upload"]=> float(617) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(87) ["starttransfer_time"]=> float(0.141) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } ["redirect_url"]=> string(0) "" } 

回答

1

要追加到$fields_string;

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 

沒有將$fields_string設置爲開始值。只要首先將它設置爲空字符串,錯誤就會消失;

$fields_string = ''; 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
1

不要爲後期字段構建自己的字符串。 CURL完全可以使用PHP數組並進行自己的編碼。 curl_setopt($ch, CURLOPT_POSTFIELDS, $fields)是你所需要的。

+0

沒有,但沒有結果。意味着不提交表單,但通過過程沒有錯誤,一旦它提交加載該網站頁面($ url)沒有css –

+0

你也必須刪除urlencode位,當你定義$字段。就像我說的那樣,捲髮爲你做了一切。 –

+0

你的意思是''title'=> urlencode($ _ POST ['title'])'''title'=> $ _ POST ['title']' –