Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Логинка. php. (https://forum.antichat.xyz/showthread.php?t=90062)

Ru}{eeZ 01.11.2008 21:44

Логинка. php.
 
Пишу логинку:
PHP код:

<?php

$f 
file("base.php");
print 
$f[0] . "and " $f[1];
foreach(
$f as $d) {
  
$d trim($d);
  list(
$user$pass) = split(":"$d);
}

if(isset(
$login) && isset($password)) {
  if(
$login == $user && $password == $pass) {
    print 
"Вошли";
  } else {
    print 
"Неправильный логин или пароль";
  }
} else {
print <<<HERE
<form method = "post">
Логин: <input type = "text" name = "login"><br />
Пароль: <input type = "text" name = "password"><br />
<input type = "submit" value = "Вход">
</form>

HERE;

}

?>

base.php:
Код:

user:coolpass
luzer:badpass


Почему логинится только по последней строчке?
п.с. спс))

mr.The 01.11.2008 22:02

$user, $pass
перезаписываються при каждом split(). нужно сделать примерно так:
PHP код:

foreach($f as $d) { 
  
$d trim($d); 
  list(
$user$pass) = split(":"$d); 

 if(
$login == $user && $password == $pass) { 
    print 
"Вошли"
    exit;
  } else { 
    print 
"Неправильный логин или пароль"
    exit;
  }


хотя это тоже не самый оптимальный вариант.

eLWAux 01.11.2008 22:03

делай:
Код:

user:coolpass:
luzer:badpass:

и все будет окей)

у меня такая же проблемма била)
просто ти не учитаваеш символа переноса..
user:coolpass<перенос>
и тебе дает пароль:
coolpass<перенос>
вот и несходитса)

d_x 01.11.2008 22:16

mr.The, при первом же неправильном логине и пассе твой скрипт выйдет просто из выполнения, не проверив все.

eLWAux, ты сам пробовал так?) В исходном коде вообще-то trim используется, чтобы переносы убрать, и проблема не в этом.

PHP код:

<?php
$login
=isset($_POST['login']) && !is_array($_POST['login']) ? $_POST['login'] : '';
$pass=isset($_POST['pass']) && !is_array($_POST['pass']) ? $_POST['pass'] : '';
if(
strlen($login)>&& strlen($password)>0

  
$f array_map('rtrim',file("base.php")); 

  foreach(
$f as $d
  { 
    
$tmp=explode(':'$d); 

    if(
$login === $tmp[0] && $password === $tmp[1]) 
      die(
"Вошли"); 
  } 

  die(
'Неправильный логин или пароль.'); 



print <<<HERE
<form method = "post"> 
Логин: <input type = "text" name = "login"><br /> 
Пароль: <input type = "text" name = "password"><br /> 
<input type = "submit" value = "Вход"> 
</form> 
HERE;
?>


mr.The 01.11.2008 22:26

Цитата:

mr.The, при первом же неправильном логине и пассе твой скрипт выйдет просто из выполнения, не проверив все.
ээ... фак. как-то я этот момент пропустил. там можно флаг устанавливать при логине. и потом, после цикла проверять..

[Raz0r] 01.11.2008 22:31

тот же код =)
PHP код:

<?php
$f 
array_map('trim',file("base.php"));
if(
in_array($f,"{$login}:{$password}")) die("Вошли");
else die(
'Неправильный логин или пароль.');
?>


DDoSька 01.11.2008 22:35

Цитата:

Сообщение от [Raz0r]
тот же код =)
PHP код:

<?php
$f 
array_map('trim',file("base.php"));
if(
in_array($f,"{$login}:{$password}")) die("Вошли");
else die(
'Неправильный логин или пароль.');
?>


Ты прав, но если обрезать 80 процентов от скрипта(не считать IF и форму)

eLWAux 02.11.2008 02:28

PHP код:

<? $login='admin';
$pass='adminpass';
$f=file('base.php');
for (
$i=0$i<count($f); $i++)
$a=explode(':',$f[$i]);
 if (
$a[1]==$login && $a[2]==$pass)
 { die(
'yeee'); }
 else
 { die(
'fak('); }

base.php:
Код:

:test:pass:
:admin:adminpass:
:xaxa:xaxaxaax:
:eLWAux:admin:

пробуй..

Ru}{eeZ 02.11.2008 12:28

Ну вот я сделал такую байду:

PHP код:

<?php

$f 
file('base.php');

if(isset(
$login) && isset($password)) {
  foreach(
$f as $d) {
    
$d trim($d);
    list(
$user$pass) = split(":"$d);
    if(
$login == $user && $password == $pass) {
      die(
'Вошли');
    }
  }
    print 
"Неправильный логин или пароль";



} else {
print <<<HERE
<form method = "post">
Логин: <input type = "text" name = "login"><br />
Пароль: <input type = "text" name = "password"><br />
<input type = "submit" value = "Вход">
</form>

HERE;

}
print 
"ы";

?>

Но блин, если использовать die(), то мы завершаем скрипт и остальная часть страницы не выполняется (сдесь это "ы" :D ), без завршения как-нибудь можно обойтись?

Spyder 02.11.2008 13:15

вот кто нить напрямую обратиться к base.php и вся ваша хэк логинка летит мимо
Делай тогда с .htaccess'ом, а то бред)


Время: 14:32