我正在尝试在浏览器中显示CSV文件并打印所选的(通过单选按钮)行。
这是我打印CSV文件的代码(每行旁边有一个单选按钮):
<?php
echo "<html><body><table border='1'>";
$f = fopen("data.csv", "r");
$row = 1;
echo "<form method='post' action='submit.php'>";
while (($line = fgetcsv($f)) !== false) {
$to_print = implode(",", $line); // added this and changed value below (to use it)
echo "<tr><td><input type='radio' name='env[$row]' value='$to_print' /></td>";
foreach ($line as $cell) {
echo "<td contenteditable='true'>" . htmlspecialchars($cell) . "</td>";
}
echo "</tr>\n";
++$row;
}
fclose($f);
echo "</table><br><Input type='submit'></form></span></body></html>";
?>
我在底部有一个提交按钮(点击时)应该将所选行中的数据传递给submit.php,它应该打印出来。
这是submit.php:
<?php
echo "<html><body>";
print_r($_POST); // this prints what I need
if (! empty($_POST['env'])) {
$j=0;
foreach ($_POST['env'] as $env) {
// Can't get anything to print in here
++$j;
}
}
echo "</body></html>";
?>
但它什么都没打印。我猜这与我的单选按钮的“价值”有关:
value='<?php echo $line;?>]'
这不可能......
任何建议都会很棒。谢谢!
答案 0 :(得分:3)
您的代码存在问题:
echo "<tr><td><input type='radio' name='env[<?php echo $row;?>]'
您正在回应PHP中的一些HTML。在线内你的回声,你再次打开<?php
标签。调试正在发布的内容,实际上只是发送字符串&#34;&lt;?php echo $ row;?&gt;&#34;
要解决此问题,请将回显线更改为:
echo "<tr><td><input type='radio' name='env[$row]'
...
只要您使用双引号,$row
变量就会被解释,您将获得所需的结果。
编辑:
正确地将数据输出到页面后,您需要重新考虑如何循环数据。
$line
的值由返回数组的[fgetcsv](http://php.net/manual/en/function.fgetcsv.php)
设置。您将此数组设置为输入的值,如下所示:value=$line
,但看到$line
是一个数组,PHP正在进行数组到字符串的转换,而您不是得到你期望的。
解决方案:选择数组的单个索引以设置为值(例如$value=$line[0]
)或在内部循环中输出td
,您将循环遍历行中的每个字段。