советую в цикл 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, а просто обратиться к массиву по индексу.