Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]logowanie
Forum PHP.pl > Forum > Przedszkole
Gość_Leon_*
Mam dziwny problem.
Napisałem skrypt logowania.
Loginy i hasła mam w pliku passwords.txt, w stylu login:hasło każde w osobnej linijce.
Wszystko łądnie ale jak sie loguje to zawsze wyskakuje że złe login lub hasło.
Podaję kod.
Wpisywanie danych:
  1. <form name = "logowanie"
  2. action = "administracja/login.php"
  3. methot = "post"
  4. >
  5. Użytkownik:<br><input type="text" name="user"><br>
  6. Hasło:<br><input type="password" name="haslo">
  7. <br><br>
  8. <input type="submit" value="Wejdź">
  9. </form>


Weryfikacja:
  1. <?php
  2. function checkPass($user, $pass)
  3. {
  4. if(!$fd = @fopen("passwords.txt", "r")) return 1;
  5. $result = 2;
  6. while (!feof ($fd)){
  7. $line = trim(fgets($fd));
  8. $arr = explode(":", $line);
  9. if(count($arr) < 2) continue;
  10.  
  11. if($arr[0] != $user) continue;
  12.  
  13. if($arr[1] == $pass){
  14. $result = 0;
  15. }
  16. break;
  17. }
  18. fclose($fd);
  19. return $result;
  20. }
  21. if(!isSet($_POST["haslo"]) || !isSet($_POST["user"])){
  22. include('bad_login.html');
  23. exit();
  24. }
  25. $val = checkPass($_POST["user"], $_POST["haslo"]);
  26. switch($val){
  27. case 0 : include('c5jkvc.php');break;
  28. case 1 : include('error_server.html');break;
  29. case 2 : include('bad_login.html');break;
  30. default : include('error_server.html');
  31. }
  32. ?>


Co robie źle?
suck
trzymam loginy i hasla niezakodowane w pliku? nie lepiej zrobic to w bazie i odrazu z kodowaniem md5?
Gość_Leon_*
jak bedzie nazwa pliku fdgnfdlsglfdskh4h5gdh5dg4h6s6h46h46hsvb4vcx5n4b5m4gjfg.txt to ktoś odgadnie?
nie chodzi o bezpieczeństwo. Jak rozwiązać problem. Chyba macie gdzieś pod ręką gotowe skrypty to ok.
suck
wlasnie zdziwilbys sie co ludzie ogladaja, a na bazie danych taki skrypt jest duzo prostrzy do zrobienia
Gość_Leon_*
Pomogłeś mi
suck
tak, bo trzymanie loginow i hasel w pliku na dodatek w zaden sposob niezakodowanych to jest totalna MASAKRA exclamation.gif
strife
Witam,

1. Trzymanie takiej bazy w pliku tekstowym nie ma sensu na dłuższą metę ponieważ:
a) Jest to wolniejsze rozwiązanie od baz danych, i posiada mniejsze możliwości.
b) Twój sposób przechowywania login'u uniemożliwia stworzenie użytkownika o nazwie user:tralala:bum
c) Podsumowując nie polecam logowania na plikach tekstowych, no ale nie wiem do czego Ty to wykorzystujesz :)

2. Nawiązując do poprzedniego punktu, proponuje abyś ( jeżeli musisz już to robić na plikach ) przechowywał dane w zserializowanej tablicy ( serialize" title="Zobacz w manualu php" target="_manual ), wtedy będziesz miał łatwiejszy do niej dostęp. Może pokusisz się nawet o stworzenie klasy obsługującej taką małą bazę :>

3. Przechodząc do sedna i odpowiadając już bezpośrednio na Twoje pytanie to:
a) Na początku zwróce uwagę na zapis, jest trochę dziwny, można taki kod zapisać dużo krócej o przedewszystkim czytelniej!
b) Robisz błędy, powinno być method, a nie methot.
c) Poprawiłem ten Twój kod trochę, myślę, że teraz lepiej wygląda :)
  1. <form name="logowanie" action="?" method="post">
  2. Użytkownik: <br />
  3. <input type="text" name="user" /> <br />
  4. Hasło: <br />
  5. <input type="password" name="haslo"><br /><br />
  6. <input type="submit" value="Wejdź" />
  7. </form>
  8.  
  9. <?php
  10. function checkPass( $user, $pass )
  11. {
  12. $file = file( 'passwords.txt' );
  13.  
  14. foreach( $file as $k )
  15. {
  16. $eUser = explode(':', $k );
  17.  
  18. if ( trim( $eUser[ 0 ] ) == $user && trim( $eUser[ 1 ] ) == $pass )
  19. {
  20. return TRUE;
  21. }
  22. }
  23.  
  24. return NULL;
  25.  
  26. }
  27. echo '<pre>';
  28. var_export( checkPass( $_POST["user"], $_POST["haslo"] ) );
  29.  
  30.  
  31.  
  32. ?>


Mój plik z użytkownikami
Kod
strife:demo
demo:demo
admin:demo


Pozdrawiam!

ps. Zobacz może któryś z temat w mojej sygnaturce Ci pomorze ;)
Gość_Leon_*
Nieno dzieki!
Właśnie zauważyłem błąd methot zamiast method. Niewiem jak to sie stało.
A co do tego kodu... to przepisałem słowo w słowo z książki o php... dopiero sie ucze i tak testuje sobie. A do mysql jeszcze nie doszedłem biggrin.gif
dawhol
ja zaczołem od mysql bo moim zdaniem jest o wiele wiele łatwiejszy od plików dlatego polecam myzqla podstaw nauczysz sie w pare minut smile.gif wiec mysle ze pojdzie ci to szybciej niz z plikami smile.gif
Gość_Leon_*
Zrobiłem sobie coś do edycji plików.
  1. <html>
  2. <form method="get" action="boxwrite.php">
  3. <textarea name="memo" rows="30" cols="100">
  4. <?php
  5. if(!$fd = fopen('../komentarze.txt', 'r'))
  6. exit("Przepraszamy, błąd podczas lączenia z bazą danych");
  7. while(!feof($fd)){
  8. $str = fgets($fd);
  9. $str = str_replace("n", "<br>", $str);
  10. echo($str);
  11. }
  12. fclose($fd);
  13. ?>
  14. </textarea><br>
  15. <input type="submit" value="Zapisz">
  16. </form>
  17. </html>

To odczytuje i wysyła dane do zapisu.

Tylko chciałem żeby to było bardziej uniwersalne.
  1. <html>
  2. <form method="get" action="boxwrite.php">
  3. <textarea name="memo" rows="30" cols="100">
  4. <?php
  5. $file = $_GET["file"];
  6. if(!$fd = fopen($file, 'r'))
  7. exit("Przepraszamy, błąd podczas lączenia z bazą danych");
  8. while(!feof($fd)){
  9. $str = fgets($fd);
  10. $str = str_replace("n", "<br>", $str);
  11. echo($str);
  12. }
  13. fclose($fd);
  14. ?>
  15. </textarea><br>
  16. <input type="submit" value="Zapisz">
  17. </form>
  18. </html>

No i jak wpisuje ......index.php?file=plik.txt to nie działa sad.gif
Co robić?
rama
Przejrzałem i zanalizowałem Twój skrypt (bardziej uniwersalny) i powinien działać poprawnie, aczkolwiek występuje w nim jedna drobna różnica w kontraście do poprzedniej wersji, i pewnie stanowi ona przyczynę Twojego problemu, a jest nią odczytywanie zawartości pliku z "lokalnego" folderu, czyli tam gdzie znajduję się Twój skrypt, jednakże poprzednia wersja odczytywała plik z wcześniejszego katalogu (../komentarze.txt).

  1. <?php
  2. (...)
  3. $file = '../' . $_GET['file'];
  4. if( !$fd = fopen( $file, 'r' ) ) 
  5. {
  6. exit('Przepraszamy, błąd podczas lączenia z bazą danych');
  7. }
  8. (...)
  9. ?>

Lub podajesz w url index.php?file=../plik.txt smile.gif
Gość_Leon_*
Nie to nie o to chodziło.
Ale rozwiązałem problem.
Zamiast $file wpisałem $plik.
  1. <?php
  2. $plik = $_GET["file"];
  3. if(!$fd = fopen($plik, 'r'))
  4. exit("Przepraszamy, błąd podczas lączenia z bazą danych");
  5. while(!feof($fd)){
  6. $str = fgets($fd);
  7. $str = str_replace("n", "<br>", $str);
  8. echo($str);
  9. }
  10. fclose($fd);
  11. ?>

I działa!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.