logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

XAMPP najnowszy PHP – Notice: Undefined index w login.php przy $_POST['login']

Trzebu 11 Sie 2014 16:20 1887 18
REKLAMA
  • #1 13869276
    Trzebu
    Poziom 13  
    Posty: 158
    Pomógł: 3
    Ocena: 15
    Witam,
    Kilka dni temu zainstalowałem xampp'a, bo znudziło mi się ciągłe przerzucanie plików na ftp. Problem tkwi w tym, że ciągle wywala mi errory tego typu:
    Notice: Undefined index: login in E:\files\xamp\htdocs\login.php on line 6

    Notice: Undefined index: pass in E:\files\xamp\htdocs\login.php on line 7

    Notice: Undefined index: send in E:\files\xamp\htdocs\login.php on line 8
    Błędu w kodzie na 100% nie ma, bo na friko działało w 100%. Dodam, że jak się rejestruję testowo, to też mi pisze iż jest taki błąd, ale rekord w MySQL zapisuje, za to zalogować się nie da za nic. Zanadto wywala mi ten błąd w prawie każdym kodzie, chociaż kody są dobre. Wersja php w xamppie najnowsza, o co może chodzić?
  • REKLAMA
  • #2 13869339
    slaweekkk
    Poziom 13  
    Posty: 34
    Pomógł: 5
    Ocena: 5
    Wygląda na brak obsługi błędu w PHP. Powody są różne błędy we wtyczkach mysql brak bazy niekompatybilna wersja PHP. Jeżeli byś wrzucił przykładowy kod php który powoduje błędy było by łatwiej coś podpowiedzieć. Jak się php uwierzytelnia w MySQL?
  • REKLAMA
  • #3 13869348
    Trzebu
    Poziom 13  
    Posty: 158
    Pomógł: 3
    Ocena: 15
    Login.php:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #4 13869443
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Pracując z tablicą POST nigdy nie możesz być pewnym, że zmienna o danym indeksie została przesłana (ustawiona). Dlatego warto zawsze najpierw sprawdzić funkcją isset(), czy zmienna jest ustawiona, a jeśli nie - przypisać jej jakąś wartość domyślną. To o tym w skrócie jest ten warning.
    Spróbuj wprowadzić takie modyfikacje:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #5 13869451
    slaweekkk
    Poziom 13  
    Posty: 34
    Pomógł: 5
    Ocena: 5
    No tak błędy w kodzie ;) Generalnie różnica jest taka że teraz w xampp masz włączone warningi PHP czy PHP notification albo log_level jakoś tak. Na docelowych serwerach jest to wyłączane ze względu na bezpieczeństwo.

    Workaround żeby zakryć warningi to wstawianie @:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    Ale zdecydowanie lepiej poprawić błędy, czyli sprawdzanie czy formularz został wypełniony zanim pobierze się nieprzesłane zmienne. Ja bym to widziała jakoś tak:



    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #6 13869864
    Trzebu
    Poziom 13  
    Posty: 158
    Pomógł: 3
    Ocena: 15
    marcinj12:
    slaweekkk:
    Wprowadziłem Wasze zmiany i błąd przy logowaniu zniknął, ale dalej nie da się zalogować, co to może być? Ja już sam nie wiem jak mam to podejść. xd
  • #7 13869884
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Trzebu napisał:
    ale dalej nie da się zalogować, co to może być?
    A w jaki sposób kolega wywołuje ten skrypt?
    Jakimś innym formularzem?
    Proszę zamieścić plik, który ten formularz zawiera. Ten formularz, który znajduje się w pliku, w postach powyżej, ma poważne braki; np. brakuje tam nazwy wywoływanego skryptu w polu "action".
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #8 13869909
    slaweekkk
    Poziom 13  
    Posty: 34
    Pomógł: 5
    Ocena: 5
    Musiałyś wrzucić cały kod żeby to sprawdzić czyli wszystkie pliki require i require_once, oraz te które one inkludują, lub okroić i skopiować wszystko ważne do jednego pliku.

    Generalnie na 95% wyskakuje Ci komunikat
    "Użytkownik o podanym loginie i haśle nie istnieje."
    bo masz błąd autoryzacji w MySQL. Czyli musisz sobie stworzyć baze danych za pomocą phpmyadmin jest to w XAMPP dostarczone ustawić hasło konto etc.

    Jeżeli korzystasz z bazy danych na jakimś innym serwerze to lepiej ją tam wyeksportuj i zaimportuj sobie lokalnie będzie bezpieczniej i na 98% ten inny serwer nie udostępnia połączeń zdalnych.
  • REKLAMA
  • #9 13870217
    Trzebu
    Poziom 13  
    Posty: 158
    Pomógł: 3
    Ocena: 15
    No to tak, wrzucam wszystkie najważniejsze skrypty:
    config.php
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    index.php
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    login.php
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    register.php
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    user.class.php
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    heder.php to dopełnienie początku kodu, tam znajdują się połączenia z arkuszem stylów i kodowanie polskich znwków
    footer.php to stopka w której jest kilka danych o autorze całej gry.
    Bazę danych mam też na lokalnym serwerze.
  • #10 13870349
    slaweekkk
    Poziom 13  
    Posty: 34
    Pomógł: 5
    Ocena: 5
    Generalnie musiałbyś jeszcze opisać co się dokładnie dzieje masz ekran logowania wpisujesz usera i hasło klikasz zaloguj i co dalej, wyskakuje znowu ekran logowania czy komunikat o błedzie bazy danych czy błedzie logowania?
    Do debugowania pokasuj: @ przed wszystkimi: @mysql_

    Dodatkowo za pomocą tego usera: "root" bez chasła możesz się zalogować do phpmyadmin i otworzyć bazę danych "user"?

    Jak zrobisz w kodzie
    vad_dump(mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE login = '$login' AND pass = '$pass'")));
    to pewnie będzie puste warto sprawdzi i tutaj szukać problemu.
  • #11 13870419
    Trzebu
    Poziom 13  
    Posty: 158
    Pomógł: 3
    Ocena: 15
    Jak chcę się zalogować, to mam normalny ekran, ale kiedy nacisnę submita "zaloguj" wywala komunikat, że nie mam kogoś takiego w bazie. Tak za pomocą usera root mogę normalnie wejść w bazę. Zrobiłem wg. opisu wyżej, lecz dało to tylko krytyczny error
  • #12 13870469
    slaweekkk
    Poziom 13  
    Posty: 34
    Pomógł: 5
    Ocena: 5
    tak ale co dałeś jak wyżej? i jaki dokładnie błąd dało?
    Chyba nie jesteś zbyt biegły w php,

    Przed linijką: $userExists = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE login = '$login' AND pass = '$pass'"));
    wklej
    vad_dump(mysql_query("SELECT COUNT(*) FROM users"));

    To musi zwrócić jakieś wartości. Jeżeli nic nie wróci to nie ma nic w bazie danych , jeżeli będzie fatal to nie działa Ci baza danych, jeżeli coś będzie to albo nie znasz chasła albo jest zmieniona implementacja md5 :P Spróbuj zarejestrować nowego usera i zobaczyć phpmyadmin czy się dodał. Używasz phpmyadmin tak?
  • #13 13870622
    Trzebu
    Poziom 13  
    Posty: 158
    Pomógł: 3
    Ocena: 15
    Wkleiłem to tak jak podpowiedziałeś, ale jedyne co wywaliło to:
    Fatal error: Call to undefined function vad_dump() in E:\files\xamp\htdocs\login.php on line 28
    Wybaczcie moją skromną wiedzę o php, ale językiem w jakim najbardziej się specjalizuję jest js, a php uczę się od jakichś 3 mies.
    Używam phpmyadmin, właśnie najbardziej mnie śmieszy to iż użytkownika rejestruje i dodaje rekord do bazy, ale już przy logowaniu rekordu nie wyciąga z bazy. ://
  • REKLAMA
  • #14 13870935
    slaweekkk
    Poziom 13  
    Posty: 34
    Pomógł: 5
    Ocena: 5
    To dziwne, odnośnie var_dump zrobiłem literówke dlatego jest błąd.

    Dla peności pobierz wynik SQL do zmiennej i wyświetl zmeinną:

    $query_res=mysql_query("SELECT * FROM users");
    var_dump($query_res);

    http://php.net/manual/en/function.var-dump.php


    i będzie jasne czy wcale nie pobiera urzytkowników czy źle porównuje bo masz CapsLock ;)
  • #15 13870946
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Kolega popełnił mały błąd; nie "vad_dump()" tylko "var_dump()".
    Ale to i tak nie ma znaczenia.
    Jeżeli nie uzupełni kolega niezbędnych informacji w formularzu, to istnienie, czy zawartość bazy danych nie mają żadnego znaczenia, bo formularz i tak nie przekaże danych.
    Jeżeli chcesz posunąć się dalej, to:
    1. Uzupełnij dane formularza, chociażby tak:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    2. Sprawdź za pomocą PHPAdmin czy w bazie danych, do której się łączysz znajduje się tabela 'users' i czy posiada jakąkolwiek zawartość. Jeżeli nie, to utwórz ją i wypełnij jakimiś przykładowymi loginami i hasłami. pamiętaj, że ten twój skrypt sprawdza hash-owane hasła.

    Jeżeli wykonasz obie opisane powyżej procedury, to będzie można posunąć się dalej.
    na razie, to tylko takie "macanie" w około, w poszukiwanie, co może być "nie tak". To zupełna strata czasu, a przecież nie o to chodzi.
  • #16 13871386
    Trzebu
    Poziom 13  
    Posty: 158
    Pomógł: 3
    Ocena: 15
    slaweekkk:
    arnoldziq:
    Teraz jest coś takiego:
    resource(7) of type (mysql result)
    Notice: Undefined variable: userExists in E:\files\xamp\htdocs\login.php on line 32
    Użytkownik o podanym loginie i haśle nie istnieje.
    Copyright by Trzebu 2013-2014

    W bazie wszystkie tabele są, tak samo wszystkie pola. Połączenie jest na 100%, bo przecież formularz register działa poprawnie, dodaje rekord do mysql.
  • Pomocny post
    #17 13871501
    slaweekkk
    Poziom 13  
    Posty: 34
    Pomógł: 5
    Ocena: 5
    To już miej więcej wiesz co się dzieje. Generalnie bardziej szczegółowo pisz co to jest linia 32 :P Musisz popróbować zapytania SQL z mysql_fetch_array wartości po przeliczeniu md5 porównać w phpmyadmin. Nikt nie może tego odpalić dokładnie w tym samym środowisku, tak że musisz uściślić coś co dokładnie teraz wewnątrz nie działa. Może być problem z jakimś pytaniem SQL ale bez debugu trudno zgadnąć.
  • Pomocny post
    #18 13871593
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Z nieznanych przyczyn, twój skrypt 'login.php' dodawał spację przed nazwą użytkownika w zmiennej $login, stad wszystkie problemy.
    Zmień go na taki:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    Wynik (przy od-komentowanych liniach) :
    XAMPP najnowszy PHP – Notice: Undefined index w login.php przy $_POST['login']
  • #19 13871875
    Trzebu
    Poziom 13  
    Posty: 158
    Pomógł: 3
    Ocena: 15
    arnoldziq
    Działa! Nareszcie, już zacząłem pisać nowy skrypt, ale już działa.
    Dziękuję wszystkim za pomoc!

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zainstalował XAMPP i napotkał błędy związane z niezdefiniowanymi indeksami w skrypcie logowania PHP. Problemy te wynikały z braku sprawdzenia, czy zmienne POST są ustawione przed ich użyciem. Użytkownicy zasugerowali wprowadzenie funkcji isset() oraz poprawienie kodu, aby uniknąć błędów. Po wprowadzeniu poprawek, problem z błędami zniknął, ale użytkownik nadal nie mógł się zalogować. Ostatecznie zidentyfikowano, że problem leżał w dodatkowej spacji przed nazwą użytkownika w zmiennej $login, co uniemożliwiało poprawne porównanie z danymi w bazie. Po usunięciu spacji skrypt działał poprawnie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA