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

Nie działa mi zapytanie sql do rejestracji

Object Storage Arubacloud
0 głosów
433 wizyt
pytanie zadane 7 czerwca 2015 w PHP przez tede774 Bywalec (2,650 p.)
Witam. Nie wiem czemu nie mogę wprowadzić danych do tabeli... Próbowałem pisać zapytanie na wiele sposobów, z takim samym skutkiem. Dane z formularza poprawnie są wyciągane bo mi je wyświetla. Kontrola błędów też działa bezbłędnie, ale wprowadzanie danych do tabeli nie chce mi działać...

<?php

	session_start();
	
	if(isset($_SESSION['zalogowany']) && ($_SESSION['zalogowany'])==true)
	{
		header('Location: gra.php');
		exit();
	}

	require_once "connect.php";
	
	$polaczenie=@new mysqli($host,$db_user,$db_password,$db_name);
	
	if($polaczenie->connect_errno!=0)
	{
		echo "Error: ".$polaczenie->connect_errno;
	}
	else
	{
		$login=$_POST['rlogin'];
		$haslo1=$_POST['rhaslo1'];
		$haslo2=$_POST['rhaslo2'];
		$email=$_POST['remail'];
		
		$login=htmlentities($login,ENT_QUOTES,"UTF-8");
		$haslo1=htmlentities($haslo1,ENT_QUOTES,"UTF-8");
		$haslo2=htmlentities($haslo2,ENT_QUOTES,"UTF-8");
		$email=htmlentities($email,ENT_QUOTES,"UTF-8");
		
		unset($_SESSION['blad2']);
		unset($_SESSION['blad3']);
		unset($_SESSION['blad4']);
		unset($_SESSION['blad5']);
		
		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)
			{
				$_SESSION['blad2']='<span style="color:red">Użytkownik o podanym loginie już istnieje! </span>';
				header('Location: formularz.php');
			}
			$rezultat->close();
		}
		
		if ($rezultat=@$polaczenie->query(sprintf("SELECT * FROM uzytkownicy WHERE email='%s' ",
			mysqli_real_escape_string($polaczenie,$email))))
		{
			$ilu_userow=$rezultat->num_rows;
			if($ilu_userow>0)
			{
				$_SESSION['blad3']='<span style="color:red">Użytkownik o podanym emailu już istnieje! </span>';
				header('Location: formularz.php');
			}
			$rezultat->close();
		}
		
		if($haslo1!=$haslo2)
		{
			$_SESSION['blad4']='<span style="color:red">Hasła nie są identyczne! </span>';
			header('Location: formularz.php');
		}
		
		if($login=='' || $haslo1=='' || $haslo2=='' || $email=='')
		{
			$_SESSION['blad5']='<span style="color:red">Wypełnij wsztstkie pola! </span>';
			header('Location: formularz.php');
		}
		
		
			echo "$login, $haslo1, $haslo2, $email </br>"; 

			mysql_query(sprintf("INSERT INTO  uzytkownicy VALUES ('','%s','%s','%s',250,200,150,5)",
				mysqli_real_escape_string($polaczenie,$login),
				mysqli_real_escape_string($polaczenie,$haslo1),
				mysqli_real_escape_string($polaczenie,$email)))
				or die("Nie mogłem Cie zarejestrować!");
			//header('Location: index.php');
		
		
		$polaczenie->close();
	}

?>

 

3 odpowiedzi

+2 głosów
odpowiedź 7 czerwca 2015 przez Comandeer Guru (601,590 p.)
wybrane 7 czerwca 2015 przez tede774
 
Najlepsza

To już któryś raz z rzędu widzę tutaj używanie sprintf do zapytań - mógłbyś mi zdradzić skąd to jest wytrzaśnięte?

Próbujesz używać mysqli, a zapytanie chcesz wykonać przez bibliotekę mysql - stąd nie będzie to działać

Dalej - nie obsługujesz błędów, tylko wierzysz kodowi na słowo. Wywal @ i zacznij używać http://php.net/mysqli_error – wówczas większość błędów sam wykryjesz.

No i najważniejsze: poczytaj o prepared statements, bo one są najlepszym sposobem na zabezpieczenie bazy danych przed SQLi

komentarz 7 czerwca 2015 przez draghan VIP (106,230 p.)

Głos rozsądku. :) yes

komentarz 7 czerwca 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
@Comandeer sprintf jak to skąd? Z kursu pana Mirosława PHP odc. 2 logowanie do strony. :)
komentarz 7 czerwca 2015 przez Comandeer Guru (601,590 p.)
Prawdę mówiąc nie oglądałem kursu PHP.
komentarz 7 czerwca 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
Mówi o tym od 1:35 minuty.
komentarz 7 czerwca 2015 przez Comandeer Guru (601,590 p.)
Ok, aż se jutro oglądnę ;)
komentarz 7 czerwca 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
A tak w ogóle, to masz gdzieś ładnie objaśnione prepared statements?
Fajnie gdyby to było po polsku.
komentarz 7 czerwca 2015 przez Comandeer Guru (601,590 p.)
komentarz 7 czerwca 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
A MySQLi? Szkoda, że MZ nie zaczął od razu od PDO.
komentarz 7 czerwca 2015 przez Comandeer Guru (601,590 p.)
O mysqli wgl jest zdecydowanie mniej, bo obecnie raczej stosouje się PDO do wszystkich baz, do których się da.
komentarz 8 czerwca 2015 przez efiku Szeryf (75,160 p.)
Też się zastanawiam, chociaż... "Ja będę pokazywał mysqli w wersji obiektowej, choć oczywiście jak się zrozumie mysqli, to w PDO też się odnajdziemy, prawda."
@Comandeer, zerknij sobie na ten drugi odcinek, będzie ciekawie ;)
0 głosów
odpowiedź 7 czerwca 2015 przez draghan VIP (106,230 p.)

Rozszerzenie mysql() jest bardzo niezalecane. Zamiast niego powiino się stosować mysqli().

A poza tym - próbowałeś w zapytaniu sprecyzować jakie dane mają gdzie trafić?

Np. tak:

INSERT INTO tabela (kolumna1, kolumna2) VALUES (1, 2)

?

Jeszcze mógłbyś sobie wydrukować, co Ci zwraca SQL - wtedy będziesz wiedział, co nie pasuje. ;)
 

komentarz 7 czerwca 2015 przez Comandeer Guru (601,590 p.)
edycja 7 czerwca 2015 przez Comandeer
Przecież tu jest używane mysqli

Edit: a jednak nie wszędzie…
komentarz 7 czerwca 2015 przez tede774 Bywalec (2,650 p.)
mysql_query(sprintf("INSERT INTO  uzytkownicy (user, pass, email, drewno, kamien, zboze, dnipremium) VALUES ('%s','%s','%s',250,200,150,5)",
                mysqli_real_escape_string($polaczenie,$login),
                mysqli_real_escape_string($polaczenie,$haslo1),
                mysqli_real_escape_string($polaczenie,$email)))
                or die("Nie mogłem Cie zarejestrować!");

Takie zapytanie również mi nie działa... Próbowałem wstawiać to w apostrofy itd, i to również mi nic nie dawało... W jaki sposób można to wydrukować? :)
komentarz 7 czerwca 2015 przez Boshi VIP (100,240 p.)
Napisz to jak człowiek i nie używaj jakiegoś kosmicznego sposobu ze sprint...

Pisz w mysqli jeżeli już a nie skaczesz jak małpa po drzewach z funkcji na funkcje.
komentarz 7 czerwca 2015 przez tede774 Bywalec (2,650 p.)
Przepraszam za takie błędy, ale jest to mój pierwszy program w php zrobiony samodzielnie... Uczę się... Niestety na błędach, no ale chyba po to jest to forum, żeby się pytać... Teraz będę wiedział na co zwrócić uwagę. Dzięki.
komentarz 7 czerwca 2015 przez draghan VIP (106,230 p.)
Nie bierz krytyki za bardzo do siebie. :) Wyciągnij naukę z błędów i głowa do góry! :) Tylko ten, kto nic nie robi, nie poprałenia błędów.
0 głosów
odpowiedź 7 czerwca 2015 przez tede774 Bywalec (2,650 p.)
Dziękuję wszystkim za odpowiedzi! Już wiem na czym polegał mój błąd.

pomiędzy ostatnie echo, a $polaczenie->close(); wstawiłem takie coś:

            if($rezultat=@$polaczenie->query("INSERT INTO uzytkownicy (id, user, pass, email, drewno, kamien, zboze, dnipremium) VALUES ('','$login','$haslo1','$email',250,200,150,5)"))
                echo "Witaj $login! Twoje konto jest gotowe. Aby się zalogować kliknij <a href='index.php'>Tutaj</a>";

            else
                echo"Podczas rejestracji wystąpił błąd. :(";

 

Zrezygnowałem też ze wszystkich sprintf dzięki czemu jest to bardziej czytelne...

Teraz jeszcze ustawić kodowanie hasła i chyba narazie na tym zakończę... Dodam jeszcze, że był to mój pierwszy samodzielny projekt w php.
komentarz 7 czerwca 2015 przez Comandeer Guru (601,590 p.)
Teraz se obniżyłeś bezpieczeństwo, bo wywaliłeś jakiekolwiek filtrowanie danych!

Naprawdę - radzę zapoznać się jak najszybciej z prepared statements.
komentarz 7 czerwca 2015 przez tede774 Bywalec (2,650 p.)
W sumie to jeszcze encje działają... Patrzyłem składnię tego i się zastanawiam w jaki sposób to wpływa na bezpieczeństwo, bo po polsku niestety nic nie znalazłem. Jeszcze chciałbym się zapytać jak najlepiej szyfrować hasło oraz czy szyfrować je od razu kiedy pobieram z formularza, czy później? Obecnie ustawiłem szyfrowanie md5 z dodaną solą przy pobieraniu z formularza... Czy to dobre rozwiązanie?
komentarz 7 czerwca 2015 przez Comandeer Guru (601,590 p.)

Nie, MD5 to przeżytek. Obecnie najlepiej używać bcrypt/scrypt. W PHP są to funkcje password_hash + password_verify

komentarz 7 czerwca 2015 przez tede774 Bywalec (2,650 p.)
Dobrze wiedzieć... Naprawdę wielkie dzięki! :D Szacun! ;)

Podobne pytania

0 głosów
5 odpowiedzi 938 wizyt
0 głosów
1 odpowiedź 575 wizyt
0 głosów
1 odpowiedź 246 wizyt
pytanie zadane 18 czerwca 2019 w SQL, bazy danych przez Maikel11 Początkujący (470 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 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!

...