Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MYSQL] Nick/Hasło < 6 znaków - funkcja strlen
Kerth
post
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Cześć,
mam taki problem z funkcją strlen w php.
Otóż. Próbuję wykonać własny system rejestracji kicha(jak na razie)
Do rzeczy. Nie wiem czy dobrze skonstruowałem instrukcję if...elseif...else, bo nawet jeśli gracz wpisze nick mniejszy niż 6 znaków lub poprawnie to i tak rejestruje go wysyłając komunikat o błędzie("Nick nie może być, krótszy niż 6 znaków!")

  1. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {
  2.  
  3. // dodajemy rekord do bazy
  4.  
  5. $sql = "INSERT INTO `GRACZE` (`nick`, `email`, `haslo`) VALUES('".$nick."', '".$email."', '".$haslo."')";
  6. if ( !($result = mysql_query($sql)) )
  7. {
  8. die('error in sql<br>'.mysql_error());
  9. }
  10. else if(!strlen($_POST["nick"])<6)
  11. {
  12. echo "<br><b><font color = red>Nick nie może być, krótszy niż 6 znaków!</font></b></br>";
  13. }
  14. else if(!strlen($_POST["haslo"])<6)
  15. {
  16. echo "<br><b><font color = red>Hasło nie może być krótsze niż 6 znaków!</font></b></br>";
  17. }
  18. else
  19. {
  20. echo "<b><font color = green>Zostałeś pomyślnie zarejestrowany.</color></b>";
  21. }
  22. mysql_close($connection);
  23. }



Wie ktoś co jest nie tak? Proszę o jakieś rady.
Go to the top of the page
+Quote Post
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


ehh.
Spójrz na to co podałeś... Najpierw wrzucasz zapytanie do bazy, a później zaczynasz dopiero sprawdzać czy nick/hasło itd. nie są za krótkie. Logiczne to jest według Ciebie? Według mnie najpierw należałoby sprwadzac dlugość, potem dodawać wpis do bazy.

  1. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {
  2. if(!strlen($_POST["nick"])<6)
  3. {
  4. echo "<br><b><font color = red>Nick nie może być, krótszy niż 6 znaków!</font></b></br>";
  5. }
  6. else if(!strlen($_POST["haslo"])<6)
  7. {
  8. echo "<br><b><font color = red>Hasło nie może być krótsze niż 6 znaków!</font></b></br>";
  9. }
  10. else
  11. {
  12. echo "<b><font color = green>Zostałeś pomyślnie zarejestrowany.</color></b>";
  13. }
  14.  
  15. // dodajemy rekord do bazy
  16.  
  17. $sql = "INSERT INTO `GRACZE` (`nick`, `email`, `haslo`) VALUES('".$nick."', '".$email."', '".$haslo."')";
  18. if ( !($result = mysql_query($sql)) )
  19. {
  20. die('error in sql<br>'.mysql_error());
  21. }
  22. else
  23. {
  24. echo 'Zarejestrowano poprawnie!';
  25. }
  26. mysql_close($connection);
  27. }
Go to the top of the page
+Quote Post
Kerth
post
Post #3





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Ale teraz cały czas pojawia się komunikat: Nick nie może być, krótszy niż 6 znaków! nawet jeśli wszystko poprawnie wpiszę. I dodatkowo powinien pojawić się drugi komunikat Hasło nie może być, krótsze niż 6 znaków! a nic się nie pojawia. Co może być problemem?
Go to the top of the page
+Quote Post
Michael2318
post
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


  1. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {
  2. $message = '';
  3. if(!strlen($_POST["nick"])<6)
  4. {
  5. $message = "<br><b><font color = red>Nick nie może być, krótszy niż 6 znaków!</font></b></br>";
  6. }
  7. else if(!strlen($_POST["haslo"])<6)
  8. {
  9. $message .= "<br><b><font color = red>Hasło nie może być krótsze niż 6 znaków!</font></b></br>";
  10. }
  11. if ( $message != '' )
  12. {
  13. die($message);
  14. }
  15.  
  16. // dodajemy rekord do bazy
  17.  
  18. $sql = "INSERT INTO `GRACZE` (`nick`, `email`, `haslo`) VALUES('".$nick."', '".$email."', '".$haslo."')";
  19. if ( !($result = mysql_query($sql)) )
  20. {
  21. die('error in sql<br>'.mysql_error());
  22. }
  23. else
  24. {
  25. echo 'Zarejestrowano poprawnie!';
  26. }
  27. mysql_close($connection);
  28. }


Ten post edytował Michael2318 16.03.2013, 15:59:31
Go to the top of the page
+Quote Post
Kerth
post
Post #5





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Dalej to samo się dzieje. Może da się jakoś inaczej?
Go to the top of the page
+Quote Post
!*!
post
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Zdecyduj się do czego się odwołujesz. Do zmiennych czy do POST ?
edycja:

Poza tym instrukcja if jest bez sensu u Ciebie, dlaczego ona jest niby połączona i zależna od zmiennej nick? Jedno nie powinno wykluczać drugiego.

http://pl.wikibooks.org/wiki/PHP/Instrukcja_if

I zainteresuj się też isset, empty to za mało.

Ten post edytował !*! 16.03.2013, 16:26:31
Go to the top of the page
+Quote Post
Kerth
post
Post #7





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Ok.

Tylko teraz mam taki kod:



  1. <html>
  2. <head>
  3. <title>Proces rejestracji konta</title>
  4. </head>
  5. <body>
  6. <form action="register.php" method="post">
  7. Nick:<br />
  8. <input type="text" name="nick" /><br />
  9. Hasło:<br />
  10. <input type="password" name="haslo" /><br />
  11. E-mail:<br />
  12. <input type="text" name="email" /><br />
  13.  
  14. <input type="submit" value="Zarejestruj" />
  15. </form>
  16.  
  17. </body>
  18. </html>
  19.  
  20. <?php
  21. ini_set('display_errors', 1);
  22. // łączenie z bazą danych
  23. include 'inc/sql.php';
  24.  
  25. // odbieramy dane z formularza
  26. $nick = mysql_real_escape_string(stripslashes($_POST["nick"]));
  27. $email = mysql_real_escape_string(stripslashes($_POST["haslo"]));
  28. $haslo = mysql_real_escape_string(stripslashes($_POST["email"]));
  29.  
  30. if (!empty($nick) && !empty($email) && !empty($haslo) )
  31. {
  32. if(strlen($nick)>6){
  33. if(strlen($haslo)>6){
  34. if(preg_match("[a-zA-Z0-9_\\.]+@([a-zA-Z0-9\\-]+\\.)+[a-zA-Z]{2,4}" , $email))
  35. {
  36. mysql_query("INSERT INTO `GRACZE` (`nick`, `email`, `haslo`) VALUES('$nick', '$email', '$haslo')") or die(mysql_error());
  37.  
  38. echo "<b><font color= green>Zostałeś pomyślnie zarejestrowany.</color></b>";
  39. mail("$email", "Witamy na pokładzie!", "Witaj $nick! Poprawnie założyłeś swoje konto. Możesz teraz się zalogować i zacząć swoją przygodę. Pozdrawiamy.);
  40. }
  41. else
  42. {
  43. echo "<br><b><font color= red >Niepoprawny email!</font></b></br>";
  44. }
  45. else
  46. {
  47. echo "<br><b><font color= red>Hasło nie może być krótsze niż 6 znaków!</font></b></br>";
  48. }
  49. else
  50. {
  51. echo "<br><b><font color= red\">Nick nie może być, krótszy niż 6 znaków!</font></b><br>";
  52. }
  53. }
  54.  
  55. ?>


I nie wiem dlaczego dostaję taki błąd:

  1. Parse error: syntax error, unexpected '>' in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 43


Jest to odniesienie do linijki 43 czyli:

  1. echo "<br><b><font color= red >Niepoprawny email!</font></b></br>";


Jak to naprawić?

Ten post edytował Kerth 16.03.2013, 22:39:20
Go to the top of the page
+Quote Post
Michael2318
post
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Linia 40, funkcja mail(). Nawet kolor skladni Ci to podpowiada...
Go to the top of the page
+Quote Post
Kerth
post
Post #9





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Ale chyba nie ma to znaczenia, bo funkcja jest (chyba) dobra, ale nic. Po wyrzuceniu jej błąd pojawia się w linijce 46 czyli pierwszym "else"
Go to the top of the page
+Quote Post
Michael2318
post
Post #10





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


  1. mail("$email", "Witamy na pokładzie!", "Witaj $nick! Poprawnie założyłeś swoje konto. Możesz teraz się zalogować i zacząć swoją przygodę. Pozdrawiamy.);


Pomyśl logicznie - czego tu brakuje? Podpowiem Ci, że chodzi o koniec ciągu.
Go to the top of the page
+Quote Post
Kerth
post
Post #11





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


No wiem brakuje " ale nie o to chodzi. Tą funkcję wyrzuciłem i mam błąd jak w poście wyżej. Odnosi się do pierwszego else:



  1. <html>
  2. <head>
  3. <title>Proces rejestracji konta</title>
  4. </head>
  5. <body>
  6. <form action="register.php" method="post">
  7. Nick:<br />
  8. <input type="text" name="nick" /><br />
  9. Hasło:<br />
  10. <input type="password" name="haslo" /><br />
  11. E-mail:<br />
  12. <input type="text" name="email" /><br />
  13.  
  14. <input type="submit" value="Zarejestruj" />
  15. </form>
  16.  
  17. </body>
  18. </html>
  19.  
  20. <?php
  21. ini_set('display_errors', 1);
  22. // łączenie z bazą danych
  23. include 'inc/sql.php';
  24.  
  25. // odbieramy dane z formularza
  26. $nick = mysql_real_escape_string(stripslashes($_POST["nick"]));
  27. $email = mysql_real_escape_string(stripslashes($_POST["haslo"]));
  28. $haslo = mysql_real_escape_string(stripslashes($_POST["email"]));
  29.  
  30. if (!empty($nick) && !empty($email) && !empty($haslo) )
  31. {
  32. if(strlen($nick)>6){
  33. if(strlen($haslo)>6){
  34. if(preg_match("[a-zA-Z0-9_\\.]+@([a-zA-Z0-9\\-]+\\.)+[a-zA-Z]{2,4}" , $email))
  35. {
  36. mysql_query("INSERT INTO `GRACZE` (`nick`, `email`, `haslo`) VALUES('$nick', '$email', '$haslo')") or die(mysql_error());
  37.  
  38. echo "<b><font color= green>Zostałeś pomyślnie zarejestrowany.</color></b>";
  39. //mail("$email", "Witamy na pokładzie!", "Witaj $nick! Poprawnie założyłeś swoje konto. Możesz teraz się zalogować i zacząć swoją przygodę. Pozdrawiamy.");
  40. }
  41. else
  42. {
  43. echo "<br><b><font color= red >Niepoprawny email!</font></b></br>";
  44. }
  45. else
  46. {
  47. echo "<br><b><font color= red>Hasło nie może być krótsze niż 6 znaków!</font></b></br>";
  48. }
  49. else
  50. {
  51. echo "<br><b><font color= red>Nick nie może być, krótszy niż 6 znaków!</font></b><br>";
  52. }
  53.  
  54. }
  55.  
  56. ?>


Ten post edytował Kerth 16.03.2013, 23:01:00
Go to the top of the page
+Quote Post
_Borys_
post
Post #12





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


} po 45 i po 49 brakuje

Ten post edytował _Borys_ 16.03.2013, 23:41:38
Go to the top of the page
+Quote Post
Kerth
post
Post #13





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Ok. Pokombinowałem trochę i wyskrobałem coś takiego:

  1. <html> 
  2. <head> 
  3. <title>Proces rejestracji konta</title> 
  4. </head> 
  5. <body> 
  6.       <form action="register.php" method="post"> 
  7.            Wpisz Nick:<br /> 
  8.       <input type="text" name="nick" /><br /> 
  9.            Wpisz hasło:<br /> 
  10.       <input type="password" name="haslo" /><br /> 
  11.            Wpisz ponownie hasło:<br /> 
  12.       <input type="password" name="haslo2" /><br /> 
  13.            Wpisz E-mail:<br /> 
  14.       <input type="text" name="email" /><br /> 
  15.           
  16.       <input type="submit" value="Zarejestruj" /> 
  17.      </form>
  18.  
  19. </body> 
  20. </html>
  21.  
  22. <?php 
  23. ini_set('display_errors', 1);
  24. // łączenie z bazą danych
  25. include 'inc/sql.php';
  26.  
  27. // odbieramy dane z formularza 
  28. $nick = @mysql_real_escape_string(stripslashes($_POST["nick"]));
  29. $email = @mysql_real_escape_string(stripslashes($_POST["email"]));
  30. $haslo = @mysql_real_escape_string(stripslashes($_POST["haslo"]));
  31. $haslo2 = @mysql_real_escape_string(stripslashes($_POST["haslo2"]));
  32.  
  33.  
  34. if (!empty($nick) && !empty($email) && !empty($haslo) && !empty($haslo2) ) 
  35. { 
  36.      if(strlen($nick)<6){
  37.      if(strlen($haslo)<6){
  38.      if($haslo != $haslo2){
  39.  
  40.      {
  41.      mysql_query("INSERT INTO `GRACZE` (`nick`, `email`, `haslo`, `haslo2`) VALUES('$nick', '$email', '$haslo', '$haslo2')") or die(mysql_error());
  42.  
  43.      echo "<b><font color= green>Zostałeś pomyślnie zarejestrowany.</color></b>"; 
  44.      mail("$email", "Witamy na pokładzie!", "Witaj $nick! Poprawnie założyłeś swoje konto. Możesz teraz się zalogować i 
    zacząć swoją przygodę. Pozdrawiamy."
    ); 
  45.      }
  46.      }
  47.      else  
  48.      {
  49.          echo "<br><b><font color= red>Hasło nie może być krótsze niż 6 znaków!</font></b></br>";
  50.      }
  51.      }
  52.      else 
  53.      {
  54.          echo "<br><b><font color= red>Nick nie może być, krótszy niż 6 znaków!</font></b><br>";
  55.      }
  56.      }
  57.      else 
  58.      {
  59.          echo "<br><b><font color= red>Hasła nie są takie same!</font></b><br>";
  60.      }
  61.      
  62. }
  63. else 
  64. {
  65.     echo "<br><b><font color= red>Musisz wypełnić wszystkie pola!</font></b><br>";
  66. }
  67. ?>


W tym skrypcie jest pewien błąd, którego nie potrafię naprawić. Objawia się to w ten sposób, że po wpisaniu poprawnych(przykładowych danych):

LOGIN: dawid4157
HASŁO: dawid1996
POWTÓRZONE: dawid1996
E-MAIL: abcd@vp.pl

I pojawia się komunikat: "Hasła nie są takie same!"

Czasem też pojawia się komunikat o "Hasło nie może być krótsze niż 6 znaków!" lub inne. Nie wiem czemu to tak dziwnie jest. Może mi ktoś jakoś rzetelnie wytłumaczyć co ja źle zrobiłem? Czasem jest tak a czasem tak.
Go to the top of the page
+Quote Post
Michael2318
post
Post #14





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


  1. $nick = @mysql_real_escape_string(stripslashes($_POST["nick"]));
  2. $email = @mysql_real_escape_string(stripslashes($_POST["email"]));
  3. $haslo = @mysql_real_escape_string(stripslashes($_POST["haslo"]));
  4. $haslo2 = @mysql_real_escape_string(stripslashes($_POST["haslo2"]));


Po co tyle tego tam? Jedna funkcja wystarczy...
Po drugie:
- do filtracji emaila używamy takiego warunku:
  1. if ( !filter_var($email, FILTER_VALIDATE_EMAIL) )
  2. {
  3. die('email jest niepoprawny!');
  4. }

- do nicku nie używaj żadnych funkcji typu addslashes itd. tylko zwykłe wyrazenia regularne, czyli preg_match i sprawdzasz sobie czy np. nick sklada się tylko z liter i cyfr, jeśli tak to nick jest ok.
- hasła koduj jakimiś funkcjami i w ogole ich wtedy nie filtrujesz bo nie ma takiej potrzeby, dobrze jest jeśli w haśle sa jakieś fikuśne znaki, typu apostrofy i inne znaki specjalne. Hash i tak zamieni to na jakiś ciąg znaków złożonych tylko z liter i cyfr.
Go to the top of the page
+Quote Post
!*!
post
Post #15





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


1. po co łączysz się z bazą gdy nie przechodzisz walidacji?
2. taki kod
  1. $nick = @mysql_real_escape_string(stripslashes($_POST["nick"]));

Jest zły. Nie używaj @ i mysql_real_escape_string powinno być po walidacji
3. zastanów się co robisz. Teraz, gdy hasło jest inne niż hasło dodajesz do bazy dane.
4. formatuj kod poprawnie, za chwilę będziesz pisał ciurkiem.

Cytat(Michael2318)
- do filtracji emaila używamy takiego warunku:

To ciut za mało (IMG:style_emoticons/default/wink.gif) ale też nie zaszkodzi.

Ten post edytował !*! 17.03.2013, 13:57:54
Go to the top of the page
+Quote Post
Kerth
post
Post #16





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


A czy jak zaszyfruję hasła to jest możliwość zrobienia "Przypomnienia hasła"? Bo nie chcę, żeby zwracało hasło typu: vgvvCXVBxcwer233FSDvxcxcvxRfsd.

Z e-mailem jet na razie dobrze, tylko nie wiem czemu gdy wpisuję wszystkie dane poprawnie pojawia się komunikat o tym, że hasła nie pasują.
Go to the top of the page
+Quote Post
!*!
post
Post #17





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Przypomnienie hasła, to wygenerowanie nowego.
Cytat
tylko nie wiem czemu gdy wpisuję wszystkie dane poprawnie pojawia się komunikat o tym, że hasła nie pasują.

Czytaj ze zrozumieniem.

Ten post edytował !*! 17.03.2013, 14:00:48
Go to the top of the page
+Quote Post
Kerth
post
Post #18





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Cytat(!*! @ 17.03.2013, 13:57:32 ) *
1. po co łączysz się z bazą gdy nie przechodzisz walidacji?
2. taki kod
  1. $nick = @mysql_real_escape_string(stripslashes($_POST["nick"]));

Jest zły. Nie używaj @ i mysql_real_escape_string powinno być po walidacji
3. zastanów się co robisz. Teraz, gdy hasło jest inne niż hasło dodajesz do bazy dane.
4. formatuj kod poprawnie, za chwilę będziesz pisał ciurkiem.


To ciut za mało ;) ale też nie zaszkodzi.


1. A kiedy mam się łączyć? Wydawało mi się, że najlepiej podłączyć include z osobnym plikiem(i tak zrobiłem)
2. Czemu zły? Jeśli usunę @ to pojawią się błędy:

  1. Notice: Undefined index: nick in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 29
  2.  
  3. Notice: Undefined index: email in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 30
  4.  
  5. Notice: Undefined index: haslo in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 31
  6.  
  7. Notice: Undefined index: haslo2 in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 32


3. Warunek jest taki tylko, że dodałem to w else.

  1. if($haslo != $haslo2)
  2. echo "<br><b><font color= red>Hasła nie są takie same!</font></b><br>";


To nie wiem co jest nie tak.

PS. Szczerze mówiąc nie bardzo rozumiem o czym mówisz. Uczę się dopiero PHP więc, wiesz...

Ten post edytował Kerth 17.03.2013, 14:11:46
Go to the top of the page
+Quote Post
!*!
post
Post #19





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat
1. A kiedy mam się łączyć? Wydawało mi się, że najlepiej podłączyć include z osobnym plikiem(i tak zrobiłem)

Łącz się z bazą wtedy kiedy tego potrzebujesz.

Cytat
2. Czemu zły? Jeśli usunę @ to pojawią się błędy:

Błędy się naprawia a nie wycisza.

Cytat
3. Warunek jest taki tylko, że dodałem to w else.
PS. Szczerze mówiąc nie bardzo rozumiem o czym mówisz. Uczę się dopiero PHP więc, wiesz...

Zacznij od kursu w takim razie http://phpkurs.pl/ tam przejdź do działu "Operatory porównania". I przeczytaj jeszcze raz punkt 3 jaki podałem.

Ten post edytował !*! 17.03.2013, 14:19:20
Go to the top of the page
+Quote Post
Kerth
post
Post #20





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


A co jest źle w tej linijce?

  1. $nick = mysql_real_escape_string(stripslashes($_POST["nick"]));
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 20:32