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

Osobny plik register.php, ale sama rejestracja na stronie głównej pop-upem.

VPS Starter Arubacloud
0 głosów
484 wizyt
pytanie zadane 8 lipca 2018 w PHP przez Bartłomiej Bolesta Obywatel (1,630 p.)
edycja 8 lipca 2018 przez Patrycjerz

Mam taki problem, że chciałbym, aby okno rejestracji pokazywało się na tej samej stronie na której klika się przycisk rejestracji. Samo to mam i działa świetnie:

<div id="boxpopup" class="box">
 <a onclick="closeOffersDialog('boxpopup');" class="boxclose">X</a>
  <div class="box2">
	<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']);
		}											
	?>

I dalej oczywiście są wszystkie inne dane. Pop up wyskakuje jak na screenie, jest przyciemnienie, po wpisaniu danych błędnych wszystko wyświetla się jak należy.

Na końcu jest:

 <input type="submit" value="Zarejestruj się"/>
</form>

Na górze pliku index.php w tagach php, załączyłem include("register.php"); . I sama rejestracja z tego pliku działa, ale po próbie dołączenia do index.php już nie. Aby dołączyć, tworzę funkcję, tj. zamykam cały kod register.php (to samo co odcinek 3 kursu) w: 

function register()
    { }

Wiem, że trzeba funkcje wywołać w index.php tj. dodać register();, ale tu już mam problem i rejestracja (przejście na pod stronę potwierdzenia rejestracji i dodanie do bazy nie działa). Próbowałem masy różnych rzeczy i nie wiem jak to ugryźć.

Pół roku temu zostawiłem to i poleciałem dalej z kursem, a potem nie miałem czasu w ogóle. Teraz wróciłem do całej sprawy i nadal nie mogę tego ugryźć.

1
komentarz 8 lipca 2018 przez Mariusz08 Maniak (62,300 p.)
Możesz podać kod? Niekoniecznie pamiętam 3 odc kursu MZ a i nie wiem jak wygląda kod po Twoich zmianach.
komentarz 8 lipca 2018 przez Bartłomiej Bolesta Obywatel (1,630 p.)
Odpowiedziałem pod swoim wpisem.

2 odpowiedzi

0 głosów
odpowiedź 8 lipca 2018 przez Bartłomiej Bolesta Obywatel (1,630 p.)

Nie chciałem spamować całością, ale jak trzeba:

 

<?php

	session_start();
	include("register.php");
	
	if(isset(($_SESSION['loged']))&&($_SESSION['loged']==true))
	
	{
		header('Location: home.php');
		exit();
	}


?>
<!DOCTYPE HTML>
<html lang="pl">
	<head>
		<meta charset="utf-8" />
		<title>Title</title>
		<meta name="description" content="" />
		<meta name="keywords" content="" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />


		<link href="https://fonts.googleapis.com/css?family=Mukta+Malar:400,700&amp;subset=latin-ext" rel="stylesheet">
		
		<link rel="stylesheet" href="css/style.css" type="text/css" />
		<link rel="stylesheet" href="css/reg_box_style.css" type="text/css" />
		<link rel="stylesheet" href="css/register_style.css" type="text/css" />
		<link rel="stylesheet" href="css/login_style.css" type="text/css" />
		<link rel="stylesheet" href="css/fontello/css/fontello.css" type="text/css" />
		
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
		<script src='https://www.google.com/recaptcha/api.js'></script>

		<script type="text/javascript" src="skrypty.js"></script>
		<script type="text/javascript" src="scripts/reg_box_script.js"></script>
		<script type="text/javascript" src="scripts/drop_menu.js"></script>
	<!---<script type="text/javascript" src="//ciasteczka.eu/cookiesEU-latest.min.js"></script>--->
	
	
	</head>
	

	<body>
	
		<header>
				<div class="logo">
						<img src="img/logo.png" />
				</div>
				<nav>
						<div class="menu">
								<ol>
									<li>x</li>
									<li>y</li>
									<li>Z</li>
									<li>a</li>
									<li>b</li>
								</ol>
						
						</div>
				<nav>
		</header>

		<main>
			<section>
				<div id="container">
										
				<form action="login.php" method="post">
					
					<input type="text" name="login" placeholder="email" onfocus="this.placeholder=' ' " onblur="this.placeholder='email' "/> 
					<input type="password" name="pass" placeholder="hasło" onfocus="this.placeholder=' ' " onblur="this.placeholder='haslo' "  id="myInput"/>
					<label>
						<input type="checkbox" onclick="myFunction()" class="previewpass">
						<div class="previewpass2">Pokaż Hasło</div>
					</label>

					
					<?php
						if(isset($_SESSION['logerror']))
							echo $_SESSION['logerror'];
							unset($_SESSION['logerror']);
						
					?> 
					
					<div class="unfold-menu">
										<select class="server-choice">
												<option>Beta</option>
												<option>Alfa</option>
												<option>1.0</option>						
										</select>
					</div>
					
					<input type="submit" value="Zaloguj się"/>
					<span><br>Lub</span>
		
				</form>
				
						<div id="overlay" class="overlay"></div>
						<a style="cursor: pointer;" onclick="openOffersDialog();" class="tipTip"><input type="button" class="register" value="Zarejestruj"/></a>
						
								<input type="button" class="forgot" value="Przypomnienie danych logowania."/>
								
						
				</div>
						
						<div id="boxpopup" class="box">
								<a onclick="closeOffersDialog('boxpopup');" class="boxclose">X</a>
									<div class="box2">
											<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_pass1']))
															{
																echo $_SESSION['fr_pass1'];
																unset($_SESSION['fr_pass1']);
															}											
														?>" name="pass1" /><br />
														
												<?php
													if(isset($_SESSION['e_pass']))
													{
														echo '<div class="error">'.$_SESSION['e_pass'].'</div>';
														unset($_SESSION['e_pass']);
													}										
												?>
												
												Powtórz hasło: <br /> <input type="password" value="<?php
															if(isset($_SESSION['fr_pass2']))
															{
																echo $_SESSION['fr_pass2'];
																unset($_SESSION['fr_pass2']);
															}													
												?>" name="pass2" /><br />
												
												
												
												<label>
														<input type="checkbox" name="regulamin" <?php 
															if(isset($_SESSION['fr_regulations']))
															{
																echo "checked";
																unset($_SESSION['fr_regulations']);
															}
														?>/> Akceptuję regulamin <a href=""></a><br />
												</label>
												<?php
													if(isset($_SESSION['e_regulations']))
													{
														echo '<div class="error">'.$_SESSION['e_regulations'].'</div>';
														unset($_SESSION['e_regulations']);
													}									
												?>
												
												
												
												<div class="g-recaptcha" data-sitekey="6LeRZz8UAAAAAKvnzyVgHYpA8F87l9mHgnxpU-mF"></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>
											</div>
								
						</div>
						
			</section>
			<section>		
						<div class="news">
						</div>
			</section>
		</main>
	
	</body>
</html>
<?php

	function register()
	{
	/*session_start();*/
	
	
	if(isset(($_SESSION['loged']))&&($_SESSION['loged']==true))
	
	{
		header('Location: home.php');
		exit();
	}
	
	if(isset($_POST['email'])) //jeśli przesłano formularz - sprawdzenie poprzez sprawdzenie chociaż jednej zmiennej
	{
		//Udana Walidacja? Załóżmy, że tak!
		$all_OK=true;
		
		//Sprawdzanie poprawności nicka
		$nick = $_POST['nick'];
		
		//Sprawdzenie długości nicka:
		if(strlen($nick)<3 || (strlen($nick)>20))
		{	
			$all_OK=false;
			$_SESSION['e_nick']="Nick musi posiadać od 3 do 20 znaków!";
		}
		
		//
		//ctype_alnum //zwraca true jeśli wszystkie znaki sa alfanumeryczne
		if(ctype_alnum($nick)==false)
		{
			$all_OK=false;
			$_SESSION['e_nick']="Nick może składać się tylko z liter i cyfr (bez polskich znaków)";
		}
		
		//sprawdz poprawność emaila
		
		$email=$_POST['email'];
		$emailsafe = filter_var($email, FILTER_SANITIZE_EMAIL); //SPECJALNY filtr stosowany do maila, aby wyczyscic go z niebezpiecznych znakow
		
		//   Jeżeli (ZWALIDUJ POPRAWNOŚĆ TEGO ADRESU EMAIL) nie jest poprawny lub wyczyszony email nie równa się wpisanemu (np. PAWEŁ@tlen.pl vs PAWE@tlen.pl)
		if((filter_var($emailsafe, FILTER_VALIDATE_EMAIL)==FALSE || $emailsafe!=$email))
		
		{
			$all_OK=false;
			$_SESSION['e_email']="Podaj poprawny adres email";
		}
	
		//Sprawdz poprawnosc hasla
		$pass1 = $_POST['pass1'];
		$pass2 = $_POST['pass2'];
		
		if((strlen($pass1)<8) || (strlen($pass1)>30))
		{
			$all_OK=false;
			$_SESSION['e_pass']="Hasło musi posiadać od 8 do 30 znaków.";
		}
		if($pass1!=$pass2)
		{
			$all_OK=false;
			$_SESSION['e_pass']="Hasła nie są takie same!";
		}
		
			$pass_hash = password_hash($pass1, PASSWORD_DEFAULT);
		
		
		//Czy zaakceptowano regulamin
		if (!isset($_POST['regulations']))
		{
			$all_OK=false;
			$_SESSION['e_regulations']="Potwierdz akceptację regulaminu";
		}
		
		// Bot or not? Oto jest pytanie!
		$secret = '';
		$check = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
		$answer = json_decode($check);
		
		if($answer->success==false)
		{
			$all_OK=false;
			$_SESSION['e_bot']="Potwierdz, że nie jesteś botem";
		}
		
		//Zapamiętaj wprowadzone dane
		$_SESSION['fr_nick'] = $nick;
		$_SESSION['fr_email'] = $email;
		$_SESSION['fr_pass1'] = $pass1;
		$_SESSION['fr_pass2'] = $pass2;
		if (isset($_POST['regulations'])) $_SESSION['fr_regulations'] = true;
		
		
		
		//Sprawdzenie czy mail już istnieje w bazie. Aby to zrobić trzeba się z nią połączyć:
		require_once "connect.php";
		mysqli_report(MYSQLI_REPORT_STRICT);
		
		try
		{
			$connect = new mysqli($host, $db_user, $db_password, $db_name);
			
			if ($connect->connect_errno!=0) 
			{
				throw new Exception(mysqli_connect_errno()); // Błąd połączenia - rzuć nowym wyjątkiem
			}
			else
			{
				//Sukces połączenia. Wykonaj zapytanie
				//Czy email juz istnieje?
				$result = $connect->query("SELECT DBUserID FROM users WHERE DBEmail='$email'"); //połączenie sprawdzające do bazy,
				
				if(!$result) throw new Exception($connect->error); //jeżeli połączenie sprawdzające sie nie uda to rzuc wyjatkiem i pokaz blad na ekranie
				{
					$how_many_mails = $result->num_rows; // jeżeli zapytanie się udalo to pobierzemy ilość zwroconych rekordów - ile rekordów z takim emailem istnieje w bazie
				}
				if($how_many_mails>0) // jeśli ilość rekordów zwróconych jest wieksze od 0 to ktoś juz zarejestrowal sie na tkai mail
				{
					$all_OK=false;
					$_SESSION['e_email']="Ten adres email został już przypisany do innego konta";
				}
				
				//Czy login juz istnieje?
				$result = $connect->query("SELECT DBUserID FROM users WHERE DBLogin='$nick'"); //połączenie sprawdzające do bazy,
				
				if(!$result) throw new Exception($connect->error); //jeżeli połączenie sprawdzające sie nie uda to rzuc wyjatkiem i pokaz blad na ekranie
				{
					$how_many_nicks = $result->num_rows; // jeżeli zapytanie się udalo to pobierzemy ilość zwroconych rekordów - ile rekordów z takim emailem istnieje w bazie
				}
				if($how_many_nicks>0) // jeśli ilość rekordów zwróconych jest wieksze od 0 to ktoś juz zarejestrowal sie na tkai mail
				{
					$all_OK=false;
					$_SESSION['e_nick']="Istnieje już gracz o takim loginie! Wybierz inny";
				}
				
						//Gdy wszystko ok
				if($all_OK==true)
				{
					//Hurra, wszystkie testy zaliczone, dodajemy gracza do bazy.
					if($connect->query("INSERT INTO users (DBUserID, DBLogin, DBPass, DBEmail) VALUES (NULL, '$nick', '$pass_hash','$email')")) //połączenie dodające do bazy,
					{
						$_SESSION['successfulreg'] = true;
						header('Location: welcome.php');
					}
					else
					{
						throw new Exception($connect->error);
					}
				}
				
			$connect->close();
			}
			
			
			
			
		}
		catch(Exception $errors) //złap wyjatki, jesli jakies zostały rzucone
		{
			echo '<span style="color: red;">"Błąd serwera! Przepraszamy za niedogodności i prosimy i rejestracje w innym terminie"</span>';
			echo '<br /> Informacja developerska: '.$errors;
		}
	}
	}
?>

 

0 głosów
odpowiedź 8 lipca 2018 przez Mariusz08 Maniak (62,300 p.)
Nie widzę, abyś wywoływał funkcję register()
komentarz 8 lipca 2018 przez Bartłomiej Bolesta Obywatel (1,630 p.)
Wyczyściłem to przed napisaniem tematu. Jak pisałem "Wiem, że trzeba funkcje wywołać w index.php tj. dodać register();, ale tu już mam problem".

Nie wiem jak to zrobić. Albo gdzie. Próbowałem różnych rzeczy i nic nie działało, więc wróciłem do "czystego" i pytam.
1
komentarz 8 lipca 2018 przez Mariusz08 Maniak (62,300 p.)
Po include wywołaj tą funkcję, czyli po include daj register().
komentarz 8 lipca 2018 przez Bartłomiej Bolesta Obywatel (1,630 p.)

No i właśnie mi nie działa:

 

E:\xampp\htdocs\GWPHP\register.php on line 102

Notice: Undefined variable: db_user in E:\xampp\htdocs\GWPHP\register.php on line 102

Notice: Undefined variable: db_password in E:\xampp\htdocs\GWPHP\register.php on line 102

Notice: Undefined variable: db_name in E:\xampp\htdocs\GWPHP\register.php on line 102
"Błąd serwera! Przepraszamy za niedogodności i prosimy i rejestracje w innym terminie"
Informacja developerska: Exception: No database selected in E:\xampp\htdocs\GWPHP\register.php:114 Stack trace: #0

Przy czym z bazą normalnie łączy, gdy robię to w osobnych plikach, więc tam wszystko dobrze jest (na logowaniu też łączy).

Podgląd na linie 100-122

 

try
		{
			$connect = new mysqli($host, $db_user, $db_password, $db_name);
			
			if ($connect->connect_errno!=0) 
			{
				throw new Exception(mysqli_connect_errno()); // Błąd połączenia - rzuć nowym wyjątkiem
			}
			else
			{
				//Sukces połączenia. Wykonaj zapytanie
				//Czy email juz istnieje?
				$result = $connect->query("SELECT DBUserID FROM users WHERE DBEmail='$email'"); //połączenie sprawdzające do bazy,
				
				if(!$result) throw new Exception($connect->error); //jeżeli połączenie sprawdzające sie nie uda to rzuc wyjatkiem i pokaz blad na ekranie
				{
					$how_many_mails = $result->num_rows; // jeżeli zapytanie się udalo to pobierzemy ilość zwroconych rekordów - ile rekordów z takim emailem istnieje w bazie
				}
				if($how_many_mails>0) // jeśli ilość rekordów zwróconych jest wieksze od 0 to ktoś juz zarejestrowal sie na tkai mail
				{
					$all_OK=false;
					$_SESSION['e_email']="Ten adres email został już przypisany do innego konta";
				}

 

1
komentarz 8 lipca 2018 przez Mariusz08 Maniak (62,300 p.)
A jaka jest zawartość pliku connect.php?
komentarz 8 lipca 2018 przez Bartłomiej Bolesta Obywatel (1,630 p.)

Normalnie łączyło rejestrację bez podziału i łączy na logowaniu, więc jest dobrze wszystko.



 

<?php

	
		
		$host = "localhost";
		$db_user = "root";
		$db_password = "";
		$db_name = "nazwa";


?>

 

1
komentarz 8 lipca 2018 przez Mariusz08 Maniak (62,300 p.)
A spróbuj ręcznie wstawić wartości z pliku config.php do zmiennej która nawiązuje połączenie.
komentarz 8 lipca 2018 przez Bartłomiej Bolesta Obywatel (1,630 p.)

Hmy. Nie miałem tego pliku w tym projekcie, ale był w innym (podczas nauki różne lekcje w różnych robiłem). Ale tylko w jednym. I szczerze to nie pamiętam o co z nim chodziło. Muszę wrócić do odpowiedniej lekcji.

Ale, przerzucenie tego pliku nic nie dało (również ze zmianą stałych dla baz danych).

Samo ręczne wstawienie również wyrzuciło błąd, a ręcznie dodanie z pliku connect nie dało nic - zapomniałem wcześniej dodać, że te błędy:

 


E:\xampp\htdocs\GWPHP\register.php on line 102
 
Notice: Undefined variable: db_user in E:\xampp\htdocs\GWPHP\register.php on line 102
 
Notice: Undefined variable: db_password in E:\xampp\htdocs\GWPHP\register.php on line 102
 
Notice: Undefined variable: db_name in E:\xampp\htdocs\GWPHP\register.php on line 102
"Błąd serwera! Przepraszamy za niedogodności i prosimy i rejestracje w innym terminie"
Informacja developerska: Exception: No database selected in E:\xampp\htdocs\GWPHP\register.php:114 Stack trace: #0

też wyświetlają się tylko raz na jakiś czas.Zazwyczaj nie ma żadnego efektu, po prostu wraca do strony głównej.

1
komentarz 8 lipca 2018 przez Mariusz08 Maniak (62,300 p.)

Samo ręczne wstawienie również wyrzuciło błąd

Jaki błąd? 

komentarz 9 lipca 2018 przez Bartłomiej Bolesta Obywatel (1,630 p.)

Już nieistotne ;D. Dzięki za pomoc. Rozwiązanie było trywialne, ale żeby do niego dojść musiałem podejść do sprawy trochę inaczej. Chciałem już potestować każdy kawałek kodu osobno i gdy do tego zacząłem się przygotowywać to mogłem (teraz dopiero) zauważyć, że wywala na czerwono info o niezaakceptowaniu regulaminu xD. Ponieważ nie działało wcześniej to nie kodowałem dalej i po wysłaniu formularza nie było jeszcze zrobione, żeby pop - up zostawał w przypadku nieudanej rejestracji i dlatego nigdy nie widziałem komunikatu "Potwierdź akceptację regulaminu". A dlaczego nie akceptowało go? Po chwili badania wszystkiego z regulaminem znalazłem problem. Przy robieniu tego projektu i przenoszeniu części kodów z lekcji, wszystkie nazwy dawałem angielskie. Poza jedną:

 

<label>
														<input type="checkbox" name="regulamin" <?php 
															if(isset($_SESSION['fr_regulations']))
															{
																echo "checked";
																unset($_SESSION['fr_regulations']);
															}

Pff. Tyle nerwów.

Nie jestem pewny, czemu pojawiały się błędy dotyczące połączenia z bazą, ale też wiem co je wywoływało - przy kopaniu się z kodem - przeprawianiu i cofaniu(!), nie dałem komentarza z powrotem przy jednym z "register();" i w konsekwencji były w kodzie dwa.

Podobne pytania

0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 27 maja 2019 w PHP przez Paszek20 Nowicjusz (200 p.)
0 głosów
1 odpowiedź 423 wizyt
pytanie zadane 2 grudnia 2018 w PHP przez jakubmark Początkujący (370 p.)
0 głosów
3 odpowiedzi 257 wizyt
pytanie zadane 24 września 2015 w PHP przez dorgovor Użytkownik (580 p.)

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...