在 php 中读取文本文件时出错

2022-08-30 19:04:30

我有一个需要导入数据库的文件。(我的数据库很好,我可以连接,我可以添加)。现在我的问题是由于某种原因没有插入任何东西。

我有一个文件学校数据库.txt需要添加到数据库中的用户/密码。该文件有 200 行。

下面是一个示例:

test|098f6bcd4621d373cade4e832627b4f6
test2|ad0234829205b9033196ba818f7a872b

现在,对于这些行中的每一行(学生用户名和密码),我必须将它们插入到数据库中。

这是我的代码:

function addUser($user,$pass) {
// this code is good
}

function processUser($user,$pass) {
  $pass=md5($pass);
  $myFile = "schooldatabase.txt";
  $fh = fopen($myFile, 'r');
  $theData = fread($fh, 5);
  $login = "$user|$pass";
  if(stristr($theData,$login) !== false){
      $result = "rejected";
  }
  elseif(stristr($theData,$login) !== true){
      addUser($user,$pass); // this work I manuall tested
      $result = "accepted";
   }
   fclose($fh);
   return $result;
}
var_dump(processUser('invaliduser','test2'));

如果该用户不在文件中,为什么返回“已接受”?


答案 1

我认为在这里你应该重新考虑你的过程。我假设您多次“processUser”,因此您将一遍又一遍地打开/读取/关闭同一文件而不更改该文件。

因为文件并不大(我假设它是一次性脚本),只需在启动脚本时在内存中打开文件,就可以将正在测试的所有值与该文件进行比较。

您可以使用函数文件来执行此操作。然后,您可以使用in_array检查用户是否存在。

下面是脚本:

function addUser($user,$pass) {
// this code is good
}

$file = file("schooldatabase.txt", FILE_IGNORE_NEW_LINES ^ FILE_SKIP_EMPTY_LINES);

function processUser($user,$pass, array &$file) {
  $pass = md5($pass);
  if(in_array("$user|$pass", $file)) {
    addUser($user,$pass); // do you check if the query is good?
    return 'accepted';
  } 
  return "rejected";
}

var_dump(processUser('invaliduser','test2', $file));

答案 2

我认为你把事情搞得太复杂了——它要么是真的,要么是假的,所以没有必要检查两次!另外,你可能会混淆你的真/假。ifstristr

编辑:另外,它可能应该是 stripos,这将返回位置或 false。

尝试。。。

if(stripos($theData,$login) === false){
    $result = "rejected";
} else {
    addUser($user,$pass); // this work I manuall tested
    $result = "accepted";
}

...这行得通吗?


推荐