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

sprawdzenie czy użytkownik o podanej nazwie istnieje PHP

HackNation - ogólnopolski hackathon
0 głosów
941 wizyt
pytanie zadane 28 lutego 2020 w PHP przez Hardwell Dyskutant (9,060 p.)

Witam, uczę się php, więc stwierdziłem, że napiszę coś co mnie troche nauczy, i padło na system rejestracji i logowania do strony, tutaj mam problem, a mianowicie, chciałem sprawdzić czy użytkownik o podanym loginie i adresie email istnieją, aby się nie duplikowały, i niby to co napisałem działa, tylko nie do końca, a mianowicie:

jak założę konto o loginie np Admin i emailu Admin@o.pl jest ok, rejestruje się, jak ponownie spróbuję zarejestrować się na te same dane (logina Admin email Admin@o.pl) wyskoczy błąd, że istnieje o takim samym loginie i emailu, zaś jak zrobię na inne dane np(login Ewa email Ewa@o.pl) jest ok, rejestruje się, ale po tym jak wpiszę zaś dane (logina Admin email Admin@o.pl) to i tak się rejestruje. poniżej wklejam kodzik

<?php
	
	include('connect.php');
	
	$login =	$_POST['login'];
	$pass =		$_POST['pass'];
	$email =	$_POST['email'];
	
	$pass_md5 = md5($pass);
	
	$succes_record_add = "Zostałeś(aś) zarejestrowany(a).";
	$error_record_add = "Błąd, nie zostałeś(aś) zarejestrowany(a)";
	$error_connect_database = "Błąd podczas łączenia z bazą danych.";
	$error_value = "Wypełnij wszystkie pola!";
	$login_repeat_error = "Ten login należy do innego użytkownika!";
	$email_repeat_error = "Ten adres E-mail jest przypisany do innego konta!";
	
	if($login and $pass and $email){
		$database = mysqli_select_db($connect_database, 'project')
		or die ($error_connect_database);
	
		function login_repeat($connect_database){
			$login_sect;
			$login_select = mysqli_query($connect_database,"SELECT login FROM account");
			while($row = mysqli_fetch_array($login_select)){
				$login_sect = $row['login'];
			}
			return $login_sect;
		}
		
		function email_repeat($connect_database){
			$email_sect;
			$email_select = mysqli_query($connect_database,"SELECT email FROM account");
			while($row = mysqli_fetch_array($email_select)){
				$email_sect = $row['email'];
			}
			return $email_sect;
		}
		
		if($login == login_repeat($connect_database) && $email == email_repeat($connect_database)){
			echo "$login_repeat_error<br>$email_repeat_error";
		}
		
		else if($login == login_repeat($connect_database)){
			echo $login_repeat_error;

		}
		
		else if($email == email_repeat($connect_database)){
			echo $email_repeat_error;

		}
		
		else{
			$instruction = mysqli_query($connect_database,"INSERT INTO account VALUES ('NULL', '$login', '$pass_md5', '$email');");
			if($instruction){
				echo $succes_record_add;
			}
			else{
				echo $error_record_add;
			}
			mysqli_close($connect_database);
		}
	}
	else{
		echo $error_value;
	}
?>

Co może być nie tak?

proszę o minimalną krytykę, jeśli chodzi o kod, jestem początkujący 

 

komentarz 29 lutego 2020 przez Hardwell Dyskutant (9,060 p.)
...

3 odpowiedzi

0 głosów
odpowiedź 28 lutego 2020 przez Comandeer Guru (607,330 p.)

Nadpisujesz wiersz w tabeli o id 'NULL''NULL' to nie to samo co NULL ;)

No i nie hashuj haseł przez MD5! W PHP jest dedykowana funkcja password_hash.

komentarz 28 lutego 2020 przez Hardwell Dyskutant (9,060 p.)
W jaki sposób napisać samo NULL?
komentarz 28 lutego 2020 przez Comandeer Guru (607,330 p.)

No NULL… Bez apostrofów.

komentarz 28 lutego 2020 przez Hardwell Dyskutant (9,060 p.)
To rozwiąże mój problem?
0 głosów
odpowiedź 29 lutego 2020 przez Hardwell Dyskutant (9,060 p.)
up, nie pomogło w rozwiązaniu problemu
0 głosów
odpowiedź 29 lutego 2020 przez Ehlert Ekspert (215,070 p.)

Czytam tak ten Twój kod i nie za bardzo mogę rozkminić co tutaj ma miejsce. Dzieje się coś takiego.

  1. Rejestrujesz usera admin admin
  2. Próbujesz dodać drugiego takie. Jest, błąd system działa poprawnie. 
  3. Dodajesz drugiego dobrego usera. W bazie jest już dwóch. 
  4. Nagle okazuje się że user można dodać kolejnego admin admin. 

Takie błędy w sumie powinieneś wyłapywać sam, bo to rozwija umiejętność debugowania kodu, ale... Wszystkiemu winna jest funkcja email oraz login repeat. Zauważ że wyciągasz z bazy dane wszystkich userow. Już na poziomie samego query sql powinieneś określić o kogo chodzi. Po drugie potem robisz for po wynikach i za każdym razem nadpisujesz wartość zmiennej email_sect.

W efekcie tego jak funkcja kończy się wykonywać, to zwraca dane ostatniego usera.

komentarz 29 lutego 2020 przez Hardwell Dyskutant (9,060 p.)
właśnie powyższym sposobem pobiera mi z bazy tylko ostatniego zarejestrowanego użytkownika a nie wszystkich, więc nie wiedziałem do końca w czym leży problem
komentarz 29 lutego 2020 przez Ehlert Ekspert (215,070 p.)
A masz zrobić tak, żeby query szukało w bazie usera z danymi które mają być niepowtarzalne.

Podobne pytania

0 głosów
1 odpowiedź 218 wizyt
0 głosów
2 odpowiedzi 1,191 wizyt

93,608 zapytań

142,531 odpowiedzi

323,004 komentarzy

63,102 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

Kursy INF.02 i INF.03
...