0

我正在尝试使用 cURL 将表单从一个站点提交到另一个站点。但是它给了我一些 $fields_string 变量错误(未定义的变量)。

这是我第一次使用 cURL 并且对此没有太多了解。所以请指导我解决这个我可以成功提交表单的问题。

信息:我现在正在 localhost 上工作,并尝试在 localhost 另一个网站上提交表单进行测试。

这是我的代码

<?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>

谢谢

编辑:新代码

<?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) "" } 
4

2 回答 2

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.'&'; }
于 2012-10-14T08:28:05.850 回答
1

不要为帖子字段构建自己的字符串。CURL 完全能够获取 PHP 数组并进行自己的编码。curl_setopt($ch, CURLOPT_POSTFIELDS, $fields)是你所需要的全部。

于 2012-10-14T08:38:13.363 回答