• 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

Object Storage Arubacloud
0 głosów
328 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 (288,330 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 208 wizyt
pytanie zadane 11 kwietnia 2023 w PHP przez neo1020 Dyskutant (8,550 p.)
0 głosów
1 odpowiedź 285 wizyt
pytanie zadane 30 grudnia 2017 w PHP przez Bartess Gaduła (3,630 p.)
0 głosów
3 odpowiedzi 1,330 wizyt
pytanie zadane 23 stycznia 2017 w SQL, bazy danych przez lukasz1390 Użytkownik (500 p.)

92,752 zapytań

141,666 odpowiedzi

320,385 komentarzy

62,100 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...