запись в CSV с помощью fgetcsv - PullRequest
0 голосов
/ 22 декабря 2011

У меня возникли проблемы с моим кодом PHP. В основном у меня есть список людей в CSV, и я читаю этот файл в таблицу, используя fgetcsv. Я пытаюсь сделать так, чтобы их имена отображались как ссылка, они нажимают на ссылку, она вызывает fputcsv и ставит 1 рядом с их именем.

В настоящее время у меня работает только часть отображения. Я не совсем уверен, с чего начать написание части.

Любое понимание будет с благодарностью.

Спасибо большое !!

  <?php
  $row = 1;
  $handle = fopen("test/list.csv", "r");
  echo("<table>");
  while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
      echo("<tr>\r\n");
      foreach ($data as $index=>$val) {
              echo("\t<td><a href=\"#\">$val</a></td>\r\n");
      }
      echo("</tr>\r\n");
  }
  echo("</table>");
  fclose($handle);
  ?>

1 Ответ

2 голосов
/ 22 декабря 2011

Вы не можете напрямую обращаться с CSV-файлом как с базой данных.Вам нужно было бы указать, из какой строки пришла кликаемая строка в исходном CSV-файле.Либо по номеру строки, либо (желательно) по некоторому уникальному полю идентификатора в каждой строке.

Я сделаю вид, что столбец 0 файла csv является уникальным идентификатором для строки, поэтому вы должны иметь это для выхода:

  foreach ($data as $index=>$val) {
          echo("\t<td><a href=\"update.php?id={$data[0]}\">$val</a></td>\r\n");
  }

А затем в скрипте update.php в базовом псевдо-коде:

<?php
$id = $GET['id'];

$fh = fopen('test/list.csv', 'rb');
$out = fopen('newlist.csv'', 'wb');
while($row = fgetcsv($fh)) {
   if ($row[0] == $id) {
       $row[xxx] = 1; // write '1' for this row because it's the row that was clicked on
   }
   fputcsv($out, $row); // write out to new file
}

Обратите внимание, что я использую второй файл для измененного вывода.это безопаснее, чем пытаться редактировать исходный CSV на месте.После внесения необходимых изменений вы просто перемещаете новый файл поверх старого, и ваши изменения завершены.

...