【问题标题】:Uploading a CSV then storing the result into an array上传 CSV,然后将结果存储到数组中
【发布时间】:2012-03-31 03:46:34
【问题描述】:

我已经在这个问题上工作了几个小时,并且使用了来自网络和堆栈溢出的许多资源,但我似乎无法克服最后一件事。我正在尝试获取 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,输出文件大小,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>";

 ?>

是的.php

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

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

附带说明:我只使用 php 编程大约 2 周,所以请足够周到地解释你的答案。这真的很有帮助!谢谢=)

【问题讨论】:

    标签: php html arrays file-upload csv


    【解决方案1】:

    你需要追加而不是覆盖$_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);
    

    【讨论】:

    • 哦!所以即使 $line 是一个数组。每次 while 循环运行时它都会被覆盖。所以,为了追加,我必须创建另一个数组。明白了。感谢您的明确答复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2017-02-02
    • 2019-09-30
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多