Создать ответ 
Проверка логина и пароля из файла txt
Автор Сообщение
max16 Не на форуме
Ефрейтор
*

Сообщений: 19
У нас с: Feb 2016
Сообщение: #1
Проверка логина и пароля из файла txt
Добрый день!
Я записал на PHP в файл данные логина, пароля, а также иные данные из формы регистрации. Теперь при авторизации и нажатии кнопки Login мне нужно проверить входные данные на правильность, а также при успешном входе вывести остальные сохраненные данные пользователя и кнопку Logout.
Я пишу путь к файлу, создаю временный массив и, используя функции explode и foreach, пытаюсь получить доступ к файлу чтобы пройтись и найти именованные входные данные, но выходит сообщение (заранее написанное по логике проверки), что пользователя нет, хотя его логин и пароль сохранены в файле. Прошу совета что требуется исправить, если можно пример.
Заранее благодарю!
25.03.2016 19:48:21
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #2
RE: Проверка логина и пароля из файла txt
Нужен код, иначе как тут советовать, может ошибка или опечатка где-то закрались.

Да и вообще хранить логины и пароли в явном виде не лучший вариант. Лучше хранить md5 сумму пароля и обязательно доступ к файлу должен быть запрещен для всех через .htaccess.

Так же следует учитывать, что при работе с файлами нужно будет делать принудительную блокировку для исключения вероятности потери данных (может произойти при одновременной записи в один файл сразу двумя процессами).
25.03.2016 19:57:47
Найти все сообщения Цитировать это сообщение
max16 Не на форуме
Ефрейтор
*

Сообщений: 19
У нас с: Feb 2016
Сообщение: #3
RE: Проверка логина и пароля из файла txt
(25.03.2016 19:57:47)Admin писал(а):  Нужен код, иначе как тут советовать, может ошибка или опечатка где-то закрались.

Да и вообще хранить логины и пароли в явном виде не лучший вариант. Лучше хранить md5 сумму пароля и обязательно доступ к файлу должен быть запрещен для всех через .htaccess.

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

Вот код:

PHP код:
$db_name="text1.txt";
  
$arr=file($db_name);
  
$i 0
    
$reg = array(); 
    foreach(
$arr as $line
    { 
      
$data explode("::",$line); 

      
$reg['login'][$i]     = $data[0]; 
      
$reg['password'][$i] = $data[1]; 
      
$reg['email'][$i]    = $data[2]; 
      
$reg['age'][$i]    = $data[3];
      
$reg['name'][$i]      = trim($data[4]); 
      
$i++; 
    } 
    if(!
in_array($_POST['login'],$reg['login'])) 
    { 
      exit(
"Пользователь с таким именем не зарегистрирован"); 
    } 
   
    
$index array_search($_POST[''],$reg['name']); 
    if(
$_POST['passw'] != $reg['password'][$index]) 
    { 
      exit(
"Пароль не соответствует логину"); 
    } 
    
    echo 
"Добро пожаловать.<br />"
25.03.2016 20:06:19
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #4
RE: Проверка логина и пароля из файла txt
Заменил
PHP код:
$index array_search($_POST[''],$reg['name']); 
на
PHP код:
$index array_search($_POST['login'],$reg['login']); 

И все заработало.
25.03.2016 20:24:07
Найти все сообщения Цитировать это сообщение
max16 Не на форуме
Ефрейтор
*

Сообщений: 19
У нас с: Feb 2016
Сообщение: #5
RE: Проверка логина и пароля из файла txt
Спасибо! Точно, все заработало.

Еще вашим опытным взглядом не посмотрите. Мне нужно, чтобы формы регистрации и авторизации были на одной странице. Я их так и пытаюсь сделать, но при регистрации срабатывает обработчик логина. Понимаю, что последовательность выполнения программы и имена полей массива (их я тоже ставил разными в формах) могут быть причиной, но так и не понял почему при регистрации отрабатывает верхний скрипт и выводиться "Пользователь с таким именем не зарегистрирован" и запись в файл соответственно не идет.
PHP код:
<?php
  
  $filename 
"text.txt";  
   
  if(empty(
$_POST)) 
  { 
    
?> 
    <table> 
      <form method=post> 
      <tr> 
        <td>Name:</td> 
        <td><input type=text name=name></td> 
      </tr> 
      <tr> 
        <td>Password:</td> 
        <td><input type=password name=pass></td> 
      </tr> 
      <tr> 
        <td>&nbsp;</td> 
        <td><input type=submit value='Enter'></td> 
      </tr> 
      </form> 
   </table> 
   <?php 
  

  else 
  { 
    
$arr file($filename); 
    
$i 0
    
$reg = array(); 
    foreach(
$arr as $line
    { 
      
      
$data explode("::",$line); 
     
      
$reg['name'][$i]     = $data[0]; 
      
$reg['passw'][$i] = $data[1]; 
      
$reg['email'][$i]    = $data[2]; 
      
$reg['url'][$i]      = trim($data[3]);  
      
$i++; 
    } 
    if(!
in_array($_POST['name'],$reg['name'])) 
    { 
      exit(
"Пользователь с таким именем не зарегистрирован"); 
    } 
    
    
$index array_search($_POST['login'],$reg['login']); 
    if(
$_POST['passw'] != $temp['password'][$index]) 
    { 
      exit(
"Пароль не соответствует логину"); 
    } 
  
    echo 
"Вы вошли!<br />"
    include 
"registration2.php"
    
?> 
    <table> 
      <form method=post> 
        <input type=hidden name=name 
         value='<?= htmlspecialchars($temp['name'][$index]); ?>'> 
        <input type=hidden name=pass 
         value='<?= htmlspecialchars($temp['password'][$index]); ?>'> 
        <input type=hidden name=edit value=edit> 
      <tr> 
        <td>Пароль:</td> 
        <td><input type=password name=passw 
         value='<?= htmlspecialchars($temp['password'][$index]); ?>'> 
        </td> 
      </tr> 
      <tr> 
        <td>E-mail:</td> 
        <td><input type=text name=email 
             value=<?= htmlspecialchars($temp['email'][$index]); ?>></td> 
      </tr> 
      <tr> 
        <td>URL:</td> 
        <td><input type=text name=url 
             value=<?= htmlspecialchars($temp['url'][$index]); ?>></td> 
      </tr> 
      <tr> 
        <td>&nbsp;</td> 
        <td><input type=submit value='Редактировать'></td> 
      </tr> 
      </form> 
    </table> 
<?php 
  


?>
<hr>
<h3>Otherwise fill out the registration form below:</h3>
<form action="" method="POST">
Last name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E-mail:<br>
 <input id="inp1" type=text name=lastname value="">&nbsp;&nbsp;&nbsp;
 <input type=text name=email value="">
 <br><br>
Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Login:<br>
 <input id="inp2" type=text name=name value="">&nbsp;&nbsp;&nbsp;
 <input type=text name=login value="">
 <br><br>
Age:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Password:<br>
 <input id="inp3" type=text name=age value="">&nbsp;&nbsp;&nbsp;
 <input type=password name=passw value="">
 <br><br>
 
 <input type=reset value="Reset">&nbsp;&nbsp;&nbsp;
 <input type=hidden name=name value="">
 <input type=submit value="Register"><br>
</form>
<?php

  
  
if(empty($_POST['name'])) exit(); 
  
// Проверяем правильно ли заполнены обязательные поля 
  
if(empty($_POST['lastname'])) exit('Фамилия не заполнена');
  if(empty(
$_POST['name'])) exit('Имя не заполнено'); 
  if(empty(
$_POST['login'])) exit('Логин не заполнен'); 
  if(empty(
$_POST['passw'])) exit('Пароль не заполнен'); 
  if(empty(
$_POST['age'])) exit('Возраст не заполнен'); 
 
  if(!empty(
$_POST['email'])) 
  { 
    if(!
preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i"$_POST['email'])) 
    { 
      exit(
'E-mail должен быть написан в следующем формате somebody@somewhere.ru'); 
    } 
  } 

 
  
$filename "text.txt";  
  
  
$arr file($filename); 
  foreach(
$arr as $line
  { 
    
$data explode("::",$line); 
    
$reg[] = $data[0]; 
  } 
  if(
in_array($_POST['name'], $reg)) 
  { 
    exit(
"Это имя существует, выберите другое"); 
  } 

 
  
$fd fopen($filename"a"); 
  if(!
$fd) exit("Ошибка при открытии файла данных"); 
  
$str $_POST['lastname']."::".
         
$_POST['name']."::".
         
$_POST['age']."::".
         
$_POST['login']."::".    
         
$_POST['passw']."::".  
         
$_POST['email']."\r\n"
  
fwrite($fd,$str); 
  
fclose($fd); 
 
  echo 
"<HTML><HEAD> 
         <META HTTP-EQUIV='Refresh' CONTENT='0; URL=
$_SERVER[PHP_SELF]'> 
        </HEAD></HTML>"
;

?>
27.03.2016 00:23:58
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #6
RE: Проверка логина и пароля из файла txt
Замените в самом начале кода: if(empty($_POST)) на if(empty($_POST['name'])). Иначе при отправке любых данных будет отрабатывать верхний код.

А в середине кода: if(empty($_POST['name'])) exit(); на if(empty($_POST['passw'])) exit();. Т.к. у Вас в обеих формах присутствуют одинаковые поля с именем name.

P.S. И желательно избавьтесь от использования &nbsp;. Сделайте как предыдущие формы в виде таблицы.
27.03.2016 14:17:51
Найти все сообщения Цитировать это сообщение
max16 Не на форуме
Ефрейтор
*

Сообщений: 19
У нас с: Feb 2016
Сообщение: #7
RE: Проверка логина и пароля из файла txt
Спасибо, еще раз! Все понял, работает.
28.03.2016 21:22:22
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru