【发布时间】:2018-06-13 08:30:04
【问题描述】:
我也读过这个问题:Missing index in a multidimensional array PHP
我搜索了丢失的密钥,但没有。
我的目标是创建一个包含数组内信息的 csv 文件。 当我在同一台服务器上处理它时,我能够做到这一点,但由于环境升级和 csv 文件的划分,我必须使用第二台服务器,因此 CURL 请求。
问题是我可以调用 receiver.php 而这实际上创建了 file.csv ,但是这个文件是空的(0 字节)。
我唯一的日志是下面的那个..
请在下面找到php运行后的结果:
Array
(
[0] => Array
(
[0] => name
[1] => frank
)
[1] => Array
(
[0] => address
[1] => none
)
[2] => Array
(
[0] => email
[1] => some@email
)
[3] => Array
(
[0] => job
[1] => none
)
[4] => Array
(
[0] =>
)
[5] => Array
(
[0] => options
[1] => status
[2] => link
[3] => time
[4] => note
[5] => check
)
[6] => Array
(
[options] => none
[status] => active
[link] => http://something
[time] => 2018-01-11 10:00
[note] => none
[check] => OK
)
)
Array key exist for 0
Array key exist for 1
Array key exist for 2
Array key exist for 3
Array key exist for 4
Array key exist for 5
Array key exist for 6
我有一个包含许多 <input> 字段的表单;其中 4 个是静态的(姓名、电子邮件等),其他的在每次用户按下按钮时生成。
每次点击都会出现一行,用户可以输入更多数据。
此数据的 <input name=...> 是:
at row0:
name='prefs[0][options]'
name='prefs[0][status]'
name='prefs[0][link]'
name='prefs[0][time]'
name='prefs[0][note]'
name='prefs[0][check]'
If the user clicks the button, the row appears in the table and the new <input> fields will be:
name='prefs[1][options]'
name='prefs[1][status]'
name='prefs[1][link]'
name='prefs[1][time]'
name='prefs[1][note]'
name='prefs[1][check]'
.. and so on.
提交表单时,sender.php 处理数据。
我将有 2 个数组:
A - $list, which contain the static fields
B - $_POST['prefs'] containing each row
我将两个数组合并在一起:
$final_array = array_merge($list, $_POST['prefs']);
日志说:
PHP Notice: Undefined index: fields_string in /var/www/report/receiver.php on line 4
PHP Warning: Invalid argument supplied for foreach() in /var/www/report/receiver.php on line 4
sender.php
<?php
if (isset($_POST['submit'])){
require_once('config.php');
$name = addslashes(strip_tags($_POST["name"]));
$address = addslashes(strip_tags($_POST["address"]));
$email = addslashes(strip_tags($_POST["email"]));
$job = addslashes(strip_tags($_POST["job"]));
$list = array (
array('name', "$name"),
array('address', "$address"),
array('email', "$email"),
array('job', "$job"),
array(''),
array('options', 'status', 'link','time', 'note','check' )
);
// Merge the 2 arrays and split to variables
$final_array = array_merge($list, $_POST['prefs']);
echo '<pre>'; print_r($final_array); echo '</pre>';
sleep(2);
// Check for missing keys
$firstkey = key($final_array); // get first index of array
end($final_array);
$lastkey = key($final_array); // get last index of array
for($i = $firstkey;$i <= $lastkey;$i++) {
if(!array_key_exists($i,$final_array)) { // check key exist or not
echo "Missing Array key is ".$i."<br/>";
} else echo "Array key exist for ".$i."<br>";
}
$fields_string = "";
foreach($final_array as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string, '&');
// Send through CURL
$ch = curl_init('http://192.168.10.10/receiver.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
// execute!
$response = curl_exec($ch);
// close the connection, release resources used
curl_close($ch);
// do anything you want with your response
var_dump($response);
header("Location:index.php");
exit;
}
?>
receiver.php
<?php
$csv = fopen( "/home/user/file.csv", 'w+' );
foreach ($_POST["fields_string"] as $fields) {
fputcsv($csv, $fields, ";");
}
fclose($csv);
?>
【问题讨论】:
-
fields_string 是字符串类型,您不能在 foreach 中使用它。它的数组函数
-
为什么不使用
http_build_query($final_array)? -
没试过,明天去办公室看看!谢谢
-
我使用了this链接:并更新了代码:
$array_final = http_build_query_same_names($final_array); curl_setopt($ch, CURLOPT_POSTFIELDS, $array_final);,但我没有解决。相同的日志错误。请问您是否有时间提供解决方案?我在这里有点困惑 -
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($final_array));也在尝试这种方式。我想知道问题是否出在接收器上...