правильное обновление строки с использованием PHP - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь использовать форму 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>

Он предназначен для записи каждого ввода в строку, показанную в строке, но это не работает. У меня большой .CSV около 600 строк, и если я не пишу каждую строку между ними, всегда пишет в строку 0 или 1

что я сделал не так?

1 Ответ

1 голос
/ 27 мая 2020

В 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...