Formularz rejestracyjny

0

Może ktoś spojrzeć na owy formularz i powiedzieć co jest źle, lub powinno być zmienione? Dodam, że wszystko działą jak należy, ale pewnie( z racji, zę sie ucze) nie jest to napisane w przystępny sposób.

<?php
function Security_SQL_IN($im)
{
	 if (get_magic_quotes_gpc())
	 {
		 $im=stripslashes($im);
	 }
	 $im=trim($im); //usuwamy biale znaki
	 $im=mysql_real_escape_string($im);  // zabezpieczenie przed SQL_injecton
	 $im=htmlspecialchars($im);  // dezaktywacja kodu HTML
	 return $im;   // zwrocenie zabezpieczonej danej 
	 
	
}


function codepass($password)
{
	return sha1(md5($password).'#!Rfdgd64');   // zakodowanie hasla  algorytmem SHA1 ORAZ MD5
}


$imie=  Security_SQL_IN($_POST['imie']);
$nazwisko=  Security_SQL_IN($_POST['nazwisko']);


$haslo= codepass($_POST['haslo']);
$haslo1=codepass($_POST['haslo1']);




// dane dostepowe do bazy
$host='localhost';
$pass=''; 
$nazwa='root'; 

//nazwa bazy
$baza='user';





//sprawdzenie czy zmienne istniejá


if (empty($imie) || empty($nazwisko) || empty($haslo) )
{ 
echo 'nie wszyskie pola zostaly wypelnione'."<br />"; 
echo ' za 5 sekund nastąpi powrót do formularza rejestracyjnego'."<br />";
    header("Refresh: 5; dane_reje.html");
	exit;

}
else if($haslo!=$haslo1)
{
	echo 'podane hasla nie sa takie same'."<br />";
	echo ' za 5 sekund nastąpi powrót do formularza rejestracyjnego'."<br />";
    header("Refresh: 5; dane_reje.html");
	exit;
	
} 


if    (!preg_match('@^[A-Z][a-z-_.0-9]{1,8}$@', $imie) && (!preg_match('@^[A-Z][a-z-_.0-9]{1,8}$@', $nazwisko)))
{
	echo 'blad skladni- za 5 sekund nastąpi powrót do formularza rejestracyjnego'."<br />";
    header("Refresh: 5; dane_reje.html");

}

else 
{
		echo 'dobra skaldnia-łączę z bazą!'."<br />";
		
       //konfiguracja dostepu do bazy danych  
	$connect=@mysql_connect($host, $nazwa,$paerss) or die('blad polaczenia z baza danych');
	$db_select = @mysql_select_db($baza) or die('blad wyboru bazy');
	echo 'polaczono poprawnie'."<br />";

}
  

 //wyciagniecie imienia oraz nazwiska z bazy w celu sprawdzenia czy juz  takie dane istnieja
   $select=mysql_query("SELECT imie, nazwisko FROM  `uzytkownicy` WHERE imie='$imie' and nazwisko='$nazwisko'");
  
   if( mysql_num_rows($select)!=0)
   {
	    echo 'taki user juz istnieje'."<br />";
		
   }
     
	  else 
	  {
		     $dodaj="INSERT INTO `uzytkownicy`(`id`,`imie`,`nazwisko`,`haslo`)   VALUES('','$imie', '$nazwisko', '$haslo' )";
			  $add_user=mysql_query($dodaj); 
	  }
	
?> 
0
(!preg_match('@^[A-Z][a-z-_.0-9]{1,8}$@', $imie) && (!preg_match('@^[A-Z][a-z-_.0-9]{1,8}$@', $nazwisko)))

"jeżeli imię ORAZ nazwisko są złe, wyrzuć błąd" - chyba nie o to chodziło?

@mysql_connect($host, $nazwa,$paerss)

Co to $paerss?

Poza tym korzystasz ze zdeprecjonowanych funkcji do obsługi MySQL.

1

Tak jak pisał @Patryk27 stare funkcje, ale od razu napiszę żebyś zainteresował się PDO. Poza tym połączenie z bazą danych upakowałbym w funkcję do której np możnaby w parametrze przekazać dane do połączenia w formie tablicy np

$dbConfig=array(
'host'=>'....',
'db_name'=>'...';
)

Korzystając z PDO unikniesz tez konieczności tworzenia funkcji typu Security_SQL_IN. Funkcje tego typu nazywałbym stosując np camelCase.
Przy każdej funkcji/metodzie (o ile obiektowo to zrobisz) dopisałbym jakieś proste phpDoc'i - o ile zamierzasz używać tego kodu w przyszłości, dodatkowo Twoje Ide też Ci pomoże mając phpdoc'a.

W funkcji codepass - nie wiem czy to dobre rozwiązanie stosować sha1 i md5 jednocześnie - tutaj polecałbym chyba bcrypta (ew. rzuciłbym okiem tutaj http://php.net/manual/en/function.crypt.php ).

powtarzasz kod

header("Refresh: 5; dane_reje.html");

Widziałem też znak @ co wycisza błędy... zamiast tego lepiej po prostu ich uniknąć lub rzucić wyjątkiem jakimś.

0

@Patryk27- w połączeniu bazy jest oczywiście literówka, gdzieś się musiała wkraść, ma być

$pass

Jeżeli chodzi o wyrażenie regularne, to zrobilem to na takiej zasadzie, że "JEŻELI PODANE DANE NIE ZGADZAJĄ SIĘ ZE WZORCEM TO WYRZUĆ BŁĄD, W PRZECIWNYM WYPADKU ŁĄCZ Z BAZĄ"- chyba powinno być, na odwrót? czyli jeżeli są dobre to łącz z bazą inaczej wyrzuć błąd?

Dopiero się uczę dlatego korzystając z masy tourtiali na necie czy książki jaką mam w domu z 2005r(VADEMECUM PROFESJONALISTY III) wszędzie są owe funkcje łączące z bazą. Tutaj macie na myśli MYSQLli? Sam nie wiem, to jest sama obiektówka, a to mnie przeraża na dzień dzisiejszy. Nie mogę załapać jak to wszystko działa tam, tzn posklejać tego, bo coś takiego jak konstruktor, destruktor itd to wiem na czym polegają.

Jeszcze pytanie, łączenie na dzień dzisiejszy z bazą w po PDO to nowość czy raczej codzienność ?

1

"JEŻELI PODANE DANE NIE ZGADZAJĄ SIĘ ZE WZORCEM TO WYRZUĆ BŁĄD, W PRZECIWNYM WYPADKU ŁĄCZ Z BAZĄ"- chyba powinno być, na odwrót? czyli jeżeli są dobre to łącz z bazą inaczej wyrzuć błąd?

Spójrzmy w kod:

(!preg_match('@^[A-Z][a-z-_.0-9]{1,8}$@', $imie) && (!preg_match('@^[A-Z][a-z-_.0-9]{1,8}$@', $nazwisko)))
{
 wyrzuć_błąd();
} else
{
 wszystko_ok();
}

Załóżmy, że pierwsze preg_match zwróciło false, a drugie true.

if ((!false) && (!true))
 wyrzuć_błąd(); else
 wszystko_ok;

Idziemy dalej:
!false -> true
!true -> false

Czyli mamy:
true && false -> false

Czyli nie wyrzucamy błędu i idziemy dalej, chociaż pierwsze preg_match zwróciło false, a drugie true.

Widzisz błąd?


czy książki jaką mam w domu z 2005r(VADEMECUM PROFESJONALISTY III) wszędzie są owe funkcje łączące z bazą.

>2005r

0

Tak teraz widzę, pomimo tego, że z danych dostajemy true i false, to warunek łączenia z bazą się wykona. Co jest błędem.

Jeżeli chodzi o książkę, to chodzi ci by patrzeć na książki nowsze? z tego co tam widziałem to łączenie jest na podstawie mysqlli. W każdym razie chodzi przecież o naukę podstaw a czy to co opisane jest w książce jest w dzisiejszym standardzie to mogę sobie zweryfikować na internecie i ewentualnie wprowadzić nowszą, lepszą modyfikację.

No i czas faktycznie zająć się OOP na poważnie bo teraz to chyba większość rozwiązać nowszych bazuje na tym.

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