0

アップロードされたファイルを解析するためのコードを記述しようとしてい.csvます。次のコードを書きました。print_r($buffer);コントローラーは、ステートメントで印刷しようとした配列の形式で CSV ファイルの行を生成し、期待される出力を取得します。文字列は を使用して印刷できますがecho $string;、データベースに保存する前に編集するためにテキスト フィールドに渡すことができません。

サイトコントローラー

public function actionImport()
{
    $buffer[] = array();
    if(isset($_POST['submitCSV'])){
        $filename=$_FILES['filename']['tmp_name'];
        $fp = fopen("$filename","r");
            if($fp){
                $i = 0;
                while(($buffer[$i++] = fgetcsv($fp,1000,",")) !== false)
                {}
                if(!feof($fp))
                    echo "Echo: Unexpected fgets() fail\n";
            }
            fclose($fp);
            unset($_POST['submitCSV']);
    }
    $this->render('index',array('buffer'=>$buffer));
}

見る(index.php)

<div class="form">
<?php echo CHtml::beginForm('site/import',$method='post',$htmlOptions =array('enctype'=>'multipart/form-data')); ?>

    <div class="row">
        <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
        <input type="file" name="filename" value="file">
        <?php
            echo CHtml::submitButton('Submit', array('name'=>'submitCSV'));
            foreach($buffer as $line)
                foreach($line as $string)
                    echo CHtml::activeTextField($string,$htmlOptions = array('value'=>$string));
        ?>
</div>
<?php echo CHtml::endForm(); ?>

4

1 に答える 1

0

コントローラーで、次のようなことを試してください。

public function actionImport()
{
    if (isset($_POST['submitCSV'])) {
        $filename = $_FILES['filename']['tmp_name'];
        $fp = fopen("$filename", "r");
        if($fp) {
            while(($buffer = fgetcsv($fp,1000,",")) !== false)
            {
            }
            if(!feof($fp)) {
               echo "Echo: Unexpected fgets() fail\n";
            }
        }
        fclose($fp);
        if (count($buffer)) {
            $this->render('index',array('buffer' => $buffer));
        }
    }
}

そしてあなたの見解では:

<? foreach ($buffer as $line): ?>

   <p><? CHtml::activeTextField($line, array('class' => 'login_textbox', 'style' => 'width:100%', 'value' => $line)); ?> </p>

<? endforeach; ?>

データの配列 (CSV 行で構成される) をビューに渡します。ビューは配列を反復処理し、それぞれのテキスト フィールドをレンダリングします。short_tags が有効になっていることを確認してください。

于 2013-01-26T11:16:01.423 に答える