Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Optymalizacja rejestracji i pytanie
Bellum
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 2.03.2010
Skąd: ta pewność?

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


Witam, chciałbym prosić o optymalizacje (a konkretnie rady co należałoby zmienić) kodu doświadczonych programistów

rejestracja.php

  1. <?php if(isset($_SESSION['session_user']))
  2. {
  3. header('location: index.php');
  4. }
  5. else
  6. {
  7. echo "<div class='h3'><h3>Rejestracja</h3></div><div class='text'>";
  8. echo "<form action='' method='POST'>
  9. <table>
  10. <tr>
  11. <td>Nazwa użytkownika:</td><td><input type='text' name='user' /></td>
  12. </tr>
  13. <tr>
  14. <td>Adres email:</td><td><input type='text' name='email' /></td>
  15. </tr>
  16. <tr>
  17. <td>Hasło:</td><td><input type='password' name='password' /></td>
  18. </tr>
  19. <tr>
  20. <td>Powtórz hasło:</td><td><input type='password' name='repassword' /></td>
  21. </tr>
  22. <tr>
  23. <td colspan=2><input type='submit' name='zarejestruj' value='Wyślij' /></td>
  24. </tr>
  25. </table>
  26. </form>";
  27. echo "</div>";
  28.  
  29. require_once'config_db.php';
  30. if(isset($_POST['zarejestruj']))
  31. {
  32. $date = time();
  33. $user = $_POST['user'];
  34. $email = $_POST['email'];
  35. $ip = $_SERVER['REMOTE_ADDR'];
  36. $password = $_POST['password'];
  37. $repassword = $_POST['repassword'];
  38.  
  39. #Sprawdzanie pól formularza
  40. if(!$_POST['user'] || !$_POST['password'] || !$_POST['repassword'] || !$_POST['email'])
  41. {
  42. echo "Jedno bądź więcej pól w formularzu jest puste...";
  43. exit;
  44. }
  45.  
  46. #Sprawdzanie wprowadzonych danych
  47. if(!eregi('^[a-zA-z]+', $user))
  48. {
  49. echo "Nazwa użytkownika może zawierać wyłącznie małe i duże litery...";
  50. exit;
  51. }
  52. elseif(!eregi('^[a-zA-z0-9]+', $password))
  53. {
  54. echo "Hasło może zawierać wyłącznie małe i duże litery oraz cyfry...";
  55. }
  56. elseif(!eregi('^[a-zA-z0-9]+', $repassword))
  57. {
  58. echo "Hasło może zawierać wyłącznie małe i duże litery oraz cyfry...";
  59. exit;
  60. }
  61. elseif(!eregi('^[a-zA-z0-9]+@[a-zA-z0-9\-]+\.[a-zA-z0-9\-\.]+$', $email))
  62. {
  63. echo "Adres email, jest niepoprawny...";
  64. exit;
  65. }
  66.  
  67. #Sprawdzanie czy hasła są identyczne
  68. if($_POST['password'] != $_POST['repassword'])
  69. {
  70. echo "Hasła nie są takie same...";
  71. }
  72.  
  73. #Sprawdzanie czy taki użytkownik już istnieje
  74. $mysqlia = "SELECT user FROM user";
  75. $mysqlib = $db->query($mysqlia);
  76. while($echo = $mysqlib->fetch_object())
  77. if(($echo->user) == $user)
  78. {
  79. echo "Użytkownik o takiej nazwie już istnieje...";
  80. }
  81.  
  82. #Sprawdzanie czy taki email już istnieje
  83. $mysqlia = "SELECT email FROM user";
  84. $mysqlib = $db->query($mysqlia);
  85. while($echo = $mysqlib->fetch_object())
  86. if(($echo->email) == $email)
  87. {
  88. echo "Ktoś się zarejestrował już z tego adresu email...";
  89. }
  90.  
  91. #################
  92. ## REJESTRACJA ##
  93. #################
  94. $mysqli = "INSERT INTO user (user, password, email, date, ip) VALUES ('$user' , '".md5($password)."', '$email', '$date', '$ip')";
  95. $echo = $db->query($mysqli);
  96. if($echo)
  97. {
  98. echo "Zostałeś pomyślnie zarejestrowany, oczekuj na aktywacje...";
  99. }
  100. else
  101. {
  102. echo "Wystąpił błąd, jeżeli błąd się powtarza skontaktuj się z administratorem...";
  103. exit;
  104. }
  105. }
  106. }
  107. ?>


I największe moje pytanie, które już dawno chciałem zadać "Jak przypisać id użytkowników do sesji, obecnie loguję po nazwie użytkownika" tak:

  1. <?php
  2. if(isset($_SESSION['session_user']))
  3. {
  4. header('location: index.php');
  5. }
  6. else
  7. {
  8. echo "<div class='h3'><h3>Logowanie</h3></div><div class='text'>";
  9. echo "<form action='' method='POST'>
  10. <table>
  11. <tr>
  12. <td>Nazwa użytkownika:</td><td><input type='text' name='user' /></td>
  13. </tr>
  14. <tr>
  15. <td>Hasło:</td><td><input type='password' name='password' /></td>
  16. </tr>
  17. <tr>
  18. <td colspan=2><input type='submit' name='zaloguj' value='Zaloguj' /></td>
  19. </tr>
  20. </table>
  21. </form>";
  22. echo "</div>";
  23.  
  24. require_once'config_db.php';
  25. if(isset($_POST['zaloguj']))
  26. {
  27. $user = $_POST['user'];
  28. $password = $_POST['password'];
  29.  
  30. #Sprawdzanie pól formularza
  31. if(!$_POST['user'] || !$_POST['password'])
  32. {
  33. echo "Jedno bądź więcej pól w formularzu jest puste...";
  34. exit;
  35. }
  36.  
  37. #Sprawdzanie wprowadzonych danych
  38. if(!eregi('^[a-zA-z]+', $user))
  39. {
  40. echo "Nazwa użytkownika może zawierać wyłącznie małe i duże litery...";
  41. exit;
  42. }
  43. elseif(!eregi('^[a-zA-z0-9]+', $password))
  44. {
  45. echo "Hasło może zawierać wyłącznie małe i duże litery oraz cyfry...";
  46. }
  47. ###############
  48. ## LOGOWANIE ##
  49. ###############
  50. if(isset($_POST['user']) && isset($_POST['password']))
  51. {
  52. $mysqlia = "SELECT * FROM user WHERE user='".$user."' AND password='".md5($password)."'";
  53. $echo = $db->query($mysqlia);
  54. if($echo->num_rows > 0)
  55. {
  56. $_SESSION['session_user'] = $user;
  57. header('location: index.php');
  58. }
  59. else
  60. {
  61. echo "Login lub hasło, jest niepoprawne...";
  62. }
  63. $db->close();
  64. }
  65. }
  66. }
  67. ?>


To wszystko co potrafię w php mnie to wystarczy ale czy jest dobrze zoptymalizowane czy też można by coś dodać bądź zmienić to byłoby miło. Najbardziej jednak nurtuje mnie pytanie, które napisałem wyżej (IMG:style_emoticons/default/smile.gif)

@kolejne z pytań: przy rejestracji jest tak, że dla kodu użytkownik Bellum i użytkownik bElLuM to inne osoby wystarczy inne hasło i email by się zarejestrować, ponad to przy logowaniu zamiast bElLuM mogę wpisać Bellum i hasło ale nie do Bellum tylko do bElLuM i się normalnie zaloguję, proszę o radę myślę, że chodzi tutaj o uwzględnianie wielkości liter.

Ten post edytował Bellum 23.04.2011, 14:35:42
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Valker
post
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 5
Dołączył: 24.08.2007
Skąd: Łódź

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


Tak więc:

Kod 1
1. Linie 57-61
Jak dla mnie nie potrzebne używanie dodatkowego wyrażenie regularnego. Jeśli sprawdzasz już hasło to potem to powtórzenie wystarczy sprawdzić czy jest takie samo jak to hasło. Jak hasło jest złe to co za różnica czy jego powtórzenie jest poprawne. A jak hasło jest poprawne to jeśli powtózenie jest takie samo to znaczy, że musi przejść to wyrażenie regularne.
2. Używanie eregi
Niby działa, ale zgodnie z Manualem nie powinno się go już stosować: http://pl.php.net/eregi
3. #Sprawdzanie czy taki użytkownik już istnieje
Nie za bardzo rozumiem czemu pobierasz listę wszystkich użytkowników, aby sprawdzić czy już taki istnieje. Przy małej ilości userów to nie ma zbytnio różnicy, ale przy dużej już jest to poważny błąd. Lepiej zastosować pytanie typu:
  1. SELECT count(user) AS cnt FROM user WHERE user = "<tutaj nick>"

4. #Sprawdzanie czy taki email już istnieje
To samo co powyżej ^^
5. Linia 98
Zamiast wywoływać funkcje time() wcześniej możesz to zrobić w zapytaniu poprzez np. NOW() zamiast '$date'
6. Hasło
Wprowadził bym jakieś minimalną długość hasła, bo teraz możesz mieć 1 znakowe ;>

Kod 2
1.
Tutaj bym nie sprawdzał czy hasło składa się tylko z liter i cyfr. Dlaczego? Bo i tak liczysz z tego sumę md5, więc nie ma za bardzo znaczenia czy to pole zawiera niebezpieczne znaki czy nie.

Co do pytania: jeśli masz w bazie danych pole id to wystarczy, że je pobierzesz (a pobierasz bo korzystasz z *) i jak użyjesz funkcji np. http://pl.php.net/mysql_fetch_row to będziesz mógł pobrać to pole i przypisać do zmiennej.


Ostatnie pytanie:
Linię 33 w pierwszym kodzie zamień na:
  1. $user = trim(strtolower($_POST['user']));


Pozdr,
Valker
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 06:34