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

Mirosław Zelent kurs php odc 3 formularz rejestracji

Object Storage Arubacloud
+1 głos
414 wizyt
pytanie zadane 11 stycznia 2019 w PHP przez sebol304 Początkujący (290 p.)

Witam 

Na początek chciałbym zaznaczyć, że jest mój pierwszy wpis na forum wiec nie wiem czy wszystko zadziała prawidłowo 

Mój problem polega na tym, że w formularzu rejestracji, który stworzyłem na podstawie kursu Pana Mirosława Zelenta pojawił się mały bug otóż mimo użycia funkcji ctype_alnum na zmiennej $nick w 18 linijce kodu Jakimś cudem mogę dodać do bazy gracza o nazwie król, królewicz, itd mimo ,że użycie tej funkcji miało eliminować polskie znaki z nicka dodam iż wszystkie inne polskie ogonki ą ,ś,ć ż ź są wyłapywane prawidłowo jako błędy 

co ciekawe mimo iż udało się dodać do bazy danych gracza król  na żaden sposób nie da się na konto tego gracza zalogować 

Proszę o wskazanie miejsca gdzie popełniłem błąd i o wyrozumiałość jeżeli opis błędu jest dla kogoś mało zrozumiały  

<?php
	session_start();
	
	if(isset($_POST['email']))
	{
		// udana walidacja załóżmy że tak
		$wszystko_ok=true;
		
		// sprawdzanie poprawnosci nicka
		$nick=$_POST['nick'];
		
		if ((strlen($nick)<3) || (strlen($nick)>20))
		{
			$wszystko_ok=false;
			$_SESSION['e_nick']="Nick musi posiadać od 3 do 20 znaków ";
		}
		
		if(ctype_alnum($nick)==false)
		{
			$wszystko_ok=false;
			$_SESSION['e_nick']="Nick może składać się tylko z liter i cyfr (bez polskich znaków)";
		}
		// sprawdzanie poprawnosci email
		$email=$_POST['email'];
		$emailB=filter_var($email, FILTER_SANITIZE_EMAIL);
		if((filter_var($emailB, FILTER_VALIDATE_EMAIL)==false) ||($emailB!=$email))
		{
			$wszystko_ok=false;
			$_SESSION['e_email']="Podaj poprawny adres E-mail";
		}
		//sprawdzanie poprawnosci hasla
		$haslo1=$_POST['haslo1'];
		$haslo2=$_POST['haslo2'];
		if((strlen($haslo1)<8) || (strlen($haslo1)>20))
		{
			$wszystko_ok=false;
			$_SESSION['e_haslo']="Hasło musi posiadać od 8 do 20 znaków";
		}
		if($haslo1!=$haslo2)
		{
			$wszystko_ok=false;
			$_SESSION['e_haslo']="Podane hasła nie są identyczne";
		}
		$haslo_hash=password_hash($haslo1, PASSWORD_DEFAULT);
		//czy zaakceptowano regulamin
		if(!isset($_POST['regulamin']))
		{
			$wszystko_ok=false;
			$_SESSION['e_regulamin']="Potwierdź akceptację regulaminu";
		}
		//Bot or not oto jest pytanie
		$sekret="6Lex04EUAAAAAHp8_vgdXJh6yPE1fbq6YV4NMwNV";
		$sprawdz=file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$sekret.'&response='.$_POST['g-recaptcha-response']);
		$odpowiedz=json_decode($sprawdz);
		if($odpowiedz->success==false)
		{
			$wszystko_ok=false;
			$_SESSION['e_bot']="Potwierdź że nie jesteś Botem";
		}
		//Zapamietaj wprowadzone danego
		$_SESSION['fr_nick']=$nick;
		$_SESSION['fr_email']=$email;
		$_SESSION['fr_haslo1']=$haslo1;
		$_SESSION['fr_haslo2']=$haslo2;
		if(isset($_POST['$regulamin'])) $_SESSION['fr_regulamin']=true; 
		
		//połączenie z baza danych
		require_once"connect.php";
		mysqli_report(MYSQLI_REPORT_STRICT);
		try
		{
			$polaczenie =new mysqli($host,$db_user,$db_password,$db_name);
			if($polaczenie->connect_errno!=0)
			{
				throw new Exception(mysqli_connect_errno());
				
			}	
			else
			{
				//sprawdzamy czy email juz istnieje
				$rezultat=$polaczenie->query("SELECT id FROM uzytkownicy WHERE email='$email'");
				if(!$rezultat) throw new Exception($polaczenie->error);
				$ile_takich_maili=$rezultat->num_rows;
				if($ile_takich_maili>0)
				{
					$wszystko_ok=false;
					$_SESSION['e_email']="Istnieje już konto przypisane do danego adresu E-mail";
				}
				// sprawdzamy czy nick juz istnieje
				$rezultat=$polaczenie->query("SELECT id FROM uzytkownicy WHERE user='$nick'");
				if(!$rezultat) throw new Exception($polaczenie->error);
				$ile_takich_nickow=$rezultat->num_rows;
				if($ile_takich_nickow>0)
				{
					$wszystko_ok=false;
					$_SESSION['e_nick']="Istnieje juz gracz o takim nicku! wybierz inny.";
				}
				//hura wszystkie testy zaliczone dodajemy gracza do bazy
 
				if($wszystko_ok==true)
				{
					if($polaczenie->query("INSERT INTO uzytkownicy VALUES (NULL, '$nick', '$haslo_hash', '$email',100, 100, 100, 14)"))
					{
						$_SESSION['udanarejestracja']=true;
						header('Location: witamy.php');
					}
				
					else
					{
						throw new Exception($polaczenie->error);
					}
				}
				//zamyknięcie połączenia
				$polaczenie->close();
			}
		}
		catch(Exception $e)
		{
			echo '<span style="color:red">',"Błąd serwera Przepraszamy za niedogodnosci i prosimy o rejestrację w innym terminie",'</span>';
			// na docleowym serwerze wyswietlanie komunikatu o błędach dajemy w komentarz
			echo '<br />Informacja deweloperska:', $e;
		}
	}	
?>


<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8"/>
	<meta http-equiv="X-UA-Compatibile" content="IE=edge,chrome=1" />
	<title>Rejestracja załóż nowe konto</title>
	<script src='https://www.google.com/recaptcha/api.js'></script>
	<style>
		.error
		{
			color:red;
			margin-top:10px;
			margin-bottom:10px;
		}
	</style>

</head>

<body>

	<form method="post">

		Nickname:<br /><input type="text" value="<?php 
			if(isset($_SESSION['fr_nick']))
			{
				echo $_SESSION['fr_nick'];
				unset($_SESSION['fr_nick']);
			}
		
		?>" name="nick"/><br />
		<?php
			if(isset($_SESSION['e_nick']))			
			{
				echo '<div class="error">'.$_SESSION['e_nick'].'</div>';
				unset($_SESSION['e_nick']);
			}	
		?>
		E-mail: <br /><input type="text" value="<?php 
			if(isset($_SESSION['fr_email']))
			{
				echo $_SESSION['fr_email'];
				unset($_SESSION['fr_email']);
			}
		
		?>" name="email"/><br />
		<?php
			if(isset($_SESSION['e_email']))
			{
				echo '<div class="error">'.$_SESSION['e_email'].'</div>';
				unset($_SESSION['e_email']);
			}
		?>
		Twoje haslo : <br /><input type="password" value="<?php 
			if(isset($_SESSION['fr_haslo1']))
			{
				echo $_SESSION['fr_haslo1'];
				unset($_SESSION['fr_haslo1']);
			}
		
		?>" name="haslo1"/><br />
		<?php
			if(isset($_SESSION['e_haslo']))
			{
				echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
				unset($_SESSION['e_haslo']);
			}
		?>
		Powtórz haslo: <br /><input type="password" value="<?php 
			if(isset($_SESSION['fr_haslo2']))
			{
				echo $_SESSION['fr_haslo2'];
				unset($_SESSION['fr_haslo2']);
			}
		
		?>" name="haslo2"/><br />
		<label>
			<input type="checkbox" value="<?php 
			if(isset($_SESSION['fr_regulamin']))
			{
				echo "checked";
				unset($_SESSION['fr_regulamin']);
			}
		
		?>" name="regulamin"/>Akceptuję regulamin
		</label>
		<?php
			if(isset($_SESSION['e_regulamin']))
			{
				echo '<div class="error">'.$_SESSION['e_regulamin'].'</div>';
				unset($_SESSION['e_regulamin']);
			}
		?>
		<div class="g-recaptcha" data-sitekey="6Lex04EUAAAAALsDzo3bn4_GrZkLjJuNStXS0gi5"></div><br />
		<?php
			if(isset($_SESSION['e_bot']))
			{
				echo '<div class="error">'.$_SESSION['e_bot'].'</div>';
				unset($_SESSION['e_bot']);
			}	
		?>
		<input type="submit" value="Zarejestruj się! "/>
		


	</form>

</body>
</html>

 

 

komentarz 12 stycznia 2019 przez PolYGlok Pasjonat (19,450 p.)
Wydaje mi się że coś z utf-8 pokaż plik zaloguj.php

2 odpowiedzi

0 głosów
odpowiedź 12 stycznia 2019 przez sebol304 Początkujący (290 p.)
<?php
	session_start();
	if((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
	{
		header('Location:index.php');
		exit();
	}

	
	require_once "connect.php";
	mysqli_report(MYSQLI_REPORT_STRICT);
	try
	{
		$polaczenie=new mysqli($host,$db_user,$db_password,$db_name);
		if($polaczenie->connect_errno!=0)
		{
			throw new Exception(mysqli_connect_errno());
		}
		else
		{
		
			$login=$_POST['login'];
			$haslo=$_POST['haslo'];
			
			$login = htmlentities($login, ENT_QUOTES, "UTF-8");
			
			if($rezultat = $polaczenie->query(
			sprintf("SELECT* FROM uzytkownicy WHERE user='%s'",
			mysqli_real_escape_string($polaczenie,$login))))
			{
				$ilu_userow=$rezultat->num_rows;
				if($ilu_userow>0)
				{
					$wiersz=$rezultat->fetch_assoc();
					if(password_verify($haslo, $wiersz['pass']))
					{
						$_SESSION['zalogowany']=true;
						$_SESSION['id']=$wiersz['id'];
						$_SESSION['user']=$wiersz['user'];
						$_SESSION['drewno']=$wiersz['drewno'];
						$_SESSION['kamien']=$wiersz['kamien'];
						$_SESSION['zboze']=$wiersz['zboze'];
						$_SESSION['email']=$wiersz['email'];
						$_SESSION['dnipremium']=$wiersz['dnipremium'];
						unset($_SESSION['blad']);
						$rezultat->free_result();					
						header('Location: gra.php');
					}
					else
					{
						$_SESSION['blad']='<span style="color:red">Nieprawidłowy login lub hasło! </span>';
						header('Location:index.php');
					}
				}
				else
				{
					$_SESSION['blad']='<span style="color:red">Nieprawidłowy login lub hasło! </span>';
					header('Location:index.php');
				}
			}
			else
			{
				throw new Exception($polaczenie->error);
			}
		}
		
		
		$polaczenie->close();
	}
	catch(Exception $e)
		{
			echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestrację w innym terminie!</span>';
			echo '<br />Informacja developerska: '.$e;
		}
	


?>

w obydwu plikach ustawione utf-8 bez (BOOM)

0 głosów
odpowiedź 12 stycznia 2019 przez PolYGlok Pasjonat (19,450 p.)
edycja 12 stycznia 2019 przez PolYGlok

W lini 203 masz value zamiast name i w ogóle masz  linie 210 'pchniętą' niż MZ

<?php

	session_start();
	
	if (isset($_POST['email']))
	{
		//Udana walidacja? Załóżmy, że tak!
		$wszystko_OK=true;
		
		//Sprawdź poprawność nickname'a
		$nick = $_POST['nick'];
		
		//Sprawdzenie długości nicka
		if ((strlen($nick)<3) || (strlen($nick)>20))
		{
			$wszystko_OK=false;
			$_SESSION['e_nick']="Nick musi posiadać od 3 do 20 znaków!";
		}
		
		if (ctype_alnum($nick)==false)
		{
			$wszystko_OK=false;
			$_SESSION['e_nick']="Nick może składać się tylko z liter i cyfr (bez polskich znaków)";
		}
		
		// Sprawdź poprawność adresu email
		$email = $_POST['email'];
		$emailB = filter_var($email, FILTER_SANITIZE_EMAIL);
		
		if ((filter_var($emailB, FILTER_VALIDATE_EMAIL)==false) || ($emailB!=$email))
		{
			$wszystko_OK=false;
			$_SESSION['e_email']="Podaj poprawny adres e-mail!";
		}
		
		//Sprawdź poprawność hasła
		$haslo1 = $_POST['haslo1'];
		$haslo2 = $_POST['haslo2'];
		
		if ((strlen($haslo1)<8) || (strlen($haslo1)>20))
		{
			$wszystko_OK=false;
			$_SESSION['e_haslo']="Hasło musi posiadać od 8 do 20 znaków!";
		}
		
		if ($haslo1!=$haslo2)
		{
			$wszystko_OK=false;
			$_SESSION['e_haslo']="Podane hasła nie są identyczne!";
		}	

		$haslo_hash = password_hash($haslo1, PASSWORD_DEFAULT);
		
		//Czy zaakceptowano regulamin?
		if (!isset($_POST['regulamin']))
		{
			$wszystko_OK=false;
			$_SESSION['e_regulamin']="Potwierdź akceptację regulaminu!";
		}				
		
		//Bot or not? Oto jest pytanie!
		$sekret = "PODAJ WŁASNY SEKRET!";
		
		$sprawdz = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$sekret.'&response='.$_POST['g-recaptcha-response']);
		
		$odpowiedz = json_decode($sprawdz);
		
		if ($odpowiedz->success==false)
		{
			$wszystko_OK=false;
			$_SESSION['e_bot']="Potwierdź, że nie jesteś botem!";
		}		
		
		//Zapamiętaj wprowadzone dane
		$_SESSION['fr_nick'] = $nick;
		$_SESSION['fr_email'] = $email;
		$_SESSION['fr_haslo1'] = $haslo1;
		$_SESSION['fr_haslo2'] = $haslo2;
		if (isset($_POST['regulamin'])) $_SESSION['fr_regulamin'] = true;
		
		require_once "connect.php";
		mysqli_report(MYSQLI_REPORT_STRICT);
		
		try 
		{
			$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
			if ($polaczenie->connect_errno!=0)
			{
				throw new Exception(mysqli_connect_errno());
			}
			else
			{
				//Czy email już istnieje?
				$rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE email='$email'");
				
				if (!$rezultat) throw new Exception($polaczenie->error);
				
				$ile_takich_maili = $rezultat->num_rows;
				if($ile_takich_maili>0)
				{
					$wszystko_OK=false;
					$_SESSION['e_email']="Istnieje już konto przypisane do tego adresu e-mail!";
				}		

				//Czy nick jest już zarezerwowany?
				$rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE user='$nick'");
				
				if (!$rezultat) throw new Exception($polaczenie->error);
				
				$ile_takich_nickow = $rezultat->num_rows;
				if($ile_takich_nickow>0)
				{
					$wszystko_OK=false;
					$_SESSION['e_nick']="Istnieje już gracz o takim nicku! Wybierz inny.";
				}
				
				if ($wszystko_OK==true)
				{
					//Hurra, wszystkie testy zaliczone, dodajemy gracza do bazy
					
					if ($polaczenie->query("INSERT INTO uzytkownicy VALUES (NULL, '$nick', '$haslo_hash', '$email', 100, 100, 100, 14)"))
					{
						$_SESSION['udanarejestracja']=true;
						header('Location: witamy.php');
					}
					else
					{
						throw new Exception($polaczenie->error);
					}
					
				}
				
				$polaczenie->close();
			}
			
		}
		catch(Exception $e)
		{
			echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestrację w innym terminie!</span>';
			echo '<br />Informacja developerska: '.$e;
		}
		
	}
	
	
?>

<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	<title>Osadnicy - załóż darmowe konto!</title>
	<script src='https://www.google.com/recaptcha/api.js'></script>
	
	<style>
		.error
		{
			color:red;
			margin-top: 10px;
			margin-bottom: 10px;
		}
	</style>
</head>

<body>
	
	<form method="post">
	
		Nickname: <br /> <input type="text" value="<?php
			if (isset($_SESSION['fr_nick']))
			{
				echo $_SESSION['fr_nick'];
				unset($_SESSION['fr_nick']);
			}
		?>" name="nick" /><br />
		
		<?php
			if (isset($_SESSION['e_nick']))
			{
				echo '<div class="error">'.$_SESSION['e_nick'].'</div>';
				unset($_SESSION['e_nick']);
			}
		?>
		
		E-mail: <br /> <input type="text" value="<?php
			if (isset($_SESSION['fr_email']))
			{
				echo $_SESSION['fr_email'];
				unset($_SESSION['fr_email']);
			}
		?>" name="email" /><br />
		
		<?php
			if (isset($_SESSION['e_email']))
			{
				echo '<div class="error">'.$_SESSION['e_email'].'</div>';
				unset($_SESSION['e_email']);
			}
		?>
		
		Twoje hasło: <br /> <input type="password"  value="<?php
			if (isset($_SESSION['fr_haslo1']))
			{
				echo $_SESSION['fr_haslo1'];
				unset($_SESSION['fr_haslo1']);
			}
		?>" name="haslo1" /><br />
		
		<?php
			if (isset($_SESSION['e_haslo']))
			{
				echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
				unset($_SESSION['e_haslo']);
			}
		?>		
		
		Powtórz hasło: <br /> <input type="password" value="<?php
			if (isset($_SESSION['fr_haslo2']))
			{
				echo $_SESSION['fr_haslo2'];
				unset($_SESSION['fr_haslo2']);
			}
		?>" name="haslo2" /><br />
		
		<label>
			<input type="checkbox" name="regulamin" <?php
			if (isset($_SESSION['fr_regulamin']))
			{
				echo "checked";
				unset($_SESSION['fr_regulamin']);
			}
				?>/> Akceptuję regulamin
		</label>
		
		<?php
			if (isset($_SESSION['e_regulamin']))
			{
				echo '<div class="error">'.$_SESSION['e_regulamin'].'</div>';
				unset($_SESSION['e_regulamin']);
			}
		?>	
		
		<div class="g-recaptcha" data-sitekey="PODAJ WŁASNY SITEKEY!"></div>
		
		<?php
			if (isset($_SESSION['e_bot']))
			{
				echo '<div class="error">'.$_SESSION['e_bot'].'</div>';
				unset($_SESSION['e_bot']);
			}
		?>	
		
		<br />
		
		<input type="submit" value="Zarejestruj się" />
		
	</form>

</body>
</html>

 

komentarz 12 stycznia 2019 przez sebol304 Początkujący (290 p.)

W myśl tego co jest w kursie przynajmniej tak to zrozumiałem

        Twoje hasło: <br /> <input type="password"  value="<?php
            if (isset($_SESSION['fr_haslo1']))
            {
                echo $_SESSION['fr_haslo1'];
                unset($_SESSION['fr_haslo1']);
            }
        ?>" name="haslo1" /><br />
         
        <?php
            if (isset($_SESSION['e_haslo']))
            {
                echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
                unset($_SESSION['e_haslo']);
            }
        ?>       

jest zachowana konstrukcja <input type ="password" value=" tutaj kod php który zapamiętuje wpisane przez nas hasło w formularzu" i na końcu jest atrybut name tego inputa 

przesunięcie jest dlatego ze może całe wyrażenie nie mieści się tutaj przy kopiowaniu 

komentarz 12 stycznia 2019 przez PolYGlok Pasjonat (19,450 p.)
Człowieku co się nie mieści tutaj? Jedyne co się nie mieści tutaj to Twoja ignorancja!!

Jak pisze że masz w linii 203 value jakieś zamiast name="regulamin" które masz w linii 210 to Ty mi piszesz że o jakimś haśle z inputa!

Nie wiem jak masz na komputerze napisane ale zapewne tak samo jak tutaj-ja się odnoszę do kodu który widzę tutaj i własnie po to są z lewej te numerki by szybciej było okazać błąd i się nimi posługiwać. Czytaj ze zrozumieniem.

I usuń ten cudzysłów z linii 210.
komentarz 12 stycznia 2019 przez PolYGlok Pasjonat (19,450 p.)
Co nie oznacza że to załatwia to twój problem z walidacją bo na 'oryginalnym kodzie MZ' też przepuszcza ale tylko 'ó'.

Niech ktoś się bardziej doświadczony wypowie.

Podobne pytania

0 głosów
2 odpowiedzi 338 wizyt
pytanie zadane 10 kwietnia 2019 w PHP przez polonez11212 Początkujący (350 p.)
0 głosów
1 odpowiedź 510 wizyt
pytanie zadane 23 lutego 2016 w PHP przez Kubala94 Początkujący (360 p.)
0 głosów
1 odpowiedź 701 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...