从文本文件中删除行的PHP方法

3
我正在尝试列出文本文件中的所有行,并在每一行旁边添加一个删除按钮。当按下该按钮时,该行应被删除。如下所示:
 Line One Text | Delete
 Line Two Text | Delete
 Line Three Text | Delete

我觉得我很接近解决问题,但无法让它正常工作,有什么想法吗?这些行和按钮显示正常,但删除按钮似乎没有任何作用。
edit.php
<?php
$textFile = file("guestbook.txt");
foreach ($textFile as $key => $val) {
    $line = @$line . $val
        . "<input type='submit' name=$key value='Delete'><br />";
}

$form = "<form name='form' method='post' action='deleter.php'> $line 
    </form>";

echo $form;
?>

deleter.php

if ($delete != "" && $delete > !$lines || $delete === '0') {
    $textFile[$delete] = "";
    $fileUpdate = fopen("data.txt", "wb");
    for ($a = 0; $a < $lines; $a++) {
        fwrite($fileUpdate, $textFile[$a]);
    }
    fclose($fileUpdate);
    header("Location:edit.php");
    exit;
}

foreach ($textFile as $key => $val) {
    $line = @$line . $val . "<a href =?delete=$key> Delete </a><br />";
}
echo $line;
?>

Thanks in advance!


可能是重复问题:如何用PHP从文件中删除一行 - Andy Lester
将留言簿存储在文本文件中可能不是一个好主意。如果有两个人同时尝试编辑留言簿,整个文件将需要被锁定,否则您会面临数据损坏的风险。如果我是你,我会使用数据库。大多数php安装都带有MySQL。 - bumperbox
留言簿是一个宽泛的术语,指的是网站所有者上传他们在实体留言簿中收到的评论。 - loveforfire33
2个回答

1
一种方法是通过查询服务器来删除字符串,如果没有行可以等于另一行,例如delete.php?str=<your string>,然后删除该字符串(注意我说的是“字符串”,而不是“行”)。
如果行可以相等,则应标识这些行并采用类似的方法:delete.php?line=<number>
这应该很容易,您可以编写一个灵活的代码,通过传递文件名也可以从给定文件中删除行。
编辑:遵循使用隐藏字段的建议提供示例。
<?php
$html = "<form id='form' method='post' action='delete.php'>";
foreach(array("line 1", "line 2", "line 3") as $key => $value ) {
    $html .= "<span>${value}</span>";
    $html .= "<input type='hidden' name='lineNumber' value='${key}'>";
    $html .= "<input type='submit' value='Delete' name='line'><br>";
}
$html .= "</form>";
echo $html;
?>

在您的delete.php中,获取$_POST['lineNumber']的内容以检索行号。

非常感谢,我现在会尝试一下并回报情况。 - loveforfire33
@loveforfire33 如果你正在使用 JavaScript,你可以动态地改变 action 属性。如果你打算使用它,JQuery 在提交表单和更改 action 属性方面会帮助你很多。只要问我,我很乐意帮忙。 - Sebastian

0
你可以编写一些 JavaScript 代码,循环遍历每个输入框并将每个值附加到一个隐藏的表单字段中。当提交表单时,只需获取该表单字段的值并用该值覆盖文件即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接