【问题标题】:How to pass the data into the text-fields如何将数据传递到文本字段
【发布时间】:2013-01-10 06:25:35
【问题描述】:

我正在尝试编写代码来解析上传的.csv 文件。我已经编写了以下代码。控制器以数组的形式生成 CSV 文件的行,我也尝试使用 print_r($buffer); 语句打印这些行,我得到了预期的输出。虽然可以使用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(); ?>

【问题讨论】:

    标签: php yii


    【解决方案1】:

    在您的控制器中,尝试以下操作:

    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。

    【讨论】:

    • 视图如何知道我发送了一些包含数据的数组?顺便说一句,我得到了这个error : undefined variable $buffer
    • 你需要查看Yii's documentation关于他们的视图渲染
    • 根据文档,我需要定义一个模型。但是现在我不想将数据保存到数据库中,我为什么需要模型?
    • 模型不必是 CActiveRecord。您可以简单地使用 CModel 对象。这就是 Yii 的默认登录和联系页面所做的——它们也不会保存到数据库中。有关示例,请参见模型文件夹中的 ContactForm 和 LoginForm。
    • @hohner 我已经编辑了这个问题。我无法更早地找出问题所在。现在我已经更清楚地说明了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多