[PHP] Logowanie na stronę

0

Witam...pozwoliłem sobie napisać ponieważ jestem bliski załamki:Chciałem w PHP zrobic sobie prosty system rejestracji i logowania.Po długich miesiącach "walki i męczeństwa"udało mi się zapisywać do pliku tekstowego "login : md5(hasło)"..i tyle było mojego szczęścia.Problem polega na tym ,że klikając w przycisk LOGOWANIE nijak nie udaje mi się odczytać tych danych tak aby przenieść logującego się na właściwą stronę.Testowałem różne różniaste kody i jak wydawało mi sie ,ze to już....następował krach.Przykład? prosze bardzo:

function checkPass($login, $pass)
{
if(!$fd = @fopen("passwords.txt", "r")) return false;
while (!feof ($fd)) {
$line = trim(fgets($fd));
if(($pos = strpos($line, ":"))===false) continue;

     $tempUser = substr($line, 0, $pos);
     if($tempUser != $login) continue;

     $tempPass = substr($line, $pos + 1, strlen($line) - $pos);

     if($tempPass != md5($pass)) continue;
     else return true;

}
fclose($fd);
return false;
}
if(!checkPass($login, $pass)){
echo("<HTML><BODY><CENTER>");
echo("<H2>Niepoprawne dane!</H2>");
echo("</CENTER></BODY></HTML>");
}
else{
include('index1.html');
}

Czego bym nie wyczyniał z tym kodem ,nawet wpisując wszystko poprawnieZAWSZE wywala mi: "Niepoprawne dane!" Zakładając ,że nie jestem (chociaż można by się kłócić) skończonym debilem a początkującym PHPpowcem po prostu juz nie mam pojęcia co robić.Byłbym wdzieczny za jakakolwiek pomoc!!!

0

po prostu debuguj, wstaw np przed:

     if($tempPass != md5($pass)) continue;

linijki

echo "$tempPass
\r\n";
echo md5($pass)."
\r\n";
echo $tempPass == md5($pass) ? 'warunek się spełni' : 'warunek nie spełniony, jeśli widzisz identyczne dane to może gdzieś jest np spacja ...';

bardzo trudno wpaść na to że hasła mogłybyć w passwords.txt ... no ale tak rzucając okiem na skrypt to wydaje mi się że to:

function checkPass($login, $pass)
{
  if(!$fd = @fopen("passwords.txt", "r")) return false;
  while (!feof ($fd)) {
         $line = trim(fgets($fd));
         if(($pos = strpos($line, ":"))===false) continue;

         $tempUser = substr($line, 0, $pos);
         if($tempUser != $login) continue;

         $tempPass = substr($line, $pos + 1, strlen($line) - $pos);

         if($tempPass != md5($pass)) continue;
         else return true;
  }
  fclose($fd);
  return false;
}

można zastąpić:

function checkPass($login, $pass){
  $plik = @file('passwords.txt');
  $logins = Array();
  foreach($plik as $w){
    $lp = explode(':', chop($w));
    $logins[$lp[0]] = $lp[1];
  }
  return (isset($logins[$login])) ? ($logins[$login] == md5($pass)) : false;
}

trochę czytelniej będzie, albo jak checkPass jest kilka razy wywoływane to np na początku skryptu dać (albo includować):

$plik = @file('passwords.txt');
$logins = Array();
foreach($plik as $w){
  $lp = explode(':', chop($w));
  $logins[$lp[0]] = $lp[1];
}

a checkpass by wyglądał wtedy tak:

function checkPass($login, $pass){
  global $logins;
  return (isset($logins[$login])) ? (strtolower($logins[$login]) == strtolower(md5($pass))) : false;
}

ale ogólnie nie wiem po co to piszę - skąd bierzesz $login i $pass ? czy może ci chodzi o $_POST['login'] albo $_SESSION['login'] ? :>

0

Tutaj widziałem też opis prostego sposobu logowania się na stronie

http://uslugiinformatyczne.net.pl/programowanie/logowanie.php

1 użytkowników online, w tym zalogowanych: 0, gości: 1