Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem ze skryptem rejestracyjnym
Forum PHP.pl > Forum > Przedszkole
e-milnet
Skrypt po uzupełnieniu wszystkich pól w formularzu nic nie zwraca i nie zapisuje użytkownika w bazie.

  1. $email=$_POST['email'];
  2. $name_us=$_POST['name_us'];
  3. $password=$_POST['password'];
  4. $password2=$_POST['password2'];
  5.  
  6.  
  7. require_once('functions.php');
  8. $web->Add_Stylesif("style.css");
  9.  
  10. try
  11. {
  12.  
  13. if (!filled($_POST))
  14. {
  15. throw new Exception('Formularz wypełnony nieprawidłowo - proszę wrócić i spróbować ponownie.');
  16. }
  17.  
  18. if (!normal_email($email))
  19. {
  20. throw new Exception('Nieprawidłowy adres poczty elektronicznej - proszę wrócić i spróbować ponownie.');
  21. }
  22.  
  23. if ($password != $passowrd2)
  24. {
  25. throw new Exception('Niepasujące do siebie hasła - proszę wrócić i spróbować ponownie.');
  26. }
  27.  
  28. if (strlen($name_user) > 16)
  29. {
  30. throw new Exception('Nazwa użytkownika nie może mieć więcej niż 16 znaków - proszę wrócić i spróbować ponownie.');
  31. }
  32.  
  33. if((strlen($password) < 6) || (strlen($password) > 16))
  34. {
  35. throw new Exception('Hasło musi mieć co najmniej 6 i maksymalnie 16 znaków - proszę wrócić i spróbować ponownie.');
  36. }
  37.  
  38. register($name_user, $email, $password);
  39. $_SESSION['normal_user'] = $name_us;
  40.  
  41. $web->site_name="Rejestracja pomyślna";
  42. $xyz="<center>Rejestracja zakończyła się sukcesem!!! <br>".create_HTML_URL('member.php', 'Konfiguracja użytkownika')."</center>";
  43. $web->Add_textbox($xyz);
  44.  
  45. }
  46. catch (Exception $e)
  47. {
  48. $web->site_name="Problem";
  49. $web->Add_textbox($e->getMessage());
  50. }
mortus
W liniach 29 i 39 masz zmienną $name_user, która nie jest nigdzie zdefiniowana. session_start() daj na sam początek. Walidacja powinna odbywać się w momencie pobierania danych z tablicy $_POST, a nie później. Błędy raczej zapisywałbym do odpowiedniej tablicy, zamiast rzucać non stop wyjątkami. Dlaczego? Choćby dlatego, że jeśli email będzie nieprawidłowy i jednocześnie hasła nie będą się zgadzać, to wyjątki zostaną przechwycone dwa razy, za każdym razem z innym komunikatem błędu. Jeśli zatem użytkownik wszystkie pola wypełni nieprawidłowo, to aż cztery razy otrzyma komunikat błędu, za każdym razem inny, a chyba powinien od razu wiedzieć, które ze wszystkich pól wypełnił źle. Mnie osobiście skłoniłoby to do opuszczenia strony. Blok try ... catch ... nie jest dobrym pomysłem na walidację danych z formularza.

Radzę zapoznać się z tematem Jak poprawnie zadać pytanie - są tam zawarte podstawy dotyczące debugowania skryptów, z którymi warto się oswoić.
e-milnet
Wstawiłem funkcję włączające wszystkie komunikaty o błędach do skryptu z pliku functions.php. Poprawiłem swój skrypt do postaci:
  1.  
  2. $email=$_POST['email'];
  3. $name_us=$_POST['name_us'];
  4. $password=$_POST['password'];
  5. $password2=$_POST['password2'];
  6.  
  7. require_once('functions.php');
  8. $web->Add_Stylesif("style.css");
  9.  
  10. if (!filled($_POST))
  11. {
  12. $errors[]='Formularz wypełnony nieprawidłowo - proszę wrócić i spróbować ponownie.';
  13. }
  14.  
  15. if (!normal_email($email))
  16. {
  17. $errors[]='Nieprawidłowy adres poczty elektronicznej - proszę wrócić i spróbować ponownie.';
  18. }
  19.  
  20. if ($password != $password2)
  21. {
  22. $errors[]='Niepasujące do siebie hasła - proszę wrócić i spróbować ponownie.';
  23. }
  24.  
  25. if (strlen($name_us) > 16)
  26. {
  27. $errors[]='Nazwa użytkownika nie może mieć więcej niż 16 znaków - proszę wrócić i spróbować ponownie.';
  28. }
  29.  
  30. if((strlen($password) < 6) || (strlen($password) > 16))
  31. {
  32. $errors[]='Hasło musi mieć co najmniej 6 i maksymalnie 16 znaków - proszę wrócić i spróbować ponownie.';
  33. }
  34.  
  35. if(!$errors)
  36. {
  37. register($name_us, $email, $password);
  38. $_SESSION['normal_user'] = $name_us;
  39. $web->site_name="Rejestracja pomyślna";
  40. $xyz="<center>Rejestracja zakończyła się sukcesem!!! <br>".create_HTML_URL('member.php', 'Konfiguracja użytkownika')."</center>";
  41. $web->Add_textbox($xyz);
  42. }
  43. else
  44. {
  45. $xyz = "";
  46. $web->site_name="Problem";
  47. foreach($errors as $a)
  48. {
  49. $xyz .= $a."\n
  50. }
  51. $web->Add_textbox($xyz);
  52. }


Teraz wyskakuje mi błąd:
Notice: Undefined variable: menu in /home/alleg/public_html/e-milnet/functions/functions_show.php on line 14
W 8 lini tego kodu:
  1. function head_menu()
  2. {
  3. $table["start"]="index.php";
  4. $table["CV"]="cv.php";
  5.  
  6. foreach ($table as $name => $value)
  7. {
  8. $menu .= "\t\t\t\t <a href=\"$value\"><div id=\"button\">$name</div></a>\n";
  9. }
  10. return $menu;
  11. }

i dalej skrypt nic nie wykonuje.
mortus
W funkcji head_menu() w linii 5 powinieneś zmienną $menu zainicjować pustym łańcuchem znaków: $menu = '';. Zamiast if(!errors) użyj if(empty($errors)). No i zobacz na linię 50, bo nie domknąłeś tam łańcucha znaków, w wyniku czego reszta się sypie. Linie 3-6 włącznie powinny się znaleźć w bloku if(empty($errors)) w linii 37.

EDIT
I jeszcze
  1. if(!normal_email($_POST['email'])) {
  2. // ...
  3. if($_POST['password'] != $_POST['password2']) {
  4. // ...
e-milnet
Teraz podczas rejestracji wyskakuje mi błąd:
Notice: Undefined property: mysqli::$num_rows in /home/alleg/public_html/e-milnet/functions/functions_authen.php on line 39
W 13 lini funkcji:
  1. function register($name_user, $email, $password)
  2. {
  3.  
  4. $connect = connect_bd();
  5.  
  6. $result = $connect->query("select * from users where name_user='".$name_user."'");
  7.  
  8. if (!$result)
  9. {
  10. $errors[]='Wykonanie zapytania nie powiodło się.';
  11. }
  12.  
  13. if ($connect->num_rows>0)
  14. {
  15. $errors[]='Nazwa użytkownika zajęta - proszę wrócić i wybrać inną.';
  16. }
  17.  
  18. $result = $connect->query("insert into users values ('".$name_user."', sha1('".$password."'), '".$email."')");
  19.  
  20. if (!$result)
  21. {
  22. $errors[]='Rejestracja w bazie danych niemożliwa - proszę spróbować później.';
  23. }
  24.  
  25. if(empty($errors))
  26. {
  27. return true;
  28. }
  29. else
  30. {
  31. return $errors;
  32. }
  33.  
  34. }

ale dodaje uzytkownika do bazy.
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.