Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с файлом txt функция file()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Из файла берутся значения в массив но они не верные
tuktukvlad
Отправлено: 12 Февраля, 2017 - 22:02:36
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




При проверке логинов и паролей из файла txt, использую функцию file(), ну никак не получается пройти авторизацию... Неверный логин или пароль... если файл не подключаю, то всё работает, как только данные из файла так всё не сходится, причём если логин и пароль числовые, то всё работает!.. Я так понимаю проблема в кодировке.. Но все файлы в одной кодировке.. Может кто знает, в чём проблема? Это уже принципиально разобраться с этим, голову себе сломал
Прикреплено изображение (Нажмите для увеличения)
Снимок.PNG
 
 Top
tuktukvlad
Отправлено: 12 Февраля, 2017 - 22:05:20
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Вот код и файл txt
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function auth($login="",$password="") {
  4.     $base_user = file('user.txt');
  5.     //вывод массива из файла
  6.     print_r($base_user);
  7.  
  8.     for ($i=0; $i < count($base_user) ; $i++) {
  9.         $info = explode(";",$base_user[$i]);
  10.         if ($info[0] == $login && $password == $info[1]) {
  11.             return true;
  12.         }
  13.     }
  14.     return false;
  15. }
  16. //Выполнение функции
  17. if (auth('Vlad','123') ) {
  18.     echo "<strong>Успех!</strong>";
  19. }
  20. else {
  21.     echo "<strong>Ошибка!</strong>";
  22. }
  23. ?>
  24.  
  25.  

Скачать файл: user.txt
Скачан раз: 52


Отредактировано модератором: Строитель, 12 Февраля, 2017 - 22:10:41
 
 Top
Строитель Модератор
Отправлено: 12 Февраля, 2017 - 22:07:39
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




tuktukvlad, если вы уверены в кодировке, тогда допишите в file() пару констант:

PHP:
скопировать код в буфер обмена
  1. file('user.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)

(Добавление)
tuktukvlad, или лучше организовать поиск в массиве посредством регулярного выражения
Спойлер (Отобразить)
 
 Top
tuktukvlad
Отправлено: 13 Февраля, 2017 - 08:30:30
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Строитель
Спасибо за ответы! Второй вариант с поиском в массиве работает отлично!

А вот с добавлением констант в file() не совсем верно.
Почему-то не срабатывает логин с маленькой буквы.. с заглавной работает.. в файле есть и тот и тот.

Вот хотелось бы понять в чём всё таки проблема..
 
 Top
OrmaJever Модератор
Отправлено: 13 Февраля, 2017 - 12:40:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




tuktukvlad запомните раз и навсегда, функция file() в массив добавляет \n в конце каждой строки (символ переноса строки).
Если вы выведете

вы это увидите. Поэтому у вас получается
$user == Vlad, а пароль 123\n, поэтому его и не находит, надо использовать trim для каждой строки


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
tuktukvlad
Отправлено: 13 Февраля, 2017 - 18:25:05
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




OrmaJever спасибо!
От переноса строки нас избавляют либо константы FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES либо функция trim(), это всё верно.

НО! Остаётся ещё один момент с которым не смог разобраться.
Самая первая строка файла, при выводе в массив имеет на 3 символа больше, без учёта переноса строки, никакой trim и константы не избавляют от этого..

Как только эта же строка становится второй, то с ней всё отлично, проблема именно с первой строкой..
Буду признателен, если объясните в чём здесь дело
Прикреплено изображение (Нажмите для увеличения)
Снимок.PNG
 
 Top
tuktukvlad
Отправлено: 13 Февраля, 2017 - 18:26:18
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Второй скрин, когда этаже строка уже вторая
Прикреплено изображение (Нажмите для увеличения)
Снимок2.PNG
 
 Top
Строитель Модератор
Отправлено: 13 Февраля, 2017 - 18:28:52
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




tuktukvlad пишет:
Самая первая строка файла, при выводе в массив имеет на 3 символа больше, без учёта переноса строки, никакой trim и константы не избавляют от этого..
Это потому, что ваш текстовый файл имеет кодировку UTF-8 с меткой BOM. Эта метка как раз и состоит из трёх байт. Преобразуйте ваш текст. файл в UTF-8, и вопрос будет закрыт.
 
 Top
tuktukvlad
Отправлено: 13 Февраля, 2017 - 18:32:16
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2017  


Помог: 0 раз(а)




Строитель
Спасибо большое!
Да, дело в кодировке с BOM
Всем спасибо за ответы!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB