Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Skrypt rejestracji - nie zapisuje do bazy
Forum PHP.pl > Forum > Przedszkole
mis02
Witam

Napisałem sobie kod pozwalający na rejestrację użytkowników w bazie MySQL. Testowałem to na VertrigoServ (http://vertrigo.sourceforge.net/) i wszystko działało bez zarzutów więc wrzuciłem wrzuciłem to na prv.pl (próbowałem też na yoyo.pl) Po wgraniu na serwer i uruchomieniu skrypt nie działa. Co bym nie wpisał w formularzu, nawet żadna funkcja echo() nie jest wywoływana.

Tu jest kod:

plik register.php
  1. <!-- formularz rejestracji -->
  2. <b>Zarejestruj:</b><br /><br />
  3. <form action="register.php" method="post">
  4. login: <input type="text" name="login" /><br />
  5. hasło: <input type="password" name="pass" /><br />
  6. powtórz hasło: <input type="password" name="repass" /><br />
  7. imię: <input type="text" name="name" /><br />
  8. nazwisko: <input type="text" name="surn" /><br />
  9. <input type="submit" value="Zarejestruj" /><br />
  10. </form>
  11. <?php
  12. //*****połącz z bazą *****
  13. mysql_connect('dbhostname', 'uzytkownik' , 'haslo');
  14. mysql_select_db('baza');
  15.  
  16. mysql_query("SET CHARSET utf8");
  17. mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");
  18.  
  19. //***** skrypt dodający użytkownika *****
  20. if(!empty($login) && !empty($pass) && !empty($repass) && !empty($name) && !empty($surn)) //jeśli uzupełniono wszystkie pola
  21. {
  22. if(!mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `user_login` = '$login'"))) //jeśli nie ma użytkownika o podanym loginie
  23. {
  24. if($pass == $repass) // jeśli hasła się zgadzają
  25. {
  26. $md5pass = md5($pass);
  27. mysql_query("INSERT INTO `users` (`user_login`, `user_pass`, `user_name`, `user_surn`, `user_type`, `user_activ`) VALUES ('$login', '$md5pass', '$name', '$surn', 0, 0)"); //dodaje użytkownika
  28. echo 'Użytkownik dodany poprawnie';
  29. }
  30. else
  31. {
  32. echo 'Podane hasła nie zgadzają się';
  33. }
  34. }
  35. else
  36. {
  37. echo 'Podany login jest zajęty';
  38. }
  39. }
  40. ?>

Co jest źle?

Mam jeszcze jedno pytanie: czym różni się odczytanie danych z formularza przez zmienną $nazwa_pola od odczytania przez tablicę post $_POST['nazwa_pola'] ?
DiH
Pododawaj po każdym mysql_query funkcję die() w taki sposób:
i powiedz jaki błędy się pojawiły.

W bardzo dużym skrócie:
W starszych wersjach php (przed PHP5 i PHP 4.1 z wyłączoną obsługą superglobals) nie trzeba było odwoływać się do zmiennych przez $_POST['var'], czyli wystarczyło $var. W nowszych dystrybucjach należy odwoływać się do zmiennych wskazując jaką metodą zostały przekazane. I tak dla zmiennych przekazywanych w url, np http://site.com?var=value, należy wykonać odwołanie $_GET['var']. Przy przesyłaniu danych formularzem za pomocą metody post odwołujemy się przez $_POST['var'].

W twoim kodzie wystarczy, że do każdej zmiennej (pola formularza) odwołasz się przez POST np.
  1. if(!empty($_POST['login']) && !empty($_POST['pass'])[...]


To tak w bardzo dużym uproszczeniu. Po więcej szczegółow: http://www.php.net/manual/en/language.vari....predefined.php

Pozdrawiam
enemyofarcha
Z tego co ja widzę to wszędzie masz wpisane puste zmienne.
np. $login, ma pustą zmienną..

przykładowo w
  1. INSERT INTO [...] VALUES ('$login', '$md5pass', '$name', '$surn', 0, 0) //dodaje użytkownika

brakuje oznaczeń zmiennych. Przykładowo ten login jest, ale nigdzie nie widzę z czego ma pobierać dane.

I teraz do twojego pytania, $_POST['pole'] jest zmienną która pobiera dane z danego pola formularza.
Dla twojego login powinno to wyglądać tak, i wstawione przed wywołaniem zmiennych o nazwie $login
  1. $login = $_POST['login'];

... i tak do pozostałych,

Jeżeli gdzieś się pomyliłem to proszę o poprawienie mojego błędu ;)
mis02
Problem rozwiązany, punkty poszły.
Wystarczyło do pól formularza odnosić się przez tablicę POST.
Wielki dzięki za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.