PHP循环CSV并打印选定的行

时间:2015-08-10 17:34:59

标签: php html

我正在尝试在浏览器中显示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;?>]'

这不可能......

任何建议都会很棒。谢谢!

1 个答案:

答案 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,您将循环遍历行中的每个字段。