Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Złe odczytywanie "ifów"
Forum PHP.pl > Forum > Przedszkole
JustHuman4
Witam. Mam mały problem z ifami. Otóż tworzę rejestrację i mam takie oto pola:
Nick
E-mail
Hasło
Powtórz hasło
Mam ifa sprawdzającego czy wszystkie pola zostały uzupełnione oraz ifa sprawdzającego czy podane hasła są takie same. Tak to wygląda:


  1. //po wciśnięciu przycisku "rejestruj"
  2. if(isset($_POST['submit']))
  3. {
  4. $nick = $_POST['nick'];
  5. $mail = $_POST['mail'];
  6. $pass = $_POST['pass'];
  7.  
  8.  
  9. if(empty($nick) || empty($mail) || empty($pass)) echo 'Nie wszystkie pola zostały uzupełnione.';
  10. if($_POST['pass'] != $_POST['pass2'])
  11. {
  12. die('Podane hasła nie są takie same.');
  13. }
  14. else
  15. {
  16. //dalsza część kodu


Ładnie sprawdza czy hasła są takie same czy też nie, jednak problem z tym, że nie trzeba wcale uzupełniać wszystkich pól. Czyli np po uzupełnieniu pól nick i e-mail wyświetla się komunikat
"Nie wszystkie pola zostały uzupełnione." (czyli dobrze) ale od razu po tym wyświetla się komunikat "Gratulacje! Utworzyłeś konto ........"
O co tu chodzi?

Z góry dziękuję za każdą pomoc
Pozdrawiam
Shili
If sprawdzający wypełnialność pól ma tylko i wyłącznie taki zasięg.
  1. if(empty($nick) || empty($mail) || empty($pass)) echo 'Nie wszystkie pola zostały uzupełnione.';

Podpowiedź: cały (CAŁY) kod pod nim się wykona. Nie ma bloku else, w którym wykonują się instrukcje jeśli pola zostaną wypełnione - instruke pod ifem wykonają się więc zawsze.
-kaem-
Bo drugi if wykonuje się niezależnie od wyniku pierwszego ifa. W pierwszym ifie jeśli jest jakieś pole puste wyświetla odpowiedni komunikat, ale potem wykonuję się drugi warunek, w którym jeśli hasła są takie same wykona się to co jest w else.
JustHuman4
Problem jakby rozwiązany, zamieniłem po prostu kolejność ifów, Sprawdza i to i to, jest ładnie, tylko że kiedy nie podam takich samych haseł, usuwa mi się zawartość strony. Chodzi o to o czym powiedział @Shili ? Usunęło mi się kilka divów które znajdowały się na dole kodu strony. Jak temu zapobiec?

Pozdrawiam
dami95
  1. die('Podane hasła nie są takie same.');

Ten kod zakańcza dalszą interpretację skryptu.

Ja zawszę sobie sprawdzam wszystkie elementy formularza i zależnie czy są błędy czy nie ma zmieniam zmienną $errors odpowiedio na wartość 1 lub 0.
W twoim przypadku zrobił bym tak:

  1. if(isset($_POST['submit'])) {
  2. $nick = $_POST['nick'];
  3. $mail = $_POST['mail'];
  4. $pass = $_POST['pass'];
  5.  
  6. $errors = 0;
  7.  
  8. if(empty($nick) || empty($mail) || empty($pass)) {
  9. echo 'Nie wszystkie pola zostały uzupełnione.';
  10. $errors = 1;
  11. } else {
  12. if($_POST['pass'] != $_POST['pass2']) {
  13. echo 'Podane hasła nie są takie same.';
  14. $errors = 1;
  15. }
  16. }
  17. }
  18.  
  19. if ($errors) {
  20. //dodajemy do bazy czy coś tam
  21. }
JustHuman4
Cytat(dami95 @ 27.12.2011, 19:36:07 ) *
  1. die('Podane hasła nie są takie same.');

Ten kod zakańcza dalszą interpretację skryptu.

Ja zawszę sobie sprawdzam wszystkie elementy formularza i zależnie czy są błędy czy nie ma zmieniam zmienną $errors odpowiedio na wartość 1 lub 0.
W twoim przypadku zrobił bym tak:

  1. if(isset($_POST['submit'])) {
  2. $nick = $_POST['nick'];
  3. $mail = $_POST['mail'];
  4. $pass = $_POST['pass'];
  5.  
  6. $errors = 0;
  7.  
  8. if(empty($nick) || empty($mail) || empty($pass)) {
  9. echo 'Nie wszystkie pola zostały uzupełnione.';
  10. $errors = 1;
  11. } else {
  12. if($_POST['pass'] != $_POST['pass2']) {
  13. echo 'Podane hasła nie są takie same.';
  14. $errors = 1;
  15. }
  16. }
  17. }
  18.  
  19. if ($errors) {
  20. //dodajemy do bazy czy coś tam
  21. }


Wykrywa błąd w linijce
  1. $errors = 1;

za
  1. echo 'Nie wszystkie pola zostały uzupełnione.';


Pozdrawiam i dzięki za odpowiedź
kadlub
zacznij to analizować od środka
  1. if(isset($_POST['submit'])) {
  2. $nick = $_POST['nick'];
  3. $mail = $_POST['mail'];
  4. $pass = $_POST['pass'];
  5.  
  6.  
  7.  
  8. if(!empty($nick) || !empty($mail) || !empty($pass)) {
  9.  
  10.  
  11. if($_POST['pass'] == $_POST['pass2']) {
  12. tutaj kod jak wszystkie warunki są spełnione
  13. }
  14. else {
  15. echo'hasła się nie zgadzają';
  16. }
  17. }
  18. else{
  19. echo'nie wypełniłeś wszystkich pól';
  20.  
  21. }
  22. }
  23.  
JustHuman4
To co napisał kadlub jest w ogóle dziwne. Pomoże ktoś jeszcze z tym co napisał dami95?? Dlaczego wykrywa tam błąd?

Pozdrawiam
Turson
Nie jest dziwne, tylko najprostszym sposobem. I poprawnie
JustHuman4
Cytat(TursoN @ 29.12.2011, 17:19:04 ) *
Nie jest dziwne, tylko najprostszym sposobem. I poprawnie


Mam w takim razie taki kod:

  1. if(isset($_POST['submit']))
  2. {
  3. $nick = $_POST['nick'];
  4. $mail = $_POST['mail'];
  5. $pass = $_POST['pass'];
  6.  
  7.  
  8. if($_POST['pass'] != $_POST['pass2'])
  9. {
  10. die('Podane hasła nie są takie same.');
  11. }
  12. if(empty($nick) || empty($mail) || empty($pass)) echo 'Nie wszystkie pola zostały uzupełnione.';
  13. else
  14. {
  15.  
  16. $result = mysql_query("SELECT * FROM users WHERE nick='$nick'");
  17.  
  18. if(mysql_num_rows($result)!=0) echo 'Istnieje już konto z takim loginem.';
  19. else
  20. {
  21. $data = time();
  22.  
  23. $pass = md5($pass);
  24.  
  25. $query = "INSERT INTO `users` (`nick` , `pass`, `mail` , `data_rejestracji`) VALUES ('$nick', '$pass', '$mail' , '$data')";
  26.  
  27. if(mysql_query($query)) echo 'Gratulacje! Zostałeś poprawnie zarejestrowany. Już teraz możesz się <a href="index.php">zalogować</a>.';
  28. }
  29. }
  30. }

I gdzie to mam wstawić bo nie za bardzo wiem?

Pozdrawiam i dzięki za każdą pomoc
Fifi209
Jejku, użyj jakiegoś PDO bo na trimy, strip_tags etc patrzeć się nie da

W ogóle czemu HASŁO PRZECHOWUJESZ W POSTACI JAWNEJ?!
JustHuman4
Fifi, daruj sobie tutaj takie rzeczy. Problem rozwiązany, temat do zamknięcia

Pozdrawiam i dzięki za nakierowanie
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.