Rozdział 14. ♦ Autoryzacje 395
Kod funkcji rejestruj rozpoczyna się od sprawdzenia poprawności przekazanych danych. Można by zadać pytanie, po co ponownie sprawdzać dane, skoro czynność ta była już raz wykonana przez skrypty JavaScript w formularzu rejestracyjnym? Niestety nigdy nie możemy mieć pewności, jakie dane otrzyma serwer i czy na pewno pochodzą one właśnie z formularza. Mogą przecież zostać wysłane w inny sposób, np. napisaną przez kogoś oddzielną aplikacją współpracującą z interfejsem naszego serwisu.
Takiej ewentualności nie sposób wykluczyć i zawsze trzeba weryfikować otrzymane przez skrypt dane. Sprawdzamy zatem, czy nazwa i hasło mają poprawne długości oraz czy imię, nazwisko i e-mail nie są pustymi ciągami znaków. Jeśli stwierdzone zostaną nieprawidłowości, w zależności od sytuacji zwracana jest jedna z wartości:
♦ BAD_USER_NAME_LENGTH,
♦ BADJJS ER_PASS_LENGTH,
♦ EMPTY_FIELDS.
Jeśli jednak dane przekazane funkcji spełniają założone warunki, jest wykonywane połączenie z bazą oraz jest wybierana baza test. W razie niepowodzenia którejkolwiek z wymienionych czynności zwracana jest wartość SERVER_ERROR oznaczająca wystąpienie błędu serwera.
Jeśli jednak połączenie z serwerem MySQL zostanie nawiązane, w pierwszej kolejności sprawdzamy, czy w bazie istnieje użytkownik o nazwie przekazanej w postaci parametru nazwa. Czynność ta jest wykonywana przez zapytanie SQL w postaci:
SELECT COUNTC*) FROM Users WHERE Nazwa-'Jnazwa'
Jeżeli wynik takiego zapytania jest większy od zera, czyli w bazie istnieje już użytkownik o nazwie wskazywanej przez parametr nazwa, jest zwracana wartość USER_NAME_ ALREADY_EXISTS, nowy wpis nie może bowiem zostać wykonany. Jeśli natomiast wynikiem powyższego zapytania jest zero, może zostać wykonane zapytanie wstawiające dane do tabeli, w postaci:
INSERT INTO Users VALUES(NULL. 'Jnazwa', 'Jhaslo'. 'Jimie'. 'Jnazwisko'. 'Jemail')
Po wykonaniu tego zapytania następuje sprawdzenie, czy faktycznie został dodany jeden wiersz (ściślej, czy miało ono wpływ na jeden wiersz w tabeli bazy danych). Służy do tego, wykorzystywana już przez nas, funkcja mysql_affected_rows. W przypadku gdy wartość zwrócona przez mysql_affected_rows jest różna od 1, funkcja rejestruj zwraca wartość SERVER_ERROR, natomiast jeśli wartością zwróconą przez mysql_affected_ rows jest 1, funkcja rejestruj zwraca wartość OK, kończąc tym samym swoje działanie.