Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Błąd z formularzem logowania


TheTroy

Pytanie

Opublikowano

Witam.

To znowu ja, tylko że teraz mam oto taki problem, że przed logowaniem wywala mi takie informacje:

Cytat

Notice: Undefined index: login in C:\wamp64\www\login.php on line 26

Notice: Undefined index: pass in C:\wamp64\www\login.php on line 27

Notice: Undefined index: send in C:\wamp64\www\login.php on line 29

(Oto kod z tych trzech linii 26,27,29):

#26		$login = htmlspecialchars(mysql_real_escape_string($_POST['login']));
#27		$pass = mysql_real_escape_string($_POST['pass']);
#29		if ($_POST['send'] == 1) {

ale gdy je zignoruję i postanowię się zalogować wyskakuje mi taka informacja:

Cytat

Strict standards: Non-static method user::getData() should not be called statically in C:\wamp64\www\login.php on line 52

kod php który pobiera user::getData() :

public function getData ($login, $pass) {
        if ($login == '') $login = $_SESSION['login'];
        if ($pass == '') $pass = $_SESSION['pass'];

        self::$user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE login='$login' AND pass='$pass' LIMIT 1;"));
        return self::$user;
    }

kontynuując gdy wyskoczy mi informacja z linii 52..

i wyskakuje mi tak jak powinno wiadomość że zostałem zalogowany i żebym kliknął Strona główna (na dole jak ta treść wygląda):

Cytat

Zostałeś zalogowany. Możesz przejść na stronę główną

 i gdy kliknę strona główna przenosi mnie na index.php w którym zdefiniowałem taki oto kod który powinien wyświetlić mi czy jestem zalogowany czy też nie:

<?php
	if (@user::isLogged()) {
		// Widok dla użytkownika zalogowanego
						
		// Pobierz dane o użytkowniku i zapisz je do zmiennej $user
		$user = user::getData('', '');
						
		echo '<p>'.$user['login'].'!</p>';
		echo '<p><a href="profile.php?id='.$user['id'].'">Profil</a> | <a href="logout.php">Wyloguj się</a></p>';
		echo 'ZALOGOWANY';
	}

	else {
		// Widok dla użytkownika niezalogowanego
		echo 'NIEZALOGOWANY';
	}
?>

I problem polega na tym że w ogóle mnie nie loguje. (Jeżeli natomiast wpiszę złe hasło czy też login to mnie nie zaloguje i to działa dobrze, tulko że nie mogę się zalogować nawet jeżeli wpiszę dobre dane "login", "hasło").

 

 

 

Tutaj macie główny, cały kod do podglądu z formularzem html:

<?php
	session_start();

	require './config/config.php'; // Dołącz plik konfiguracyjny i połączenie z bazą
	require_once './config/user.class.php';

	// Zabezpiecz zmienne odebrane z formularza, przed atakami SQL Injection
	$login = htmlspecialchars(mysql_real_escape_string($_POST['login']));
	$pass = mysql_real_escape_string($_POST['pass']);

	if ($_POST['send'] == 1) {
		// Sprawdź, czy wszystkie pola zostały uzupełnione
		if (!$login or empty($login)) {
			//echo ('<p class="error">Wypełnij pole z loginem!</p>');
			if (empty($login)) @$errors .= '<p class="error">Wypełnij pole z loginem!</p>';
		}
		
		if (!$pass or empty($pass)) {
			//echo ('<p class="error">Wypełnij pole z hasłem!</p>');
			if (empty($pass)) @$errors .= '<p class="error">Wypełnij pole z hasłem!</p>';
		}

		@$pass = user::passHash($pass); // Posól i zahashuj hasło
		
		// Sprawdź, czy użytkownik o podanym loginie i haśle isnieje w bazie danych
		$userExists = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE login = '$login' AND pass = '$pass'"));

		if ($userExists[0] == 0) {
			// Użytkownik nie istnieje w bazie
			echo '<p class="error">Użytkownik o podanym loginie i haśle nie istnieje.</p>';
			echo ''.@$errors.'';
		} else {
			// Użytkownik istnieje
			$user = user::getData($login, $pass); // Pobierz dane użytknika do tablicy i zapisz ją do zmiennej $user

			// Przypisz pobrane dane do sesji
			$_SESSION['login'] = $login;
			$_SESSION['pass'] = $pass;

			echo '<p class="success">Zostałeś zalogowany. Możesz przejść na <a href="index.php">stronę główną</a></p>';
		}
	}

	else {
		/**
		 * FORMULARZ LOGOWANIA (nie musi ty być bo czyta go poniżej to opcjonalnie)
		 */
	}
	?>

A oto formularz HTML:

<form method="post" action="" >
	<h1>Logowanie</h1>
	<p>Login:</p>
	<input type="text" name="login" maxlength="24" id="login"/>

	<p>Hasło:</p>
	<input type="password" name="pass" maxlength="32" id="pass"/><br/>
					  
	<p id="login-info"><a href="remind-password.php#form-remind">Nie pamiętasz hasła?</a></p>
	<p>Nie posiadasz konta? <a href="register.php#form-register">Zarejestruj się już teraz!</a></p>
						
	<input type="hidden" name="send" value="1" /><br/>
	<input type="submit" value="Zaloguj" class="login"/>
</form>

Wcześniej coś podobnego miałem tylko że z rejestracją takie błędy ale tam udało się je już naprawić a teraz to samo tylko że z logowaniem mi wywala i nie wiem co tu może być źle.

 

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Odnośnie pierwszego: PHP nie dostaje żadnych danych w POST, możesz to naprawić sprawdzając doadtkowo, czy zmienne w ogóle istnieją:

if (isset($_POST['login']) && isset($_POST['pass'])) {
    $login = htmlspecialchars(mysql_real_escape_string($_POST['login']));
    $pass = mysql_real_escape_string($_POST['pass']);
    (...)
}

Odnośnie drugiego błędu, metoda musi być statyczna jeżeli nie operuje na instancji:

public static function getData ($login, $pass) {
    (...)
}

Odnośnie następnego, nie wiem jak u Ciebie jest zdefiniowane `@user::isLogged()`, ale to najpewniej w nim jest błąd.

Non omnis moriar.

Opublikowano
15 godzin temu, TheTroy napisał:

To znowu ja, tylko że teraz mam oto taki problem, że przed logowaniem wywala mi takie informacje:

Wnioskując (a właściwie zgadując) po kodzie, który podałeś, kod w pliku login.php jest wykonywany bez względu na to, czy się faktycznie logujesz, czy może tylko wyświetlasz stronę logowania. Warto więc wykonywać całą procedurę logowania tylko wtedy, kiedy użytkownik wysyła formularz:

<?php

// Zamiast 'send' mogą się pojawić jakieś inne pola formualrza: 'login', 'pass'.
if (isset($_POST['send'])) {
	// Tutaj kod odpowiedzialny za logowanie się użytkownika:
  	// tworzenie sesji, operacje na bazie danych itp.
}

 

Opublikowano
Dnia 7.07.2018 o 09:55, maxaz napisał:

Odnośnie pierwszego: PHP nie dostaje żadnych danych w POST, możesz to naprawić sprawdzając doadtkowo, czy zmienne w ogóle istnieją:


if (isset($_POST['login']) && isset($_POST['pass'])) {
    $login = htmlspecialchars(mysql_real_escape_string($_POST['login']));
    $pass = mysql_real_escape_string($_POST['pass']);
    (...)
}

Odnośnie drugiego błędu, metoda musi być statyczna jeżeli nie operuje na instancji:


public static function getData ($login, $pass) {
    (...)
}

Odnośnie następnego, nie wiem jak u Ciebie jest zdefiniowane `@user::isLogged()`, ale to najpewniej w nim jest błąd.

Kod odpowiadający za user::isLogged():

public function isLogged () {
     if (empty($_SESSION['login']) || empty($_SESSION['pass'])) {
      return false;
     }

 

Cytat

Gdzie dokładnie mam ten kod zastosować bo w pliku mam taki chaos że to jest szok!?

Opublikowano

isset musisz zastosować na stronie, która jest jako `action` w formularzu.

Z tego co widzę, nie masz żadnego frameworka, który by obsłużył takie adnotacje, poza tym znowu używasz metod niestatycznych jak statycznych, jeżeli o isLogged() chodzi. Polecam podszkolenie się z obiektówki w PHP.

Non omnis moriar.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...