我有一个带有用户名和显示名的文件存储在其中:
testname=displayname<br>
testname2=displayname2<br>
etc=etc<br>
此列表在同一文件,相同的用户名和相同的显示名上完成两次。我需要在列表中的两个区域替换它们(需要更换两次)
我正在尝试创建一个用户可以更改其显示名称的表单。我试图从一个页面中复制我的代码,在该页面中,它在文件中查找其帐户的密码,找到它并替换它,但它似乎并不适用于此文件。
更改名称的表单很简单,它们会输入成员名称(因此我可以使用它来让它在列表中找到他们的名字),然后使用他们输入的内容来更改显示名称文件中的名称。
表单页码:
<center>Change Display Name:<p>
<form action="http://example.com/xxx/displaynamesave.php" class="form" method="post">
<input "membername" name="membername" /><p><input "displayname" name="displayname" /><p><input name="Submit" type="submit" /></form></p>/center>
及以下是我处理的PHP代码
<?
$fileurl = '/xxx/myfiles/sitename/xxx/memberfiletest';
$membername = $_POST['membername'];
$displayname = $_POST['displayname'];
$file = file($fileurl, FILE_IGNORE_NEW_LINES); // Get file as array of lines
foreach ($file AS $n=>$line)
if (substr($line, 0, 20) === '$membername') // Line starts with 'membername'
$file[$n] = '$membername = '.$displayname; // Replace displayname
file_put_contents($fileurl, implode("\n", $file)); // Put file back together
$success_page = 'http://example.com/thisplace/xxx/xxx/successredirector.html';
header('Location: '.$success_page);
?>
当我输入数据并点击提交时,它会转到我的成功页面,但是它没有对正确的文件进行任何更改,我不确定如何判断我错过了什么
答案 0 :(得分:3)
首先,您的比较显示单引号'
中的变量,这意味着PHP不会解析它,实际上是将所有内容与 $ membername 进行比较,而不是变量$membername
。将比较更改为:
foreach ($file as $n => $line) {
if (substr($line, 0, 20) === $membername) { // Line starts with 'membername'
$file[$n] = $membername . ' = ' . $displayname; // Replace displayname
}
}
其次,在您文件内容的示例中,“用户名”部分的长度不一样(“testname”,“etc”),但您的比较是检查该行的前20个字符。如果格式确实是username=displayname
,那么你可能会有更好的结果来分割=
上的一行(当然有几种方法可以做到这一点),并比较第一部分。一个例子是:
foreach ($file as $n => $line) {
$parts = explode('=', $line);
if ($parts[0] == $membername) {
$file[$n] = $membername . ' = ' . $displayname;
}
}
答案 1 :(得分:0)
您在'
内使用变量。试试这个:
foreach ($file as $n => $line) {
list($name, $dname) = explode('=', trim($line));
if ($name === $membername) { // Line starts with 'membername'
$file[$n] = $membername . ' = ' . $displayname; // Replace displayname
}
}
答案 2 :(得分:0)
使用strpos
foreach ($file as $n => $line) {
if (strpos($line, $membername) === 0) { // Line starts with 'membername'
$file[$n] = $membername . ' = ' . $displayname; // Replace displayname
}
}