1

所以我试图围绕这个逻辑来思考。这是表单处理脚本上的代码。我想要做的是将表单数据随机发送到这些 url 之一。我正在阅读使用 switch case 逻辑,但是当我使用您在下面看到的代码时,它会将表单数据提交给所有 3 个 URL。有没有办法让它只发送给其中一个?

function post_to_url($url, $data) {
$fields = '';
foreach($data as $key => $value) { 
  $fields .= $key . '=' . $value . '&'; 
}
rtrim($fields, '&');

$post = curl_init();

curl_setopt($post, CURLOPT_URL, $url);
curl_setopt($post, CURLOPT_POST, 1);
curl_setopt($post, CURLOPT_POSTFIELDS, $fields);


$result = curl_exec($post);

curl_close($post);
}



return $result;

$x = rand(1,3);

switch ($x) {
    case 1:
        post_to_url("http://examplesite1.com/cgi-bin/maxuseradmin.cgi", $data2);
        break;

    case 2:
        post_to_url("http://examplesite2?fid=6646588e54", $data3);
        break;

    case 3:
        post_to_url("http://examplesite1?fid=2fb44e3888", $data4);
        break;
    }

$data 变量是数组——感谢您的帮助

4

5 回答 5

3

这里的问题是您甚至在 switch 语句发生之前就调用了这些函数。这段代码应该对你有用,因为它只在 switch 语句中调用函数:

$x = rand(1,3);

switch ($x) {
    case 1:
        post_to_url("http://examplesite1.com/cgi-bin/maxuseradmin.cgi", $data2);
        break;

    case 2:
        post_to_url("http://examplesite2?fid=6646588e54", $data3);
        break;

    case 3:
        post_to_url("http://examplesite1?fid=2fb44e3888", $data4);
        break;
}
于 2012-08-01T18:17:40.397 回答
1

您要发布到所有 3 个页面,然后将返回的值设置为 $ar1 $ar2 和 $ar3。

将您的选项存储在一个数组中,然后调用post_to_url()一次。

$urls = array(
    array("http://examplesite1.com/cgi-bin/maxuseradmin.cgi", $data2),
    array("http://examplesite2?fid=6646588e54", $data3),
    array("http://examplesite1?fid=2fb44e3888", $data4)
);

$x = rand(0,2);
post_to_url ($urls[$x][0], $urls[$x][1]);
于 2012-08-01T18:18:43.397 回答
0

在前 3 行中,您调用您的post_to_url函数

将您的代码更改为

$urls = array(
   "http://examplesite1.com/cgi-bin/maxuseradmin.cgi",
   "http://examplesite2?fid=6646588e54",
   "http://examplesite1?fid=2fb44e3888"
);

# don't know what's in $data* but just to give you an idea
$data = array(
    $data2,
    $data3,
    $data4
);
$x = rand(0,2);
post_to_url($urls[x], $data[x]);
于 2012-08-01T18:18:16.183 回答
0

对函数 post_to_url 的调用应该在 switch case 语句中。它发布到所有 3 的原因是,即使在切换大小写之前,您也调用了此函数 3 次。

于 2012-08-01T18:18:43.307 回答
0

您实际上在前三行执行了您的 post_to_url 函数三次。你会想做这样的事情:

$x = rand(1,3);

switch ($x)
{
case 1:
post_to_url("http://examplesite1.com/cgi-bin/maxuseradmin.cgi", $data2);
break;

case 2:
post_to_url("http://examplesite2?fid=6646588e54", $data3);
break;

case 3:
post_to_url("http://examplesite1?fid=2fb44e3888", $data4);
break;
}
于 2012-08-01T18:19:38.660 回答