Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML]Proste logowanie php - dla totalnie zielonej...
Forum PHP.pl > Forum > Przedszkole
kamilavictoria
Witam
Jako że jest to mój pierwszy post na forum php chciałam się przywitać <hello> Wiem że dla większości (czytaj 99,99%) z Was mój problem jest głupi ale dla mnie jest duży bo nigdy nie miałam styczności z php i jestem totalnie albo nawet bardziej zielona w tym temacie. Otóż muszę zrobić takie 3 rzeczy:

1. Logowanie do www. Jest jakaś strona index.html (może być zupełnie pusta) i na niej jest formularz gdzie wpisuje się login i hasło po czym wciska się przycisk "Zaloguj" i w zależności czy poda się prawdziwe dane włącza się odpowiednio strona blad.html lub zalogowany.html. Ma być kilku użytkowników ze swoimi hasłami. Szukalam po necie i w wiekszosci wszsycy pisza zeby zastosowac sql. Mam nadzieje że można się obejść bez bazy. Czytalam cos o logowaniu w oparciu o ciasteczka. Takie cos by mnie zadowolilo (bez skojarzeń tongue.gif ).

2. Podobnie jak wyżej w 1 punkcie logując się do index.html podaje się imię i nazwisko oraz przepisuje się kod z obrazka. I znów w zależności od tego czy się dobrze wszystko wpisze jest albo blad.html albo zalogowany.html To przepisywanie z obrazka to ma być bez udziwnień takie najprostsze jak się tylko da np coś takiego jak np. tutaj znalazlam ale nie wiem jak tego uzyc ... tiredsmiley.gif http://webmade.org/porady/token-gene...zowych-php.php
Ile plików z tego skleić i jak mają wyglądać ? gdzie te obrazki wrzucić ?

3. Już chyba coś trudniejszego. W danej lokalizacji np na pendrivie (dysk E:\) który się włoży do USB, włącza się z tego pendriva stronke genetaror.html która generuje jakąś liczbę i zapisuje je do pliku tekstowego np haslo.txt na tym pendrive. Taki jakiś taki generator. Na dysku twardym jest stronka index.html która po włączeniu generuje taką samą liczbę ale jej nie pokazuje na ekranie. Na tej stronie jest też okienko logowania - wpisuje się login np. Kamila i liczbe z pliku haslo.txt z pendrive. Jak login i ta liczba się zgadza przechodzi się na blad.html albo zalogowany.html
Z podpowiedzi prowadzącego zajęcia pamiętam tyle że tam w tym index.html na stałe może być zapamiętana ta ścieżka do pliku tekstowego np E:\haslo.txt żeby strona wiedziała z czym porównać tą wprowadzaną liczbe do index.html
No i znalazłam coś takiego, że
- $file=fopen("haslo.txt", "w"); otwiera plik czyli w moim przypadku mogło by być coś takiego $file=fopen("E:\haslo.txt", "w"); questionmark.gif
- potem coś co by generowało tą liczbę np.
<?php
for($i=0;$i<5;$i++) {
$liczba = rand(0,9);
$_SESSION['token'] .= $liczba;
}
?>
tylko że tu jak losowo wygeneruje przez ten rand to pewnie jak w index.html zastosuje się to samo to pewnie wygeneruje inną losową liczbę... więc ten sposób raczej odpada. Chyba żeby zastosować jakiś algoytm że to "losowanie" to np dodwawanie ze sobą liczb albo coś takiego. Tylko że to jest pomysł a zrealizować nie potrafię
- jakos to by zapisać i zamknąć - może tak questionmark.gif
fputs($plik, $liczba);
fclose($plik);

a tego index.html to już nie wiem jakby to zrobić. Najpiew wylosoawać tają samą liczbę potem prównać i jak będzie się zgadzało + do tego login to zalogować. Jak takie skróty myślowe posklejać w całość?


Proszę się nie śmiać że jestem blondynką ale kompletnie nie wiem jak zacząć i o co w tym chodzi ale na kierunku nauczycielskim nie muszę znać programowania (miejmy nadzieję że bardziej zaawansowanego nie...). Zagoglowałam tu i ówdzie ale nie znalazłam gotowych plików tylko jakieś fragmenty kodów. A skleić tego nie potrafię.
Wiem tylko że mogę użyć do tego pakietu Krasnal Serv. Tam jest obsługa www i PHP. I że gdzieś tam wkładam te pliki i włączam te 3 przypadki logowania bo ten Krasnal będzie pracował jak normalny serwer gdzieś w necie.
Poproszę o podpowiedzi jak najprostsze jak to zrobić lub najlepiej gotowe pliki bo wiem że nie jest to trudne dla kogoś kto kiedykolwiek miał styczność z php. Pięć minut dla kogoś a dla mnie zbawienie bo muszę mieć to na piątek. Dla pomocnej dłoni przewiduję nagrodę..
Chętnie na priv lub tutaj pogadam z kimś otwartym na pomoc.
Skie
Co do punktu 1:
Jeżeli nie chcesz używać SQLa możesz hasła zapisywać i odczytywać z pliku tekstowego, a żeby było wygodniej zrobić to np. w JSONie.

Co do samego pliku logowania to zrobiłbym to tak:

index.html
  1. <?php
  2. <!DOCTYPE html>
  3. <html>
  4. <head></head>
  5. <body>
  6. <form method=post action=logowanie.php?action=loguj>
  7. Podaj nazwę użytkownika: <input type=text value="" name=username><br>
  8. Podaj hasło użytkownika: <input type=password value="" name=pass><br>
  9. <input type=submit value="Zaloguj">
  10. </form>
  11. </body>
  12. </html>
  13. ?>


logowanie.php:
  1. <?php
  2.  
  3. if ($_GET['action'] == "loguj") {
  4.    require_once("sprawdz.php");
  5.  
  6.    if ($_SESSION['user'] && $_SESSION['pass']) {
  7.        print("logowanie przebiegło pomyślnie! <a href=zalogowany.php>Przejdź dalej</a>");
  8.  
  9.    } else {
  10.        print("taki użytkownik nie istnieje!");
  11.  
  12.    }
  13. }
  14. ?>


sprawdz.php:
  1. <?php
  2. if (IsSet($_POST['username']) && IsSet($_POST['pass'])) {
  3.    $open = fopen("uzytkownicy.txt", "r"); // w pliku uzytkownicy.txt mamy liste userow z haslami w formacie JSON
  4.    $open_txt = fread($open, filesize("uzytkownicy.txt")); // czytamy zawartosc pliku
  5.    $open_txt = json_decode($open_txt, true); // "odkodowujemy"
  6.    fclose($open); // zamykamy zbedny plik
  7.  
  8.    for ($i=0; $i<count($open_txt[user]); $i++) {
  9.         if ($open_txt[user][i][name] == $_POST['username'] && $open_txt[user][i][pass] == $_POST['pass']) {
  10.         $_SESSION['user'] = $_POST['username'];
  11.         $_SESSION['pass'] = $_POST['pass'];
  12.         break;
  13.         }
  14.    }
  15. }
  16. ?>


zalogowany.php:
  1. <?php
  2. if (!$_SESSION['user'] || !$_SESSION['pass']) {
  3.    print("nie masz dostepu do strony!"); exit;
  4. } else {
  5.   // zawartosc strony dla zalogowanego uzytkownika ;)
  6. }
  7. ?>


Wszystkie te pliki wraz z uzytkownicy.txt musza byc w tym samym katalogu.
Jeśli nie wiesz jak "zakodować" tą listę userów w tym pliku w JSON to napisz do mnie Priva, lub na gg (w profilu jest numer).
Pisałem to na szybko, mam nadzieję, że mimo to nie ma tutaj błędów winksmiley.jpg Starałem się pisać tak by kod był czytelny dla Ciebie (bo mogłem napisać mniej, ale "dziwniej" ^^)

A co do 3 to nie za bardzo wiem o co Ci chodzi haha.gif
kamilavictoria
OK, dzięki Skie, wiadomość na priv poszła.
A co do punktu 3 mojego problemu to w skrócie ma to być jakby symulacja działania tokena na USB. Taki przykład uwierzytelniania.
Wkładamy USB, włączamy stronkę z tego pendriva, ona automatycznie generuje i zapisuje w pliku tekstowym na tym pednrivie jakaś liczbę.
Potem wchodzimy na na stronę www (przez serwer www Apache). Ona również generuje przy starcie liczbę. Strona posiada formularz do wpisania loginu. Po podaniu loginu serwer sprawdza na tym pendivie (czyli np w E:\haslo.txt) czy jest taki sam ciąg liczb co wygenerowany podczas startu tej strony. Jeżeli podany login i te liczby się zgadzają to przenosi na stronkę zalogowany.html a jeżeli te liczby lub login się nie zgodzą to przenosi na blad.html Czyli poprostu ta strona uruchomiona z serwera musi wygenerować przy starcie tą samą liczbę co na pendrivie żeby dało się poprawnie zalogować.
Gacek89
z tym generowaniem kluczy nie wiem czy tak łatwo było by to zrobić ale mogła byś użyć tego samego klucza na pendrive i pliku txt i podczas logowania wysyłając ten plik na serwer a na serwerze zostało by to odpowiednio porównane ale nie wiem czy takie rozwiązanie Cię zadowala

PS. przez php nie otworzysz pliku na komputerze usera, możesz jedynie na serwerze
HellRider
Cytat(Gacek89 @ 9.12.2008, 10:52:36 ) *
PS. przez php nie otworzysz pliku na komputerze usera, możesz jedynie na serwerze


Hm, na siłę, okrężnie, się raczej da:
1. FORM name='abc'
2. W nim INPUT pliku z domyślnie podaną wartością ze ścieżką do pliku u klienta(o ile tak się da, jedynie tego nie testowałem)
3. java script: var av = getElementsByName('abc');
java script: av[0].submit();
4. PHP przetwarza plik w $_FILES.

Jeżeli pkt.2. zadziała to powinno całe zadziałać, ale jak pisałem, nie testowałem.
kamilavictoria
Cytat(Gacek89 @ 9.12.2008, 10:52:36 ) *
z tym generowaniem kluczy nie wiem czy tak łatwo było by to zrobić ale mogła byś użyć tego samego klucza na pendrive i pliku txt i podczas logowania wysyłając ten plik na serwer a na serwerze zostało by to odpowiednio porównane ale nie wiem czy takie rozwiązanie Cię zadowala


Zdecydowanie mnie zadowala smile.gif Ważne żeby było porównywanie zawartości pendriva z serwerm www.
Więc teraz poprosiła bym o rozwiązanie wstydnis.gif
wookieb
Cytat(kamilavictoria @ 9.12.2008, 14:47:16 ) *
Zdecydowanie mnie zadowala smile.gif Ważne żeby było porównywanie zawartości pendriva z serwerm www.
Więc teraz poprosiła bym o rozwiązanie wstydnis.gif

To już robi twoj program do ftp.
Chyba, że chodzi ci o cos innego.
kamilavictoria
Nie chodzi o żadne programy ftp itd. Chodzi żeby zrobić możliwie najprostszą symulację działania tokena sprzętowego. Żeby napisać jakiś kod i żeby bez udziału jakiś gotowych aplikacji pokazać że można się zautoryzować na serwerze.
Skie
Tutaj masz poprawki według Twoich zaleceń:

index.html -> bez zmian:

logowanie.php
  1. <?php
  2.  
  3. if ($_GET['action'] == "loguj") {
  4.   require_once("sprawdz.php");
  5.  
  6.   if ($_SESSION['user'] && $_SESSION['pass']) {
  7.       print("logowanie przebiegło pomyślnie! <a href=zalogowany.php>Przejdź dalej</a>");
  8.  
  9.   } else {
  10.       print("taki użytkownik nie istnieje!");
  11.  
  12.   }
  13. }
  14. ?>


sprawdz.php
  1. <?php
  2. if (IsSet($_POST['username']) && IsSet($_POST['pass'])) {
  3. unset($_SESSION);
  4.  
  5.   $open = fopen("uzytkownicy.txt", "r"); // w pliku uzytkownicy.txt mamy liste userow z haslami w formacie JSON
  6.   $open_txt = fread($open, filesize("uzytkownicy.txt")); // czytamy zawartosc pliku
  7.   $open_txt = json_decode($open_txt, true); // "odkodowujemy"
  8.   fclose($open); // zamykamy zbedny plik
  9.  
  10.   for ($i=1; $i<count($open_txt['user'])+1; $i++) {
  11.        if ($open_txt['user'][$i]['name'] == $_POST['username'] && $open_txt['user'][$i]['pass'] == $_POST['pass']) {
  12.            $_SESSION['user'] = $_POST['username'];
  13.            $_SESSION['pass'] = $_POST['pass'];
  14.            break;
  15.        }
  16.   }
  17. }
  18. ?>


zalogowany.php
  1. <?php
  2.  
  3. if (!$_SESSION['user'] || !$_SESSION['pass']) {
  4.   print("nie masz dostepu do strony!"); exit;
  5. } else {
  6.  // zawartosc strony dla zalogowanego uzytkownika ;)
  7. }
  8. ?>


MUSI działać smile.gif
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.