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


Reading a text file and updating values in php

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

    <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;
    }

确保字段没有sentinel值

始终验证所有输入。在这种情况下,请使用htmlentities函数剥离任何HTML标记,并防止存储中使用的sentinel值(:)出现在任何字段中。

锁定

您需要获取一个互斥、信号量或锁。该锁应在向其写入文件(新用户或用户更新)时使用。不这样做将导致比赛条件。

有很多不同类型的锁,但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文件方面比滚动自己的文件具有更好的功能。

试用

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

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

有关更多详细信息,请参阅PHP fopen函数