首页 > 解决方案 > 使用 PHP 正确更新行

问题描述

我正在尝试使用 html 表单和 PHP 来更新 .csv 文件中的条目,但由于某种原因,它仅适用于第一个条目。

如果我尝试写入另一行,它只会写入第二行(第一个条目。

这是PHP

    <?php
$msg= ' Information Updated';

if (isset($_POST['rows'])) {

    $fp = fopen('./contact.csv', 'r+');
    foreach ($_POST['rows'] as $row) {
        fputcsv($fp, array_values($row));
    }
    rewind($fp);
    $csv = '';
    while (($row = fgets($fp)) !== false) {
            $csv .= $row;
        }
    fclose($fp);

    echo $csv;
    echo $msg;
    exit;

}

?>

这是 HTML

<form method="post">
    <hr/>
    <input type="hidden" type="text" value="id" name="rows[0][]" />
    <input type="text" value="firstname" name="rows[0][]"/>
    <input type="text" value="lastname" name="rows[0][]"/>
    <input type="submit" />
</form>

这意味着将每个输入写入行中显示的行,但它不起作用。我有一个大约 600 行的大 .CSV,除非我写中间的每一行,否则它总是写入第 0 行或第 1 行

我做错了什么?

标签: phpformscsv

解决方案


在 html 中,将数组展平就足够了

<form method="post">
    <hr/>
    <input type="hidden" type="text" value="id" name="rows[]" />
    <input type="text" value="firstname" name="rows[]"/>
    <input type="text" value="lastname" name="rows[]"/>
    <input type="submit" />
</form>

在 PHP 中不需要

  • 使用 r+ 参数打开文件(将指针移动到开头),
  • 将文件指针倒回到文件末尾
  • 在csv中添加行
  • 然后做一些难以理解的事情

只是

<?php
$msg = ' Information Updated';

if ( isset( $_POST['rows'] ) ) {
    $fp = fopen( './contact.csv', 'a+' );
    fputcsv( $fp, array_values( $_POST['rows'] ) );
    fclose( $fp );
    echo $msg;
    exit;
}

推荐阅读