上传CSV然后将结果存储到数组中

时间:2012-03-31 03:46:34

标签: php html arrays file-upload csv

我已经在这个问题上工作了几个小时,并且已经使用了很多来自网络的资源和堆栈溢出,但我似乎无法完成这件事。我正在尝试获取csv文件的内容并将它们存储在一个数组中并通过会话在另一页上打印结果。

index.php(显示上传文件的表格)

<html>
<form action="http://mysite.org/~me/upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="file"><br />
<input type="submit" value="Now upload it!">
</form>
</html>

upload.php(如果是CSV,输出filesize,print_r应该包含所有数据的数组)

<?php
session_start();

if (($_FILES["file"]["type"] == "application/vnd.ms-excel"))
{
  if ($_FILES["file"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
else
{
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";

    $file = fopen($_FILES["file"]["tmp_name"], 'r');
    while (($line = fgetcsv($file)) !== FALSE) {
    //$line is an array of the csv elements
    print_r($line);
    $_SESSION['line']=$line;

}
fclose($file);

   }
 }
else
 {
 echo "Invalid file";
 }
  echo "<a href='http://mysite.org/~me/yes.php'>Yes</a>";

 ?>

yes.php

<?php
session_start();
$data = $_SESSION['line'];
print_r($data);
?>

上传页面中的print_r应该与yes页面中的print_r相同,但事实并非如此。它只显示最后一个数组。我不明白我将如何解决这个问题。

作为旁注:我只在php中编程了大约2周,所以请足够周到地解释你的答案。真的很有帮助!谢谢=)

1 个答案:

答案 0 :(得分:2)

您需要追加而不是覆盖 $_SESSION['line']

而不是:

$_SESSION['line'] = $line; // overwriting $_SESSION['line'] w/ each iteration

你需要:

$_SESSION['lines'][] = $line; // pushes the line to an array

然后, yes.php ,你可以:

session_start();
$data = $_SESSION['lines'];
print_r($data);