Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Formularz - wykrywanie pustych inputów, określenie znaków
StadiPL
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 11.05.2013

Ostrzeżenie: (0%)
-----


Witam
Mam pewien problem i nie potrafię znaleźć rozwiązania na internecie. Chciałem zacząć powoli i małymi kroczkami robić sobie system kont i logowania. Zrobiłem sobie prosty formularz w HTLM i zacząłem pisać do niego odpowiedni kod PHP. Mój kod potrafi już sprawdzić czy hasło oraz jego powtórzenie się zgadza (to samo z e-mailem), jednak zauważyłem przy testach że mogę równie dobrze zostawić pola puste i też będzie się to zgadzać (logiczne). Moje pytania są następujące:
Jak sprawdzać czy pole nie jest puste?
Jak ograniczyć użytkownika aby mógł wpisać tylko wybrane przezemnie znaki?
Jak sprawdzić czy email jest poprawny? tzn czy posiada @ i domene
Dołączam kody:
  1. Rejestruj się:
  2. <form action="register_function.php" method="post">
  3. nick: <input type="text" name="nickname" /><br />
  4. haslo: <input type="password" name="password" /><br />
  5. powtorz haslo: <input type="password" name="password_r" /><br />
  6. email: <input type="text" name="email" /><br />
  7. powtorz email: <input type="text" name="email_r" /><br />
  8. <input type="submit" value="Rejestruj" />
  9. </form>

  1. <?php
  2. if ($_POST['password'] === $_POST['password_r']) {
  3. if ($_POST['email'] === $_POST['email_r']) {
  4. echo "GIT";
  5. } else {echo "Podane adresy email nie sa identyczne"; }
  6. } else {echo "Podane hasla nie sa identyczne"; }
  7. ?><br />
Go to the top of the page
+Quote Post
Szymciosek
post
Post #2





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


1) W html5 (może i wcześniej) wprowadzono required
<input type="text" name="username" required />

2) Regexp
3) Regexp (email)
Go to the top of the page
+Quote Post
session
post
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 22
Dołączył: 11.04.2010
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Cytat
Jak sprawdzać czy pole nie jest puste?

required to bajer najlepiej jeszcze:
  1. if(empty($_POST['nickname'])){echo'Wypełnij wszystkie wymagane pola';} // I tak dla wszystkich wymaganych

Cytat
Jak ograniczyć użytkownika aby mógł wpisać tylko wybrane przezemnie znaki?

Jak kolega wyżej napisał: wyrażenia regularne i funkcja preg_match
Cytat
Jak sprawdzić czy email jest poprawny?

Najlepiej mało znanym:
  1. if(!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)){echo'Nieprawidłowy adres email';}


PS. Nie używaj operatora === (zarezerwowoanego dla typów bool) do porównań tylko: == wink.gif

Ten post edytował session 11.05.2013, 23:59:05
Go to the top of the page
+Quote Post
StadiPL
post
Post #4





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 11.05.2013

Ostrzeżenie: (0%)
-----


Spoko, tylko jak dokładnie to wstawić, bo jak dam tak to wyświetli że mam uzupełnić, ale mimo to wykona dalej :/
  1. <?php
  2. if(empty($_POST['nickname'])){echo'Wypełnij wszystkie wymagane pola';}
  3. if ($_POST['password'] === $_POST['password_r']) {
  4. if ($_POST['email'] === $_POST['email_r']) {
  5. echo "GIT";
  6. } else {echo "Podane adresy email nie sa identyczne"; }
  7. } else {echo "Podane hasla nie sa identyczne"; }
  8. ?>

reszte waszych odpowiedzi sprawdze zaraz/jak uporam sie z tym ;d
Go to the top of the page
+Quote Post
nikestylex7
post
Post #5





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


  1. <?php
  2. if(empty($_POST['nickname'])){
  3. echo'Wypełnij wszystkie wymagane pola';
  4. }else if(empty($_POST['password']) || empty($_POST['password_r'])){
  5. echo'Wypełnij wszystkie wymagane pola';
  6. }else if($_POST['password'] != $_POST['password_r']){
  7. echo'Hasła różnią się!';
  8. }
  9. // i tak dalej to tylko przykład żeby Cię nakierować :)
  10. ?>
Go to the top of the page
+Quote Post
StadiPL
post
Post #6





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 11.05.2013

Ostrzeżenie: (0%)
-----


Ok, to zorumiem. jezeli nick jest pusty wyswietla echo, jak nie to jedzie dalej itd... tylko gdzie jak sprawdzi calosc i okaze sie ze wszystko jest ok to ma wykonac reszte kodu (w moim przypadku jak na razie to echo "git";). Gdzie to wstawić? ;] robie tak:
  1. <?php
  2. if(empty($_POST['nickname'])){echo'Podanie nazwy uzytkownika jest wymagane';}
  3. else if(empty($_POST['password']) || empty($_POST['password_r'])){echo'Podanie hasla i jego powtorzenie jest wymagane';}
  4. else if($_POST['password'] != $_POST['password_r']){echo'Podane hasla roznia sie';}
  5. else if(empty($_POST['email']) || empty($_POST['email_r'])){echo'Podanie e-maila i jego powtorzenie jest wymagane';}
  6. else if($_POST['email'] != $_POST['email_r']){echo'Podane e-maile roznia sie';}
  7. echo "GIT";
  8. ?>
Go to the top of the page
+Quote Post
nikestylex7
post
Post #7





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


  1. <?php
  2. if(empty($_POST['nickname'])){
  3. echo'Podanie nazwy uzytkownika jest wymagane';
  4. }
  5. else if(empty($_POST['password']) || empty($_POST['password_r'])){
  6. echo'Podanie hasla i jego powtorzenie jest wymagane';
  7. }
  8. else if($_POST['password'] != $_POST['password_r']){
  9. echo'Podane hasla roznia sie';
  10. }
  11. else if(empty($_POST['email']) || empty($_POST['email_r'])){
  12. echo'Podanie e-maila i jego powtorzenie jest wymagane';
  13. }
  14. else if($_POST['email'] != $_POST['email_r']){
  15. echo'Podane e-maile roznia sie';
  16. }else{
  17. echo "GIT";
  18. }
  19. ?>


Ten post edytował nikestylex7 12.05.2013, 00:55:30
Go to the top of the page
+Quote Post
StadiPL
post
Post #8





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 11.05.2013

Ostrzeżenie: (0%)
-----


Gdzieś wyczytałem że ! ma zrobić "zaprzeczenie". Czyli empty normalnie zwraca gdy pusty, a !empty wyswietla gdy jest rozny od pustego. Zgodnie z tą myślą zrobiłem coś takiego:
  1. <?php
  2. if(empty($_POST['nickname'])){echo'Podanie nazwy uzytkownika jest wymagane';}
  3. else if(empty($_POST['password']) || empty($_POST['password_r'])){echo'Podanie hasla i jego powtorzenie jest wymagane';}
  4. else if($_POST['password'] != $_POST['password_r']){echo'Podane hasla roznia sie';}
  5. else if(empty($_POST['email']) || empty($_POST['email_r'])){echo'Podanie e-maila i jego powtorzenie jest wymagane';}
  6. else if($_POST['email'] != $_POST['email_r']){echo'Podane e-maile roznia sie';}
  7. else if(!preg_match('/^[a-zA-Z0-9]$/D', $_POST['nickname'])) {echo "nie ok";}
  8. else { echo "GIT"; }

Oczywiście niestety nie działa. Czegos nie rozumiem, czy to z wykrzyknikiem to nieprawda?
Go to the top of the page
+Quote Post
nikestylex7
post
Post #9





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


wykrzyknik z if empty czyli jeśli jest puste zrobi jeśli nie jest puste (if !empty) czyli jak chcesz to zastosować to tylko do czegoś co nie ma być puste czyli możesz użyć to do naszego przykładu np:

  1. if(!empty($_POST['nickname']){
  2. echo"Jest Nick";
  3. }
Go to the top of the page
+Quote Post
StadiPL
post
Post #10





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 11.05.2013

Ostrzeżenie: (0%)
-----


Zauważyłem że to jednak nie ja mam złe myślenie tylko coś jest nie tak z moją funkcją preg_match. Wygląda ona następująco:
  1. <?php
  2. if(!preg_match('/^[a-zA-Z0-9]$/D', $_POST['nickname'])) {echo "nie ok";}
  3. else { echo "GIT"; }
  4. ?>

Gdy nickname to "a" wyświetla "GIT", gdy nickname to np. "stadi" wyświetla "nie ok". Nie rozumiem dlaczego.. część /^[a-zA-Z0-9]$/D wykonałem dokładnie tak jak na internecie. Powinna ona sprawić że znaki użyte w nickname muszą być z przedziału od a do z (duże lub małe) lub/oraz od 0 do 9. Dlaczego zatem coś się psuje i działa dobrze gdy nickname jest jednoznakowy (pasujący do klucza), a nie działa gdy nickname składa się z wielu znaków (także pasujących do podanego klucza)?
EDIT: to samo tyczy sie polskich znakow

Ten post edytował StadiPL 12.05.2013, 01:37:56
Go to the top of the page
+Quote Post
nikestylex7
post
Post #11





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


  1. if(strlen($_POST['nickname']) < 3 || !preg_match('/^[A-Za-z0-9]+$/', $_POST['nickname'])) {
  2. echp"klapa";
  3. }else{
  4. echo"git";
  5. }


sprawdz to od razu sprawdza czy nick ma wiecej niż 3 znaki smile.gif

Ten post edytował nikestylex7 12.05.2013, 01:37:08
Go to the top of the page
+Quote Post
StadiPL
post
Post #12





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 11.05.2013

Ostrzeżenie: (0%)
-----


Jako że w tym temacie wszystko już jest ogarnięte, to wrzucam efekt końcowy ;] Może komuś się przyda do przeanalizowania
register.php
  1. Rejestruj się:
  2. <form action="register_function.php" method="post">
  3. nick: <input type="text" name="nickname" />(Powyżej 3 zaków. Dozwolone: a-z A-Z 0-9. Bez polskich liter)<br />
  4. haslo: <input type="password" name="password" />(Powyżej 3 zaków. Dozwolone: a-z A-Z 0-9. Bez polskich liter)<br />
  5. powtorz haslo: <input type="password" name="password_r" /><br />
  6. email: <input type="text" name="email" /><br />
  7. powtorz email: <input type="text" name="email_r" /><br />
  8. <input type="submit" value="Rejestruj" />
  9. </form>

register_function.php
  1. <?php
  2. $no_nickname="Podanie nazwy uzytkownika jest wymagane";
  3. $no_password="Podanie hasla i jego powtorzenie jest wymagane";
  4. $different_password="Podane hasla roznia sie'";
  5. $no_email="Podanie e-maila i jego powtorzenie jest wymagane";
  6. $different_email="Podane e-maile roznia sie";
  7. $bad_nickname="Niedozwolona nazwa uzytkownika";
  8. $bad_password="Niedozwolone haslo";
  9. $bad_email="Nieprawidłowy adres email";
  10.  
  11. if(empty($_POST['nickname'])){$no_nickname;}
  12. else if(empty($_POST['password']) || empty($_POST['password_r'])){echo $no_password;}
  13. else if($_POST['password'] != $_POST['password_r']){echo $different_password;}
  14. else if(empty($_POST['email']) || empty($_POST['email_r'])){echo $no_email;}
  15. else if($_POST['email'] != $_POST['email_r']){echo $different_email;}
  16. else if(strlen($_POST['nickname']) < 3 || !preg_match('/^[A-Za-z0-9]+$/', $_POST['nickname'])) {echo $bad_nickname;}
  17. else if(strlen($_POST['password']) < 3 || !preg_match('/^[A-Za-z0-9]+$/', $_POST['password'])) {echo $bad_password;}
  18. else if(!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)){echo $bad_email;}
  19. else{echo"git";}
  20. ?>
Go to the top of the page
+Quote Post
Szymciosek
post
Post #13





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Nie robisz żadnych wcięć tylko tak wszystko w jednej linii zawsze?

  1. <?php
  2. $no_nickname="Podanie nazwy uzytkownika jest wymagane";
  3. $no_password="Podanie hasla i jego powtorzenie jest wymagane";
  4. $different_password="Podane hasla roznia sie'";
  5. $no_email="Podanie e-maila i jego powtorzenie jest wymagane";
  6. $different_email="Podane e-maile roznia sie";
  7. $bad_nickname="Niedozwolona nazwa uzytkownika";
  8. $bad_password="Niedozwolone haslo";
  9. $bad_email="Nieprawidłowy adres email";
  10.  
  11. if(empty($_POST['nickname']))
  12. {
  13. $no_nickname;
  14. }
  15. else if(empty($_POST['password']) || empty($_POST['password_r']))
  16. {
  17. echo $no_password;
  18. }
  19. else if($_POST['password'] != $_POST['password_r'])
  20. {
  21. echo $different_password;
  22. }
  23. else if(empty($_POST['email']) || empty($_POST['email_r']))
  24. {
  25. echo $no_email;
  26. }
  27. else if($_POST['email'] != $_POST['email_r'])
  28. {
  29. echo $different_email;
  30. }
  31. else if(strlen($_POST['nickname']) < 3 || !preg_match('/^[A-Za-z0-9]+$/', $_POST['nickname']))
  32. {
  33. echo $bad_nickname;
  34. }
  35. else if(strlen($_POST['password']) < 3 || !preg_match('/^[A-Za-z0-9]+$/', $_POST['password']))
  36. {
  37. echo $bad_password;
  38. }
  39. else if(!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
  40. {
  41. echo $bad_email;
  42. }
  43. else
  44. {
  45. echo"git";
  46. }
  47. ?>


Co do zmiennych zawierających tekst błędu, to trzymałbym to osobiście w jakiejś osobnej klasie i umieściłbym je tam jako stałe.

Dodatkowo z tego co mi wiadomo nie używa się już <br /> na rzecz css.

Teraz powyższy kod może Ci się wydawać trochę chaotyczny, ale w przyszłości na pewno nie poprzestaniesz tylko na echo.

Ten post edytował Szymciosek 12.05.2013, 08:56:31
Go to the top of the page
+Quote Post
session
post
Post #14





Grupa: Zarejestrowani
Postów: 112
Pomógł: 22
Dołączył: 11.04.2010
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Widze, że wszystko już zostało wyjaśnione, ale odnosząc się jeszcze do pierwszego postu:
  1. if ($_POST['password'] == $_POST['password_r']) {
  2. if ($_POST['email'] == $_POST['email_r']) {
  3. if(!empty($_POST['nickname'])){
  4. echo "GIT";
  5. } else {echo "Wypełnij wszystkie wymagane pola"; }
  6. } else {echo "Podane adresy email nie sa identyczne"; }
  7. } else {echo "Podane hasla nie sa identyczne"; }
  8. ?>

W celu zachowania spójności można by to też w taki sposób zapisać, chociaż poprawność tego kodu jest dyskusyjna (to tylko dla ścisłości). Stosowanie jak w powyższym przykładzie elseif nie jest też do końca dobre dla użytkownika, ponieważ jeśli nie wypełni pierwszego pola, źle przepisze hasła, użyje niedozwolonych znaków w haśle i w nicku, zapomni o domenie w adresie email, będzie musiał wypełniać formularz 6 razy za każdym razem przepisując dwa razy hasła, jak nie cały formularz to krew go zaleje i to przy założeniu, że nie pomyli się gdzieś w trakcie, więc prędzej się nie zarejestruje. Błędy należy wyświetlać wszystkie jednocześnie, więc konstrukcja: if {} if{} do tego należy dodać $error=false; i zmieniać jej wartość na true jeśli wystąpi bład, a na końcu:
  1. if(!$error){echo 'Jest git';}


Ten post edytował session 12.05.2013, 09:56:14
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 14:20