【问题标题】:Delete specific row in CSV file using HTML Table使用 HTML 表删除 CSV 文件中的特定行
【发布时间】:2014-05-01 12:13:19
【问题描述】:

我有一个HTML table,我使用PHP.. 表中的数据来自CSV file

我已经可以在文件末尾的新行中添加新数据。我的问题是,如果我想删除 CSV 文件中数据中间的现有行怎么办。我怎样才能做到这一点?顺便说一句,我在这里不使用任何数据库。我只使用HTML TableCSV file。下面是我查看 CSV 和添加新数据的代码。

查看

<?php
                            $row = 1;
                                if (($handle = fopen("bin/pdw_table.csv", "r+")) !== FALSE) {

                        ?>
                                    <table class="table table-hover table-striped table-bordered" id="table-data">
                                        <tr>
                                            <th>Field 1</th>
                                            <th>Field 2</th>
                                            <th>Field 3</th>
                                            <th></th>
                                            <th>Field 4</th>
                                            <th>Field 5</th>
                                            <th></th>
                                            <th></th>
                                            <th>Field 6</th>
                                            <th>Field 7</th>
                                            <th>Field 8</th>
                                            <th>Field 9</th>
                                            <th>Field 10</th>
                                            <th>Field 11</th>
                                            <th>Field 12</th>
                                            <th>Field 13</th>
                                            <th></th>
                                            <th>Field 14</th>
                                            <th>Field 15</th>
                                            <th>Field 16</th>
                                        </tr>
                        <?php
                                        while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
                                            $num = count($data);
                        ?>
                                            <tr <?php if($row==0){echo "style='font-weight:bold; background-color:#CCCCCC'";} else {echo "style='background-color:#DDDDDD'";} ?> style="background-color:#DDDDDD">
                        <?php
                                                for ($c=0; $c < $num; $c++) {
                        ?>
                                                <td><?php echo $data[$c]; ?></td>  
                        <?php
                            }
                        ?>
                                            </tr>
                        <?php

                                        $row++;
                                        }
                                        fclose($handle);
                        ?>
                                        <form method="post" name="add1" id="add1" action="<?php echo base_url();?>index.php/datacast_ctr/write_csv" autocomplete="off">
                                            <tr class="td1" id="td1" >  
                                                <td><input type="text" name="val1" id="val1"/></td>
                                                <td><input type="text" name="val2" id="val2"/></td>
                                                <td><input type="text" name="val3" id="val3"/></td>
                                                <td></td>
                                                <td><input type="text" name="val4" id="val4"/></td>
                                                <td><input type="text" name="val5" id="val5"/></td>
                                                <td></td>
                                                <td></td>
                                                <td><input type="text" name="val6" id="val6"/></td>
                                                <td><input type="text" name="val7" id="val7"/></td>
                                                <td><input type="text" name="val8" id="val8"/></td>
                                                <td><input type="text" name="val9" id="val9"/></td>
                                                <td><input type="text" name="val10" id="val10"/></td>
                                                <td><input type="text" name="val11" id="val11"/></td>
                                                <td><input type="text" name="val12" id="val12"/></td>
                                                <td><input type="text" name="val13" id="val13"/></td>
                                                <td></td>
                                                <td><input type="text" name="val14" id="val14"/></td>
                                                <td><input type="text" name="val15" id="val15"/> </td>
                                                <td><input type="text" name="val16" id="val16"/></td>
                                            </tr>
                                        </form>
                                    </table>
                        <?php
                            }
                        ?>

CONTROLLER(添加新数据EOF的代码)

function write_csv()
{
    $R1 = $this->input->post('val1');
    $R2 = $this->input->post('val2');
    $R3 = $this->input->post('val3');
    $H1 = $this->input->post('valh1');
    $R4 = $this->input->post('val4');
    $R5 = $this->input->post('val5');
    $H2 = $this->input->post('valh2');
    $H3= $this->input->post('valh3');
    $R6 = $this->input->post('val6');
    $R7 = $this->input->post('val7');
    $R8 = $this->input->post('val8');
    $R9 = $this->input->post('val9');
    $R10 = $this->input->post('val10');
    $R11 = $this->input->post('val11');
    $R12 = $this->input->post('val12');
    $R13 = $this->input->post('val13');
    $H4 = $this->input->post('valh4');
    $R14 = $this->input->post('val14');
    $R15 = $this->input->post('val15');
    $R16 = $this->input->post('val16');
    $H5 = $this->input->post('valh5');

    $data = $R1.",".$R2.",".$R3.",".$H1.",".$R4.",".$R5.",".$H2.",".$H3.",".$R6.",".$R7.",".$R8.",".$R9.",".$R10.",".$R11.",".$R12.",".$R13.",".$H4.",".$R14.",".$R15.",".$R16;
    $list = array($data);

    $file = fopen("./bin/pdw_table.csv","a+");

    foreach ($list as $line)
    {
        fputcsv($file,explode(',',$line));
    }

    fclose($file);
    redirect('datacast_ctr');
}

【问题讨论】:

    标签: php html csv


    【解决方案1】:

    AFAIK 你不能这么简单地删除一行。您必须打开文件,逐行读取所有行并将它们放入输出文件中,您要删除的行除外,或者使用this 解决方案。

    如果您想知道如何实现,这取决于您的 csv 文件中的数据。如果您有某种唯一键,则可以添加带有按钮的另一列或任何调用删除函数并传递此键的内容。

    编辑 这是伪代码,因为我目前没有 php 环境。但是像 $文件数据 = ""; $line = "";

    $f = fopen("<filename>", "c+");
    while($line = fgets ($f)){
        if($line != "check here if the line is the one to delete"){
            $data.= $line;
        }
    }
    ftruncate($f,0);
    fputs($f, $data);
    fclose($f);
    

    【讨论】:

    • 感谢您的评论,但我已经在您提供给我的链接上阅读了此答案逐行阅读,并将除匹配行之外的所有行写入另一个文件。然后替换原始文件。 我的问题是如何使用代码而不是手动替换文件?
    • 要将一个文件替换为另一个文件,您只需使用rename。然而,我更愿意首先以读取模式打开文件,将所有内容读取到一个变量中,除了要删除的条目并将所有内容写入文件的开头。
    • 嗨,我已经尝试过您的代码,但它只是截断了 CSV 文件中的数据。
    • 正如我所说,这是显示一般方法的伪代码。加载数据,清除文件并将修改后的数据放回去。哦,我刚刚意识到 fopen() 调用需要一个读/写标志,否则你不能在文件中放任何东西。改用“c+”。我也编辑了答案。
    • 输出是这个ArrayArrayArrayArrayArrayArrayArrayArrayArrayArray。该代码将截断所有数据并替换为Array
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多