Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] rejestracja
Forum PHP.pl > Forum > PHP
gigzorr
  1. <?php
  2. //data
  3. $fullname = strip_tags($_POST['fullname']);
  4. $username = strip_tags($_POST['username']);
  5. $password = strip_tags($_POST['password']);
  6. $repeatpassword = strip_tags($_POST['repeatpassword']);
  7. $date = date("Y-m-d");
  8.  
  9. if ($submit)
  10. {
  11. //check for existance
  12. if ($fullname&&$username&&$password&&$repeatpassword)
  13. {
  14. // encrypt password
  15. $password = md5($password);
  16. $repeatpassword = md5($repeatpassword);
  17.  
  18. if ($password==$repeatpassword)
  19. {
  20. //check char lenght of username and fullname
  21. if (strlen($username)>25||strlen($fullname)>25)
  22. {
  23. echo "username albo fullname jest za dlugie";
  24. }
  25. else
  26. {
  27.  
  28. //check password lenght
  29. if(strlen($password)>25||strlen($password)<6)
  30. {
  31. echo "Haslo musi byc pomiedzy 6 a 25 znakami!";
  32. }
  33. else
  34. {
  35. //register info
  36.  
  37. echo "Success!!";
  38.  
  39.  
  40. }
  41.  
  42.  
  43. }
  44.  
  45.  
  46.  
  47.  
  48. }
  49. else
  50. echo "Twoje haslo sie nie zgadza";
  51.  
  52.  
  53. }
  54. else
  55. echo "<b>Prosze uzupelnic wszystkie pola!";
  56.  
  57.  
  58. }
  59.  
  60.  
  61. ?>
  62.  
  63. <html>
  64. <p>
  65. <form action='register.php'>
  66. <table>
  67. <tr>
  68. <td>
  69. Your full name:
  70. </td>
  71. <td>
  72. <input type='text' name='fullname'>
  73. </td>
  74. </tr>
  75. <td>
  76. <tr>
  77. <td>
  78. Choose a username:
  79. </td>
  80. <td>
  81. <input type='text' name='fullname'>
  82. </td>
  83. </tr>
  84. <td>
  85. Choose a password:
  86. </td>
  87. <td>
  88. <input type='password' name='password'>
  89. </td>
  90. </tr>
  91. <br>
  92. <td>
  93. Repeat your password:
  94. </td>
  95. <td>
  96. <input type='password' name='repeatpassword'>
  97. </td>
  98. </tr>
  99.  
  100.  
  101. </table>
  102. <p>
  103. <input type='submit' name='submit' value="Register">
  104. <a href="index.php">Back</a>
  105. </form>
  106. </html>


Błąd jest w tym, że jak wpisze wszystkie dane(lub byle co) poprawnie to dalej pokazuje, że "Prosze uzupelnić wszystkie pola" , i tak w kółko .Dodam , że kod jest nie skończony , ale np jak nic nie wpisze albo za dlugie username itp. to powinno błąd pokazywać.
Fifi209
Zacznijmy od faktu, że sprawdzasz potem "długość" hasła - a właściwie tak nie jest, bo liczysz ile znaków ma string, który dostałeś jako wynik działania funkcji md5

Tutaj cytacik z manuala:
Kod
Returns the hash as a 32-character hexadecimal number.


I jak sprawdzasz czy pola są wypełnione to używaj: empty
darko
Brakuje definicji zmiennej $submit to raz. Dwa to linia 29. - jaki jest sens sprawdzać $password po zahashowaniu i ponownym ustawieniu wartości pod tę samą zmienną, przecież wiadomo, że hash md5 będzie mieć długość 32 znaków.
gigzorr
Cytat(darko @ 6.02.2010, 22:43:17 ) *
Brakuje definicji zmiennej $submit to raz. Dwa to linia 29. - jaki jest sens sprawdzać $password po zahashowaniu i ponownym ustawieniu wartości pod tę samą zmienną, przecież wiadomo, że hash md5 będzie mieć długość 32 znaków.



Mógłbyś podpowiedzieć gdzie brakuje zmiennej $submit ?bo ja jestem jak narazie lamer w tych sprawach smile.gif
Quantum
..linia 9 blink.gif
darko
  1. $submit = $_POST['submit'];
  2. if ($submit) {
  3. // (...)
gigzorr
Cytat(darko @ 7.02.2010, 16:34:56 ) *
  1. $submit = $_POST['submit'];
  2. if ($submit) {
  3. // (...)



Teraz nic nie wyświetla , tzn jak źle wpisze pw?Coś takiego chociaż powinno być tak? " Haslo musi byc pomiedzy 6 a 25 znakami "
darko
Przeczytaj kilka postów wyżej na temat hasła i długości hashy md5 i pomyśl dlaczego hasło, które porównujesz nie spełnia zadanych kryteriów?
gigzorr
Cytat(darko @ 7.02.2010, 17:03:02 ) *
Przeczytaj kilka postów wyżej na temat hasła i długości hashy md5 i pomyśl dlaczego hasło, które porównujesz nie spełnia zadanych kryteriów?



Wywaliłem te md5 , ale dalej nic , hm a co do to tego , 'prosze uzupelnic pola wszystkie pola , tez nie dziala'.

Będę próbował , może mi się uda smile.gif
/edit
damn...

method='post' w htmlu brakowało + x2 fullname było, noi ten md5 nie potrzebny.

Taka mała różnica a cały kod potrafi zepsuć.Druga nauczka na przyszłośćsmile.gif

  1. //register info
  2. //open database
  3. $connect = mysql_connect("localhost","root","krasnal") or die ("nie moge sie polaczyc z db");
  4. mysql_select_db("phplogin") or die("nie moge znalesc db");
  5. $queryreg = mysql_query("
  6.  
  7. INSERT INTO users VALUES ('','$fullname','$username','$password','$date')
  8. ");
  9.  
  10. die("You have been registered!<a href='index.php'><br>Click</a> here to back");

/EDIT
hm . Problem leży w tym, że jak się zarejestruję to pisze "you have been .." ale w db nie ma żadnego nowego użytkownika.
darko
Cytat(gigzorr @ 6.02.2010, 22:34:51 ) *
Dodam , że kod jest nie skończony , ale np jak nic nie wpisze albo za dlugie username itp. to powinno błąd pokazywać.

Ok, najpierw skończ swój kod, dopiero wtedy pokaż, z czym jest problem i nie szukaj dziury w całym winksmiley.jpg
gigzorr
Cytat(darko @ 8.02.2010, 04:19:23 ) *
Ok, najpierw skończ swój kod, dopiero wtedy pokaż, z czym jest problem i nie szukaj dziury w całym winksmiley.jpg



Nie doczytałeś mojego poprzedniego postu do końca.
Armstrong
Wiesz do czego służy die() Dobrze przeanalizuj linie od 5 do 7. W poście nad Darko.
gigzorr
Jestem idiota. W bazie danych brakowało name/daty.Było username/password tylko.
A z tym "die()" to oco ci chodziło?
Mam jeszcze jeden problem, otóż na tych samych danych czyli loginie haśle/name , mogę się rejestrować do woli , nie mam zielonego pojęcia jak to naprawić?
altruista2
1. Możesz zacząć od prostej "optymalizacji" zmieniająć
  1. $password = md5($password);
  2. $repeatpassword = md5($repeatpassword);
  3. if ($password==$repeatpassword) {

na
  1. if ($password==$repeatpassword) {
  2. $password = md5($password);


Ale to nie jest ważne smile.gif

Jeśli chodzi o:
Cytat
Mam jeszcze jeden problem, otóż na tych samych danych czyli loginie haśle/name , mogę się rejestrować do woli , nie mam zielonego pojęcia jak to naprawić?


Jeśli działasz na bazie danych to:
  1. if(@mysql_num_rows(mysql_query("SELECT ID FROM Tabela_z_uzytkownikami WHERE Nazwa_uzytkownika='".$username."'")) > 0) {
  2. // nie można się zarejestrować, logi już występuje.
  3. }


Dodam że:
a) Wypada mieć index na "Nazwa_uzytkownika" (np. varchar(32))
cool.gif strip_tags chroni cię tylko przed atakiem XSS ze strony przeglądarki. Lektura "do poduszki":
http://pl.wikipedia.org/wiki/Cross-site_scripting
Temat: SQL Injection Insertion
http://segfaultlabs.com/files/pdf/bezpiecz...-zagrozenia.pdf
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.