Нужна помощь в написании и чтении файла с помощью PHP - PullRequest
1 голос
/ 26 мая 2019

Итак, для задания мне нужно создать форму, где пользователи смогут публиковать акции, чтобы другие люди могли видеть их и присоединяться к ним.Я делаю это, записывая форму в файл data.txt и читая файл, чтобы отобразить все аттракционы на доске.Моя единственная проблема - когда я получаю содержимое data.txt, все это объединяется вместе.Мне нужно иметь возможность отображать каждую поездку отдельно.Как бы я поступил так?

Вот мой код до сих пор: Запись:

if (isset($_POST['name'])
              && isset($_POST['email'])
              && isset($_POST['date'])
              && isset($_POST['destination'])
              && isset($_POST['msg'])) {
          $name = $_POST['name'];
          $email = $_POST['email'];
          $date = $_POST['date'];
          $destination = $_POST['destination'];
          $msg = $_POST['msg'];

          //TODO the file write here VV, use 'a' instead of 'w' too ADD to the file instead of REWRITING IT.
          $arr = [$name,$email,$date,$destination,$msg];

          $write = json_encode($arr);
          $file = fopen('data.txt', 'a');
          fwrite($file, $write);
          fclose($file);
      }

И чтение:

  $path = 'data.txt';
          $handle = fopen($path, 'r');
          $contents = fread($handle, filesize($path));
          echo $contents;
          fclose($handle);

          $newarr = [json_decode($contents)];

          foreach($newarr as $stuff)
          {
            echo $stuff[0];
          }

И на выходе получается что-то вроде:

["Simon Long","example@gmail.com","2109-01-01T01:01","canada","this is a message"] Simon Long

Допустим, там есть несколько сообщений, они просто распечатали бы их все вместе.Мне нужен способ разделять сообщения, чтобы я мог красиво отображать их на доске.

1 Ответ

1 голос
/ 26 мая 2019

Использовать многомерный массив.

$arr = [
    "Simon Long","example@gmail.com","2109-01-01T01:01","canada","this is a message",
    "John Doe","john@gmail.com","2109-01-01T01:01","canada","this is a message",
    "Jane Doe","jane@gmail.com","2109-01-01T01:01","canada","this is a message"
];

Тогда вы при добавлении к нему просто добавляете в окончательный массив и заменяете весь файл.

$contents = file_get_contents($path);
$decoded = json_decode($contents);
$decoded[] = [$name,$email,$date,$destination,$msg];
file_put_contents($path, json_encode($decoded)); //replace the entire file.

Также как примечание. isset принимает несколько аргументов, поэтому вам не нужно использовать их как есть. Вы можете сделать это:

if (isset($_POST['name'], $_POST['email'], $_POST['date'], $_POST['destination'] ...)

Это также хорошая идея для очистки любого ввода от пользователя.

$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);

...