• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Logowanie użytkownika pobierając dane z pliku

42 Warsaw Coding Academy
0 głosów
493 wizyt
pytanie zadane 1 maja 2022 w PHP przez MKolaj15 Bywalec (2,270 p.)

Witam, mam do napisania system rejestracji oraz logowania, gdzie po rejestracji dane użytkownika zapisywane są do pliku. Ja zapisuję te dane w jednej linijce pliku i są one oddzielone spacją (tzn. każdy użytkownik to osobna linijka danych).  Moim planem na system logowania było odczytanie z formularzu maila oraz hasła, otwarcie pliku, sczytywanie każdej kolejnej linijki funkcją fgets, później zamianę przechwyconej linijki na array i porównanie wpisanych danych z formularza logowania to odpowiednich elementów array'a. Problem w tym, że po próbie zalogowania wyświetla mi błąd:

 Undefined array key 2 in C:\Users\kawcz\PhpstormProjects\Zadania\Zad4.7.2\LoginZad4.7.2.php on line 14 

czyli jakby klucze tej tabeli nie były zdefiniowane podczas porównania, pomimo tego, że gdy używam vardump'a, aby wyświetlić zawartość array'ów, to wszystkie dane ładnie się wyświetlają. Czy ktoś byłby w stanie pomóc mi z tym problemem? Z góry dziękuję. Kod pliku odpowiadającego za logowanie:

<?php
session_start();

if(isset($_POST['mail']) && isset($_POST['pass'])){

    if (!$fd = fopen('dane.txt', 'r')){
        echo "Nie można otworzyć pliku dane.txt";
    }
    else{
        while(!feof($fd)){
            $str = fgets($fd);
            $data = explode(" ", $str);
            var_dump($data);
            if($data[2] == $_POST['mail'] && $data[3] == $_POST['pass']) {
                $_SESSION['poprawne_dane'] = $data[0];
                header('Location: LogowanieZad4.7.2.php');
            }
        }
        fclose($fd);
        echo "<h3 style='color: red'>Błędne dane!</h3>";
        echo "<a href='LogoutZad4.7.2.php'>Powrót do logowania</a>";
    }

}

 

1 odpowiedź

+1 głos
odpowiedź 1 maja 2022 przez Arkadiusz Waluk Ekspert (290,090 p.)
wybrane 1 maja 2022 przez MKolaj15
 
Najlepsza
Jeśli dobrze rozumiem w każdej linijce masz tylko login i hasło oddzielone spacją, nic więcej? Możesz pokazać plik z hasłami?

Błąd mówi o tym, że w linii 14 odwołujesz się do indeksu, który nie istnieje, stąd zastanawiam się skąd masz tam $data[2] i $data[3]. Czemu nie 0 i 1? Indeksy liczymy od 0, a jeśli masz tylko dwie wartości, to będą dostępne pod 0 i 1. Ewentualnie jeśli masz tam jakieś inne dane i klucze są poprawne, to może w pliku jest jakaś pusta linia (nawet na końcu) i przez to tutaj jest błąd, bo nie ma wtedy w niej indeksu 2?
1
komentarz 1 maja 2022 przez MKolaj15 Bywalec (2,270 p.)

Wielkie dzięki, rzeczywiście miałem w pliku pustą linię i to ona wszystko psuła. Usunąłem ją funkcją trim. laugh

Podobne pytania

+1 głos
0 odpowiedzi 246 wizyt
pytanie zadane 11 kwietnia 2023 w PHP przez neo1020 Dyskutant (8,950 p.)
0 głosów
1 odpowiedź 339 wizyt
pytanie zadane 30 grudnia 2017 w PHP przez Bartess Gaduła (3,630 p.)
0 głosów
0 odpowiedzi 113 wizyt
pytanie zadane 15 października 2024 w Systemy operacyjne, programy przez Nekudu Początkujący (310 p.)

93,377 zapytań

142,379 odpowiedzi

322,528 komentarzy

62,726 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...