Zadanie: skrypt rejestracji i logowania

0

Hejka ;)!

Sluchajcie mam maly problem, tydzien temu zaczalem uczyc sie php napisalem kod wszystko mialem fajnie ale jak sie oczywiscie okazalo funkcje mysql_ sa juz nieaktualne i nie wszystko mi dziala a zeby nie miksowac komend mysql_ i mysqli lub PDO musze porzucic wszystko i napisac na nowo. Tak wiec wyrzucilem wszystko i zaczalem na nowo, stworzylem strone glowna kilka podstron a takze polaczenie z baza danych - oczywiscie baze i tabele uzytkownicy z kolumnami id nazwa haslo email - i teraz zaczalem pisac ten skrypt rejestracji ale cos mi niestety nie dziala i nie mam pojecia dlaczego moglby mi ktos wyjasnic? Po wpisaniu danych do formularza i kliknieciu zarejestruj wyswietla mi cos takiego:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, array given in /home/anett1990/ftp/lotusonline/rejestracja.php on line 38
Konto zostalo utworzone!

Niby konto utworzone a po pierwsze jest taki blad a po drugie nie dodaje mi rekordu do bazy danych ;/ ma ktos jakis pomysl?

KOD:


<?php 

$title = "Rejestracja";
include_once 'gora_strony.php';

?>

<h1>Rejestracja</h1>
<form method="POST" action="?rejestracja">
	<table>
		<tr><td>Nazwa konta (6-20 znakow):	</td><td><input type='text' name='login'/></td></tr>
		<tr><td>Haslo (6-20 znakow):		</td><td><input type='password' name='haslo1'/></td></tr>
		<tr><td>Powtorz haslo:				</td><td><input type='password' name='haslo2'/></td></tr>
		<tr><td>Email:						</td><td><input type='text' name='email'/></td></tr>
		<tr><td><input type='submit' value='Zarejestruj sie!' name="zatwierdz"/></td></tr>
	</table>
</form>

<?php 

$login = $_POST['login'];
$haslo1 = $_POST['haslo1'];
$haslo2 = $_POST['haslo2'];
$email = $_POST['email'];
$zatwierdz = $_POST['zatwierdz'];

if(!empty($_POST)){
	if(isset($zatwierdz)){
		if(!empty($login) && !empty($haslo1) && !empty($haslo2) &&!empty($email)){
			if(strlen($haslo1) >=6 && strlen($haslo2) <=20){
				if($haslo1 == $haslo2){
					if(strlen($login) >=6 && strlen($login) <=20){
                                                $login = SprawdzDane($login);
						$haslo1 = sha1($haslo1);
                                                $email = SprawdzDane($email);
						$polaczenie = mysqli_connect(db_host, db_user, db_pass, db_name);
						$pytanie = "SELECT * FROM uzytkownicy";
						$tablica = $polaczenie->query($pytanie);
						$tablica1 = mysqli_fetch_all($tablica);
						$tablica2 = mysqli_num_rows($tablica1);

							if($tablica2 == 0){
								$dodaj = 'INSERT INTO uzytkownicy (nazwa, haslo, email) VALUES ("'.$login.','.$haslo1.','.$email.'")';
								$wynik = $polaczenie->query($dodaj); 
								
								echo 'Konto zostalo utworzone!';
							} else echo 'Login lub email sa juz w uzyciu!';
					} else echo 'Nazwa konta musi zawierac od 6 do 20 znakow!';
				} else echo 'Hasla nie sa identyczne!</b>';
			} else echo 'Haslo musi zawierac od 6 do 20 znakow!';
		} else echo 'Wypelnij wszystkie dane!';
	}
}

?>


<?php 

include_once 'dol_strony.php'; 

?>

Funkcje.php: (funkcje dodalem taka ale nie wiem czy dobrze dziala, chcialem zeby sprawdzala tagi i usuwala zbedne znaki)

<?php
include_once 'includes/inicjacja.php';

function SprawdzDane($tekst){
	return mysqli_real_escape_string($polaczenie, $tekst);
	print_r($tekst, $polaczenie);
}
	
?>
0

czemu tego w PDO nie napisales?

szczerze nie chce mi sie w tym momencie patrzec co tam masz zle, ale jak widze "mysqli" no to raczej PDO sie powinno uzywac

1

W jednym z wywołań nie przekazujesz zmiennych, a nieistniejące stałe ;-)

0

Jest to mój pierwszy projekt chetnie napisalbym to w pdo gdybym tylko mial takie umiejętności xd wiadomo trzeba sie uczuc ale trzeba tez od czegos zaczac.. masz na mysli polaczenie z baza dac new PDO czy calkowicie inaczej powinno to wygladac?

Patryk wiesz moze jak to rozwiazac? Nieistniejaca stala to $ tekst?

0
Rafiks1992 napisał(a):

Jest to mój pierwszy projekt chetnie napisalbym to w pdo gdybym tylko mial takie umiejętności xd wiadomo trzeba sie uczuc ale trzeba tez od czegos zaczac.. masz na mysli polaczenie z baza dac new PDO czy calkowicie inaczej powinno to wygladac?

Patryk wiesz moze jak to rozwiazac? Nieistniejaca stala to $ tekst?

$polaczenie = mysqli_connect(db_host, db_user, db_pass, db_name);

PS. zaakceptowany powinien byc post Patryka a nie moj ;) moj nie jest zbyt konstruktywny bo mysqli tez mozna uzywac

0

jak masz tygodniowe doświadczenie to pewnie przeskoczyłeś większość wartościowych rzeczy, przejdź kilka tutków podstawowych, potem mysql, crud, php, sql injection, pościągaj kod z przykładów i prześledź, ew. jakieś prostsze fw, jest tego w necie od groma

0

Nieistniejaca stala to $ tekst?

echo xyz; // próbuje wyświetlić zawartość stałej o nazwie 'xyz' (utworzonej za pomocą define())

echo $xyz; // próbuje wyświetlić zawartość zmiennej o nazwie 'xyz' (utworzonej za pomocą m.in. $xyz = 'cośtam')
0

Cholercia pogubilem sie juz przez to, rozumiem ze jesli przejde na PDO to przestane miec problemy? Musialbym wszystko przekonwertowac z mysqli na PDO? Sprobuje pozniej no bo jakie inne mam wyjscie :P co do tej zmiennej to nie rozumiem troszke poniewaz jak pisze function nazwa($zmienna) to ta $zmienna moze byc z byle jaka nazwa prawda? A pozniej jak chce zainicjowac funkcje to musze wpisac $wartosc = $zmienna (z funkcji) zeby to dzialalo? Cos w glowie nie moge sobie tego poukladac :D

0
$dodaj = 'INSERT INTO uzytkownicy (nazwa, haslo, email) VALUES ("'.$login.','.$haslo1.','.$email.'")';
$wynik = $polaczenie->query($dodaj);

O sqlinjection słyszał? Zastanów się co się będzie działo jak zrobisz:

$login = 'login", "haslo", select haslo from uzytkownicy where nazwa = "admin") #';
$email = "email";
$haslo1 = "haslo1"

Magicznie naszym emailem zostanie hasło admina :D A że zapisujesz hasła jako SHA1 bez soli, to połamać to hasło będzie dość prosto.

0

Shalom to chyba z innego jezyka oznacza dzien dobry jak dobrze kojarze :D! Hm co to znaczy sha1 bez soli ;p?

0
Rafiks1992 napisał(a):

Shalom to chyba z innego jezyka oznacza dzien dobry jak dobrze kojarze :D! Hm co to znaczy sha1 bez soli ;p?

Do poczytania w wolnej chwili: SHA1, Password salting.

Na Twoim miejscu wziąłbym się jednak za porządne przerobienie podstaw w oparciu o świeże materiały - Twoje najwyraźniej do takich nie należały skoro stosowano funkcję mysql do łączenia się z bazą. Domyślam się, że takich "kwiatków" było więcej.

Rozejrzyj się, pogoogluj. W Internecie naprawdę da się znaleźć sporo dobrych, bezpłatnych materiałów ;)

0

Sha1 jest aktualnie bez sensu przy brcypcie i password_hash

0

I znalazlem :D! Mam gotowy skrypt logowania rejestracji a takze index oraz panel uzytkownika napisane wszystko w PDO :P! Teraz czas wziac sie za zrobienie skryptu sklepu, wszystko w celach edukacyjnych jak na razie, jakies propozycje? Chcialbym zeby uzytkownik mogl np kupowac owoce ^^ tak wiec musze stworzyc nowa tabele w ktorej umieszcze kolumny: id, uid, nazwa owocka, koszt owocka, hm liczba owockow w sklepie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1