Подтвердить что ты не робот

Ошибка чтения текстового файла в php

У меня есть файл, который мне нужно импортировать в базу данных. (Моя база данных хороша, я могу подключиться, и я могу добавить). Теперь моя проблема почему-то не вставлена.

У меня есть файл schooldatabase.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'));

Почему он возвращает "принято", если этого пользователя нет в файле?

4b9b3361

Ответ 1

Я думаю, что здесь вы должны подумать о своем процессе. Я предполагаю, что вы "processUser" более одного раза, поэтому вы будете открывать/читать/закрывать один и тот же файл снова и снова, не изменяя этот файл.

Поскольку файл не является огромным (и я предполагаю, что он один раз - script), просто откройте файл в памяти при запуске script, после чего вы сможете сравнить все значения, которые вы тестируете с этим файлом.

Вы можете использовать функцию file для этого. Затем вы можете проверить, существует ли пользователь с помощью in_array.

Здесь script:

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

Я думаю, что вы немного скомпрометируете if - это либо true, либо false, поэтому нет необходимости проверять, что stristr дважды! Кроме того, у вас может быть ваше истинное/ложное смешение.

Edit: Кроме того, вероятно, это будет stripos, который вернет позицию или false.

Попробуйте...

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

... это работает?