PHP,如何只重写/更改外部txt文件中的1行

时间:2019-03-18 08:20:28

标签: php

首先,我知道有一个关于此的主题,但是我不明白它,因此在这种情况下可以使用它。

HTML :(无法更改!)

<form action="index.php" method="get">
    Select voting number:
    <select name="candidate">
        <option value=1 selected>1</option>
        <option value=2>2</option>
        <option value=3>3</option>
        <option value=4>4</option>
        <option value=5>5</option>
    </select>
    <br>
    <input type="submit" value="Submit">
</form>

student.txt:

1|0
2|0
3|0
4|0
5|0

所以任务是,当用户输入数字(1、2、3、4或5)时,应该更改该数字行中txt文件中的行。

示例:用户给定值2 ---> txt文件应如下所示:

1|0
2|1
3|0
4|0
5|0

下一个用户给值5:

1|0
2|1
3|0
4|0
5|1

以此类推...

也index.php应该显示txt文件具有的总投票数,包括用户给出的最新投票数。

2 个答案:

答案 0 :(得分:0)

您可以使用从PHP调用的外部工具(在Linux中为sed等),或者在文件中查找位置,移动文件指针并写入已更改的字节。尽管您突然想在文件中间添加新记录,但根据文件的布局,它可能会变得更加麻烦。

最简单的方法基本上是从文件加载数据,更新数据并将数据再次写入文件。当然,对于小的更新,您可能会写“超出所需的字节数”,但这将非常容易。

答案 1 :(得分:0)

<?php
$userInput = $_GET['candidate'];
$rows = explode(PHP_EOL, file_get_contents('votes.txt'));// Read file content and convert it into array
foreach($rows as $k => $v) {
    $row = explode('|', $v);
    if($userInput === $row[0]) {
        $newTotal = (int)$row[1] + 1;
        $rows[$k] = $row[0] . '|' . $newTotal;

        $rows = implode(PHP_EOL, $rows);// Convert array to string again
        file_put_contents('votes.txt', $rows);// Save changes
        break;
    }
}

我不会发布此答案,但我知道有时学校会给作业,却什么也没解释。不要只是复制粘贴此答案,而是尝试理解代码。拜托。