读取文本文件并在php中更新值

时间:2015-12-11 04:21:00

标签: php forms text-files

我正在创建一个网页,用户可以在其中登录,然后编辑表单中有关自己的信息。我从一个由"分隔的文本文件中读取要插入到表单中的数据:"我无法让文件编辑现有值。

    <form name="edit" action="info.php" method="get">
    First name: <input type="text" name="firstName" value="<?php echo $arr[2]; ?>"><br>
    Last name: <input type="text" name="lastName" value="<?php echo $arr[3]; ?>"><br>
    Background color: <input type="text" name="bgcolor" value="<?php echo $arr[4]; ?>"><br>
    Title: <input type="text" name="title" value="<?php echo $arr[5]; ?>"><br>
    Image: <input type="text" name="bgimg" value="<?php echo $arr[6]; ?>"><br>
    <input type="hidden" name="editUpdate" value="true">
    <input type="submit" name="test" value="Edit account info" />
    </html>
    <?php
    }
    if (isset($_REQUEST['editUpdate'])) {
    $open = fopen('account-info.txt', "r+");
    $firstName = $_REQUEST['firstName'];
    $lastName = $_REQUEST['lastName'];
    $bgcolor = $_REQUEST['bgcolor'];
    $title = $_REQUEST['title'];
    $bgimg = $_REQUEST['bgimg'];
    fwrite($open, $firstName, $lastName, $bgcolor, $title, $bgimg);
    fclose($open);
    $login = true;
    }

2 个答案:

答案 0 :(得分:1)

确保字段没有哨兵值

验证所有输入始终。在这种情况下,使用htmlentities函数删除任何HTML标记,并防止您在存储中使用的标记值(:)位于任何字段中。

<强>锁定

您需要获取互斥锁,信号量或锁定。每次写入文件时都应使用此锁(新用户或用户更新)。不这样做会导致竞争条件。

有许多不同类型的锁,但PHP为flock函数提供了一个非常简单的接口:https://secure.php.net/manual/en/function.flock.php

<强>读取

然后,您需要打开文件进行读取。 将所有用户读入多维数组:

 $users = file_get_contents ('account-info.txt');
 $users = explode('\n',$users);
 for($user_index = 0;count(users) > $user_index;++$user_index)
 {
   $users[$user_index] = explode(':',$users);
 }

更新阵列

您需要找到要更新的正确记录。这可能需要另一个字段,用户ID号或用户名不能更改;或者,坚持他们的旧名和姓。我把它留给你弄清楚。

将数组写回文件 循环遍历数组并将它们全部写回。

$fp = fopen('account-info.txt', "w+");
foreach($users as $user)
{
  foreach($user as field)
  {
    fwrite($fp,$field . ':');
  }
  fwrite($fp,"\n");
}
close($fp);

解锁

以与获取它们相反的顺序释放任何和所有互斥锁,信号量和/或锁,以防止出现死锁情况。

如果您可以选择文件格式,那么PHP有更好的功能来读取和编写序列化文件,json,CSV和XML文件,而不是滚动自己的文件。

答案 1 :(得分:0)

尝试

$open = fopen('account-info.txt', "a+");

模式a+将打开文件进行读写;将文件指针放在文件的末尾。如果该文件不存在,请尝试创建它。

有关详细信息,请查看PHP fopen function