4

我在弄清楚如何读取我上传的 CSV 文件时遇到了一些麻烦,可能我的控制器代码中遗漏了一些东西。

  public function actionImport() {
    $model = new Produtos;
    $this->render('import', array('model' => $model) );

    if( isset($_FILES['csv_file']) ) {

      $handle = fopen($_FILES['csv_file']['tmp_name'], 'r');

      if ($handle) {
        while( ($line = fgetcsv($handle, 1000, ";")) != FALSE) {
            $model->codigo          = $line[0];
            $model->nome            = $line[1];
            $model->descricao       = $line[2];
            $model->stock           = $line[3];
            $model->data_reposicao  = $line[4];

            $model->save();
        }        
      }
      fclose($handle);
    }

  }

这只是为我节省了 CSV 中的最后一行……请帮忙!

任何帮助将不胜感激。

谢谢

4

7 回答 7

3

我认为您错过了文件的名称,请尝试 $_FILES['csv_file']['tmp_name'] http://php.net/manual/en/features.file-upload.post-method.php以供参考。Yii 也提供文件处理,查看http://www.yiiframework.com/doc/api/1.1/CUploadedFile以供参考

于 2011-10-25T11:45:16.577 回答
1

$_FILES 是一个数组,其中包含 ['element_name']-array。在你的情况下 $_FILES 是一个数组 $_FILES['csv_file']['name'], $_FILES['csv_file']['type'], $_FILES['csv_file']['error'], $_FILES ['csv_file']['size'] 和 $_FILES['csv_file']['tmp_name']。

所以简而言之;$_FILES['csv_file'] 是一个数组。

于 2011-10-25T11:47:07.780 回答
1

不要忘记检查您的数据是否已成功验证。

在您的代码之间插入此代码:

        $model->data_reposicao  = $line[4];

        if (!$model->validate())
            throw new Exception("Validation failed.");

        $model->save();

所以你可以看到出了什么问题。

于 2011-10-26T14:30:53.180 回答
1

您一次又一次地保存相同的模型实例...这就是为什么只保存最后一行...您必须为每一行创建一个新模型,即在您的 while 循环中,添加 $model = new Produtos;

于 2012-01-17T12:34:22.063 回答
1

每次需要将行插入表时,都需要初始化模型对象。代码应该是这样的:

public function actionImport() {
    $model = new Produtos;
    $this->render('import', array('model' => $model) );

    if( isset($_FILES['csv_file']) ) {

      $handle = fopen($_FILES['csv_file']['tmp_name'], 'r');

      if ($handle) {
        while( ($line = fgetcsv($handle, 1000, ";")) != FALSE) {
            $modeln = new Produtos;
            $modeln->codigo          = $line[0];
            $modeln->nome            = $line[1];
            $modeln->descricao       = $line[2];
            $modeln->stock           = $line[3];
            $modeln->data_reposicao  = $line[4];

            $modeln->save();
        }        
      }
      fclose($handle);
    }

  }
于 2013-10-17T09:31:43.633 回答
0

我知道这是一篇旧帖子,但我只是遇到了这个问题,只是想帮助可能遇到相同问题的人(黑白问题与 CSV 或文件上传无关)

问题在于 Yii 如何处理保存

您需要在保存之前将模型对象的 isNewRecord 属性设置为 true,并将主键设置为 NULL,以便每次保存新记录。

$model->PRIMARYKEYCOLUMN = NULL; //Replace PRIMARYKEYCOLUMN with the name of column
$model->isNewRecord = true;
$model->save();

每当您在循环中保存行时,都需要执行上述步骤。

于 2013-04-11T14:27:48.653 回答
-1
$handle = fopen($_FILES['Userimportcsv']['tmp_name']['csv_file'], 'r');
if($handle) {                        
    $row = 1;
    while( ($line = fgetcsv($handle, 1000, ",")) != FALSE) {
        if($row>1) {    
          $newModel = new Countries;
          $newModel->countryName       = $line[0];
          $newModel->status            = $line[1];
          $newModel->save();
        } 
        $row++;                     
    }                       
}
fclose($handle);
于 2015-01-16T10:12:42.040 回答