Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]php - prosty system rejestracji i logowania na plikach tekstowych
tomek1537
post 13.05.2013, 23:46:39
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 13.05.2013

Ostrzeżenie: (0%)
-----


witam wszystkich forumowiczów.
zacząłem ostatnio zabawę z php. postanowiłem napisać prosty skrypt rejestracji i logowania, oparty na plikach tekstowych. póki co rejestracja działa, ale jak się zabrać za logowanie nie mam pojęcia.

index.php
Kod
<!DOCTYPE html>
    <html>
        <head>
            <title>My Website</title>
            <link href="style.css" rel="stylesheet" />
            <link href="http://fonts.googleapis.com/css?family=Anton" rel="stylesheet" />
        </head>
        <body>
            <h1>REGISTRATION FORM</h1>
            <form action="register.php" method="post">
                <ul>
                    <li>
                        <input name="name" type="text" />
                    </li>
                    <li>
                        <input name="password" type="password" />
                    </li>
                    <li>
                        <input type="submit" />
                    </li>
                </ul>
            </form>
            <h1>LOGIN FORM</h1>
            <form action="login.php" method="post">
                <ul>
                    <li>
                        <input name="name" type="text" />
                    </li>
                    <li>
                        <input name="password" type="password" />
                    </li>
                    <li>
                        <input type="submit" />
                    </li>
                </ul>
            </form>
        </body>
    </html>


register.php
Kod
<?php
    $name = $_POST['name'];
    $password = $_POST['password'];

    $file = fopen("file.txt", "a");
    fputs($file, $name . ":" . $password . "\n");
    fclose($file);

    echo "User added!";
?>


plik login.php chciałbym rozwiązać w następujący (albo w zupełnie inny, jeśli tak będzie lepiej):
1. otwieram plik "file.txt" za pomocą fopen.
2. pobieram każdą linijkę za pomocą fgets do jakiejś zmiennej / tablicy (nie wiem jak to zrobić ;<).
3. za pomocą funkcji $durna_nazwa = list($user, $pass) = explode(":", zmienna_lub_do_tych_pobranych_linijek). niestety tego też nie wiem jak zrobić.
4. sprawdzam dane z formularza do logowania czy istnieje taki login, a jeśli tak to porównuje wpisane hasło do tego przechowywanego w pliku tekstowym (to sobie jakoś już poradzę).

nie proszę o gotowe rozwiązanie, ale o w miarę proste do zrozumienia wskazówki, ponieważ chcę się czegoś nauczyć, a utknąłem. pozdrawiam, miłego wieczoru / dnia.
Go to the top of the page
+Quote Post
Sephirus
post 14.05.2013, 07:18:11
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Zobacz co to jest CSV jako format pliku i w ten sposób zapisuj dane (login i hasło). Możesz dzięki temu łatwo potem je pobierać z PHP (np.: funkcja fgetcsv())

Struktura jest prosta:

Kod
login1;haslo1
login2;haslo2
...


a fgetcsv zwróci Ci ładnie po kolei z każdej linii tablicę składającą się z loginu i hasła.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Rysh
post 14.05.2013, 08:18:08
Post #3





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


Kolega mi powie w którym miejscu sprawdza, czy użytkownik już istnieje w bazie?


--------------------
Go to the top of the page
+Quote Post
tomek1537
post 15.05.2013, 14:16:50
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 13.05.2013

Ostrzeżenie: (0%)
-----


po wielu trudach mój plik login.php wygląda następująco (proszę, nie śmiejscie się ze mnie ;p):
Kod
<?php
    if(!isset($_POST['name'])) {
        $_POST['name'] = "";
    }

    if(!isset($_POST['password'])) {
        $_POST['password'] = "";
    }

    $name = $_POST['name'];
    $password = $_POST['password'];

    $file = file("file.txt");

    foreach($file as $line) {
        $user = explode(":", $line);
        $user[0] = str_replace("", "", $user[0]);
        $user[1] = str_replace("\n", "", $user[1]);

        $saved_name = $user[0];
        $saved_password = $user[1];

        if($name == $saved_name && $password == $saved_password) {
            echo "You have successfully logged in.";
        }
    }
?>


jest on nadal nieukończony, ale przynajmniej już coś powoli działa. teraz powinienem dodać pod if'a rozpoczęcie sesji "zalogowany" czy coś w tym stylu?
Go to the top of the page
+Quote Post
Sephirus
post 15.05.2013, 14:49:01
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. if(!isset($_POST['name'])) {
  2. $_POST['name'] = "";
  3. }
  4.  
  5. if(!isset($_POST['password'])) {
  6. $_POST['password'] = "";
  7. }
  8.  
  9. $name = $_POST['name'];
  10. $password = $_POST['password'];
  11.  
  12. $file = file("file.txt"); // dodaj flagę FILE_IGNORE_NEW_LINES -> manual
  13.  
  14. foreach($file as $line) {
  15. $user = explode(":", $line);
  16. $user[0] = str_replace("", "", $user[0]); // ciekawa konstrukcja - co robi? :)
  17. $user[1] = str_replace("\n", "", $user[1]); // flaga wyżej rozwiązuje problem (te dwie linijki będą zbędne)
  18.  
  19. $saved_name = $user[0];
  20. $saved_password = $user[1];
  21.  
  22. if($name == $saved_name && $password == $saved_password) {
  23. echo "You have successfully logged in.";
  24. }
  25. }


Na przykład to
  1. $user = explode(":", $line);
  2. $user[0] = str_replace("", "", $user[0]);
  3. $user[1] = str_replace("\n", "", $user[1]);
  4.  
  5. $saved_name = $user[0];
  6. $saved_password = $user[1];


można zamienić na:
  1. list($saved_name, $saved_password) = explode(":", $line);



--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
tomek1537
post 16.05.2013, 18:09:14
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 13.05.2013

Ostrzeżenie: (0%)
-----


@Sephirus, dziękuję za porady w poście wyżej. Mógłbyś mnie nakierować czy nie powinienem teraz używać plików cookie albo sesji, żeby użytkownik miał rozszerzony dostęp do strony po zalogowaniu?

Po kolejnym dniu nauki PHP i wielu próbach wdrożenia rzeczy, których się nauczyłem do skryptu, mój kod wygląda następująco:

header.php
  1. <?php
  2. ?>
  3.  
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <title>My Website</title>
  8. <link href="stylesheet.css" rel="stylesheet" />
  9. </head>
  10. <body>
  11. <div class="grebciu_001">
  12. <div class="grebciu_002">
  13. <?php
  14. if(isset($_SESSION['logged_in'])) {
  15. echo "<p>You are logged in as " . $_SESSION['logged_in'] . ".</p>";
  16. }
  17. if(!isset($_SESSION['logged_in'])) {
  18. echo "<p>You are not logged in.";
  19. }
  20. ?>
  21. </div>
  22. </div>


index.php
  1. <?php
  2. include 'header.php';
  3. ?>
  4. <h1>FORMULARZ REJESTRACJI</h1>
  5. <form action="register.php" method="post">
  6. <ul>
  7. <li>
  8. <input name="name" type="text" />
  9. </li>
  10. <li>
  11. <input name="password" type="password" />
  12. </li>
  13. <li>
  14. <input type="submit" />
  15. </li>
  16. </ul>
  17. </form>
  18. <h1>FORMULARZ LOGOWANIA</h1>
  19. <form action="login.php" method="post">
  20. <ul>
  21. <li>
  22. <input name="name" type="text" />
  23. </li>
  24. <li>
  25. <input name="password" type="password" />
  26. </li>
  27. <li>
  28. <input type="submit" />
  29. </li>
  30. </ul>
  31. </form>
  32. </body>
  33. </html>


register.php
  1. <?php
  2. if(!isset($_POST['name'])) {
  3. $_POST['name'] = "";
  4. }
  5.  
  6. if(!isset($_POST['password'])) {
  7. $_POST['password'] = "";
  8. }
  9.  
  10. $name = $_POST['name'];
  11. $password = $_POST['password'];
  12.  
  13. $file = fopen("file.txt", "a");
  14. fputs($file, $name . ":" . $password . "\n");
  15. fclose($file);
  16.  
  17. echo "User added!";
  18. ?>


login.php
  1. <?php
  2.  
  3. if(!isset($_POST['name'])) {
  4. $_POST['name'] = "";
  5. }
  6.  
  7. if(!isset($_POST['password'])) {
  8. $_POST['password'] = "";
  9. }
  10.  
  11. $name = $_POST['name'];
  12. $password = $_POST['password'];
  13.  
  14. $file = file("file.txt", FILE_IGNORE_NEW_LINES);
  15.  
  16. foreach($file as $line) {
  17. list($saved_name, $saved_password) = explode(":", $line);
  18.  
  19. if($name == $saved_name && $password == $saved_password) {
  20. echo "You have successfully logged in.";
  21.  
  22. $saved_name = ucfirst($saved_name);
  23. $_SESSION['logged_in'] = $saved_name;
  24. }
  25. }
  26. ?>


logout.php
  1. <?php
  2. ?>


Macie jakieś pomysły / uwagi co mogę zrobić, żeby to lepiej wyglądało / działało?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2025 - 03:59