Formularz logowanie i rejestracja PHP i MySQL


(Norbert Koczara) #1

Witam, stworzyłem taki oto formularz rejestracji i logowania na zaliczenie, ale nie bardzo wiem jak zrobić, aby po rejestracji przenosiło użytkownika na stronę logowania

rejestracja.php

<?php

	mysql_connect("localhost","root","toor");

	mysql_select_db("zaliczenie");


	function filtruj($zmienna)

	{

	    if(get_magic_quotes_gpc())

	        $zmienna = stripslashes($zmienna); // usuwamy slashe


		// usuwamy spacje, tagi html oraz niebezpieczne znaki

	    return mysql_real_escape_string(htmlspecialchars(trim($zmienna)));

	}


	if (isset($_POST['rejestruj']))

	{

		$login = filtruj($_POST['login']);

		$haslo1 = filtruj($_POST['haslo1']);

		$haslo2 = filtruj($_POST['haslo2']);

		$email = filtruj($_POST['email']);


		// sprawdzamy czy login nie jest już w bazie

		if (mysql_num_rows(mysql_query("SELECT login FROM uzytkownicy WHERE login = '".$login."';")) == 0)

		{

			if ($haslo1 == $haslo2) // sprawdzamy czy hasła takie same

			{

				mysql_query("INSERT INTO `uzytkownicy` (`login`, `haslo`, `email`)

					VALUES ('".$login."', '".sha1($haslo1)."', '".$email."');");


				echo "Konto zostało utworzone!";

			}

			else echo "Hasła nie są takie same";

		}

		else echo "Podany login jest już zajęty.";

	}

	?>



	Login: 



	Hasło: 



	Powtórz hasło: 



	Email:

logowanie.php

<?php

	session_start();

	mysql_connect("localhost","root","toor");

	mysql_select_db("zaliczenie");

	?>


	<?php

	if (isset($_GET['wyloguj']) == 1) 

	{

		$_SESSION['zalogowany'] = false;

		session_destroy();

	}

	?>


	<?php

	function filtruj($zmienna)

	{

	    if(get_magic_quotes_gpc())

	        $zmienna = stripslashes($zmienna); // usuwamy slashe


		// usuwamy spacje, tagi html oraz niebezpieczne znaki

	    return mysql_real_escape_string(htmlspecialchars(trim($zmienna)));

	}


	if (isset($_POST['loguj']))

	{

		$login = filtruj($_POST['login']);

		$haslo = filtruj($_POST['haslo']);


		// sprawdzamy czy login i hasło są dobre

		if (mysql_num_rows(mysql_query("SELECT login, haslo FROM uzytkownicy WHERE login = '".$login."' AND haslo = '".sha1($haslo)."';")) > 0)

		{


			$_SESSION['zalogowany'] = true;

			$_SESSION['login'] = $login;


			// zalogowany


		}

		else echo "Wpisano złe dane.";


	}


	if ($_SESSION['zalogowany'] == true)

	{

		echo "Witaj ".$_SESSION['login']."

";


		echo '[Wyloguj]';

	}

	?>


	<?php if ($_SESSION['zalogowany'] == false): ?>



	Login: 



	Hasło: 



 


	<?php endif; ?>


	<?php mysql_close(); ?>[/code]

poza tym na stronie logowania wyrzuca mi błąd lini 52 i 60:

*if ($_SESSION['zalogowany'] == true) line 52

*<?php if ($_SESSION['zalogowany'] == false): ?> line 60

błąd: Notice: Undefined index: zalogowany in C:\xampp\htdocs\Projekty\Logowanie\logowanie.php on line 52

Notice: Undefined index: zalogowany in C:\xampp\htdocs\Projekty\Logowanie\logowanie.php on line 60


(kostek135) #2

Oba to nie błędy, tylko powiadomienia. Informują o tym, że zmienna nie jest zadeklarowana. Poczytaj o deklaracji zmiennych.


(j24) #3

Może jestem stary i na PhP znam się niewiele. Coprawda zrobiłem kilka stron z użyciem PHP, które nawet działają:).

  1. Regulamin tego forum coś chyba mówi o odrabianiu pracy domowej za kogoś.

  2. W PHP deklaracja zmiennej nie jest konieczna ale te błędy to oczywista oczywistość gdyż jak np ma działać instrukcja if gdy jej po prostu nie ma. Po if (warunek) nie ma bloku co ma się dziać. { instrukcje do wykonania }.

  3. Pełne poprawienie tego chyba jest dość trudne.

  4. Nie rozumie takiego zapisu:

<?php

coś tam

?>

i znowu

<?php

coś tam

?>

Na co ma skutkować takie rozdzielanie poszczególnych fragmentów.


(kostek135) #4

O ile do "ale" się zgodzę, o tyle dalsza część to brednie. Po której instrukcji if, nie widzisz bloku?

Wręcz przeciwnie, jest banalne. Po pierwsze wszystko działa, to są tylko Notice'y, patrz mój pierwszy post. Poprawić je można deklarując te zmienne, bądź sprawdzić czy istnieją, zanim się do nich odniesiemy.

Taki zabieg ma na celu uciec od przetwarzania przez interpreter PHP. Przykładowo, jeśli mamy większy blok HTMLa. Niesie to kilka benefitów:

1) Jest szybciej, bo interpreter nie przetwarza statycznych bazgrołów,

2) IDE ma szanse taki kod zwalidować (kiedy jest to część stringa w echo to nic nie zrobi, bo tam poprawne jest wszystko),

3) Jest to naturalny krok w stronę wykorzystania wzorca MVC, a o jego zaletach mówić nie muszę.


(j24) #5

A ja nie widzę bloku po If w linii 52 o czym pisze autor - może mam słaby wzrok :slight_smile:

<?php if ($_SESSION['zalogowany'] == false): ?>

dalej jest zwykły HTML

Jak może być blokiem coś co nie jest w PHP?

Co do mojego stwierdzenia

  1. Pełne poprawienie tego chyba jest dość trudne. no to brakowało :slight_smile: bo ja wolałbym po prostu to napisać od początku :slight_smile:

Co do ostatniego faktu:

Od czego on ucieka jeżeli między poszczególnymi fragmentami PHP nie ma nić tylko wychodzi z PHP i natychmiast wraca s powrotem?


(kostek135) #6

Masz słaby wzrok.

Radzę się zapoznać z dostępnymi składniami w PHP. Jest między innymi taka, która przypomina basha. Blok się kończy wraz z endif;

Ale co? Tu wszystko działa. To są ostrzeżenia o najniższym stopniu. Często po prostu wyłącza się ich generowanie w serwerze produkcyjnym.

Podejrzewam, że usunięte zostały kawałki kodu HTML, które nic nie wnosiły. W każdym razie nie jest to błąd, więc nie ma znaczenia. Pisałem po co ogólnie używa się ucieczki od interpretera. Np. w fragmencie, w którym twierdzisz, że nie ma bloku, ucieczka od HTML ma miejsce. Być może też pogrupował sobie instrukcje, bo uznał, że tak będzie czytelniej. Kwestia gustu. W każdym razie powtarzam, to nie jest błąd.


(j24) #7

Rzeczywiście znalazłem w innych źródłach potwierdzenie, że taka składnia jest możliwa. Chodzi mi o linijkę 52 o której dyskutujemy.

Co do nagminnego wchodzenia i wychodzenia z PHP to nie zgodzę się z Twoją interpretacją. To oczywiście nie jest błąd formalny ale dla mnie jest to zamazywanie istoty programu. Każdy ma swój pogląd na to co jest przejrzyste a co nie.


(kostek135) #8

Z jaką moją interpretacją? Jeśli zostały usunięte fragmenty HTML na potrzeby odnalezienia meritum problemu, to nie ma czego interpretować. Jest szybciej EOT. W przeciwnym przypadku, autor tak lubi co też kończy temat.

To o czym dyskutujemy? Autor tego tematu ma swój pogląd, na to co dla niego jest czytelne. Mi nie przeszkodziło to w każdym razie w stwierdzeniu, że wszystko jest ok i został podniesiony niepotrzebny raban z powodu dwóch notice-ów, które można usunąć issetem. Można też mając świadomość, że są one generowane, ale przy tak zbudowanych warunkach nie mają wpływu na działanie, je zwyczajnie olać. I tak notice-y są praktycznie zawsze wyłączane przy deploy-owaniu.