Замените определенную строку в текстовом файле, используя php, сохраняя при этом остальную часть файла

У меня есть следующий текстовый файл и код PHP, текстовый файл содержит несколько незначительных переменных, и я хотел бы иметь возможность обновлять определенные переменные из формы.

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

Текстовый файл:

Title
Headline
Subheadline
extra 1
extra 2

PHP-код:

<?php
session_start();
// Get text file contents as array of lines
$filepath = '../path/file.txt';
$txt = file($filepath);
// Check post
if (isset($_POST["input"]) &&
isset($_POST["hidden"])) {
// Line to edit is hidden input
$line = $_POST['hidden'];
$update = $_POST['input'];
// Make the change to line in array
$txt[$line] = $update;
// Put the lines back together, and write back into text file
file_put_contents($filepath, implode("\n", $txt));
//success code
echo 'success';
} else {
echo 'error';
}
?>

Текстовый файл после редактирования:

Title edited
Headline

Subheadline

extra 1

extra 2

Желаемый результат:

Title edited
Headline
Subheadline
extra 1
extra 2

2

Решение

Есть два решения благодаря Cheery и Dagon.

Решение первое

<?php
session_start();
// Get text file contents as array of lines
$filepath = '../path/file.txt';
$txt = file($filepath);
//check post
if (isset($_POST["input"]) &&
isset($_POST["hidden"])) {
$line = $_POST['hidden'];
$update = $_POST['input'] . "\n";
// Make the change to line in array
$txt[$line] = $update;
// Put the lines back together, and write back into txt file
file_put_contents($filepath, implode("", $txt));
//success code
echo 'success';
} else {
echo 'error';
}
?>

Решение второе

<?php
session_start();
// Get text file contents as array of lines
$filepath = '../path/file.txt';
$txt = file($filepath);
// Get file contents as string
$content = file_get_contents($filepath);
//check post
if (isset($_POST["input"]) &&
isset($_POST["hidden"])) {
$line = $_POST['hidden'];
$update = $_POST['input'] . "\n";
// Replace initial string (from $txt array) with $update in $content
$newcontent = str_replace($txt[$line], $update, $content);
file_put_contents($filepath, $newcontent);
//success code
echo 'success';
} else {
echo 'error';
}
?>
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]