У меня есть следующий текстовый файл и код 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
Есть два решения благодаря 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';
}
?>
Других решений пока нет …