Показать сообщение отдельно

  #7  
Старый 04.11.2008, 01:46
SleepShadowWeb
Новичок
Регистрация: 02.02.2006
Сообщений: 28
Провел на форуме:
351198

Репутация: 54
По умолчанию

советую в цикл foreach добавить break;
Код:
if($login == $user && $password == $pass) { 
print "Вошли"; 
$good = 1;
break;
}
и ещё:
переменные $good и $bad лучше объявить:
Код:
$f = file("base.php");
$good = 0;
$bad = 0;
и ещё, вот этот код:
Код:
if ($good == 1 && $bad == 1) { 
  } else { 
    print "Облом"; 
  }
в случае, если логин и пароль совпадут с первой строкой в файле и записей в нём будет одна, тогда условие не выполнится! (хотя данные корректны)
В любом случае, наличие переменной $bad в коде не оправдано! Лучше убери.
И следует контролировать длину проверяемых данных (функция substr)

Код:
$f = file("base.php"); 
$good = 0;

if(isset($_POST['login']) && isset($_POST['password'])) 
{ 
  $p_pass = substr($_POST['password'], 0, 10);
  $p_login = substr($_POST['login'], 0, 10);
  foreach($f as $d) { 
    $d = trim($d); 
    list($user, $pass) = split(":", $d); 
    if($p_login == $user && $p_pass == $pass)  {
      $good = 1; 
      break;
 }
}

  if ($good == 1) { 
      print "Вошли"; 
  } else { 
    print "Облом"; 
  }

} else { 
print <<<HERE
......
и ещё в файле base.php аккаунты лучше хранить массивом, а не в текстовом виде, тогда автоматом увеличивается скорость работы скрипта и пропадает угроза безопасеости.
при поиске не нужно будет перебирать все элементы и использовать функцию in_array, а просто обратиться к массиву по индексу.
 
Ответить с цитированием