简体   繁体   English

使用HTML表格删除CSV文件中的特定行

[英]Delete specific row in CSV file using HTML Table

I have a HTML table and i use PHP .. the data inside the table is came from an CSV file . 我有一个HTML table ,我使用PHP 。表中的数据来自CSV file

I can already add a new data in a new row at the end of file. 我已经可以在文件末尾的新行中添加新数据。 My problem is, what if i want to delete existing row that is in the middle of the data in the CSV file. 我的问题是,如果我想删除CSV文件中数据中间的现有行怎么办? How can i do that? 我怎样才能做到这一点? By the way i don't use any database here. 顺便说一句,我在这里不使用任何数据库。 I just use HTML Table and CSV file . 我只使用HTML TableCSV file Below is my code in viewing CSV and adding new data. 下面是我查看CSV和添加新数据的代码。

View 视图

<?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 (code for adding new data EOF) 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');
}

AFAIK you can't just delete one line that easy. 抱歉,您不能只删除一行那么简单。 You have to either open the file, read all lines one after another and put them into the output file except the one you want to delete or use this solution. 您必须打开文件,一个接一个地读取所有行,然后将它们放到输出文件中,但要删除的行除外或使用解决方案。

If you want to know how to implement this, it depends on the data in your csv file. 如果您想知道如何实现此功能,则取决于csv文件中的数据。 If you have some sort of unique key you can add another column with a button or anything that calls the delete function passing this key. 如果您有某种唯一键,则可以添加带有按钮的其他列,或者添加任何调用传递此键的delete函数的东西。

EDIT This is pseudo code as i don't have a php environment here at the moment. 编辑这是伪代码,因为我目前在这里没有php环境。 But something like $filedata = ""; 但是类似$ filedata =“”; $line = ""; $ 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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM