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
Bellum
post
Post #2





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

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


(IMG:style_emoticons/default/guitar.gif) Tak działa, teraz zrobiłem logowanie i dwie sesje jedna trzyma id druga login, spróbuję zrobić logowanie wielopoziomowe, admin, mod itp. ewentualnie wpadnę tutaj, dzięki.

ps: email też poprawiłem.
------------------------------------------------------------------
Podbijam z nowym pytaniem.
Mam panel administracyjny, nazywa się ustawienia, po wejściu w niego wyświetla się spis użytkowników, jeżeli kliknę użytkownika, to jest tworzona jakbym wirtualna strona nie znam technicznego określenia posługuję się:

  1. $fid = intval( $_GET['fid'] );
Jeżeli zmienna $fid jest mniejsza od 1 to wyświetla się standardowa lista użytkowników.
Natomiast:
  1. elseif( is_numeric( $fid ) )
to wykonuję określoną akcję np: pokazuje dokładne dane użytkownika.
Problem polega na tym a konkretnie brak mojego zrozumienia odnośnie w jaki sposób to zrobić i czy w ogóle się za to zabierać, że w menu widnieje odnośnik dodaj news.

KOD USTAWIEŃ:
  1. <?php if(isset($_SESSION['session_user']))
  2. {
  3. require_once'config_db.php';
  4.  
  5. $fid = intval( $_GET['fid'] );
  6. if( ! isset( $fid ) || $fid < 1 )
  7.  
  8. {
  9. switch ($_GET['said'])
  10. {
  11. case "news":
  12. include'news.php';
  13. break;
  14. }
  15. echo "<form action='' method='POST'>";
  16. echo "<table class='list' width='100%' cellpadding='10' cellspacing='0'>";
  17. echo "<tr><td class='tdborderl'>Użytkownik</td><td class='tdborderc'>e-mail</td><td class='tdborderr'>Data rejestracji</td><td class='tdborderr'>Usuń</td></tr>";
  18. $mysqlia = "SELECT id, user, email, date FROM user ORDER BY ID DESC";
  19. $mysqlib = $db->query($mysqlia);
  20. while($echo = $mysqlib->fetch_object())
  21. {
  22. echo "<tr><td><a href='index.php?sid=ustawienia&fid=".$echo->id."' title='".$echo->user."'>".$echo->user."</a></td>";
  23. echo "<td>".$echo->email."/td>";
  24. echo "<td>".$human_date = date("Y-m-d H:i:s", $echo->date)."</td>";
  25. echo "<td><input class='input' type='checkbox' name='deleteus[]' value='".$echo->id."' /></td></tr>";
  26. }
  27. echo "<tr><td colspan='4'><input type='submit' value='Usuń' /></td></tr>";
  28. echo "</table>";
  29.  
  30. $delete_id=$_POST['deleteus'];
  31. $ilosc=count($delete_id);
  32.  
  33. for($i=0; $i<$ilosc; $i++) {
  34. $question = "DELETE FROM user WHERE id='".$delete_id[$i]."'";
  35. $anserwer = $db->query($question);
  36. }
  37. if($anserwer)
  38. {
  39. header('location: index.php?sid=ustawienia');
  40. }
  41. }
  42. elseif( is_numeric( $fid ) )
  43. {
  44. $mysqlia = "SELECT id, user, date, email FROM user WHERE id=(".intval($_GET['fid']).")";
  45. $mysqlib = $db->query($mysqlia);
  46. while($echo = $mysqlib->fetch_object())
  47. {
  48. echo "Użytkownik: ".$echo->user."<br />mail: ".$echo->email."<br />".$human_date = date("Y-m-d H:i:s", $echo->date)."<br /><hr></hr><a href='java script:history.back();'><< Wstecz</a>";
  49. }
  50. }
  51. else{echo "BŁĄD";}
  52. }
  53. else
  54. {
  55. header('location: index.php');
  56. }
  57. ?>


KOD NEWSA
  1. <?php echo "<form action='' method='POST'>";
  2. echo "<table class='list' width='100%' cellpadding='10' cellspacing='0'>";
  3. echo "<tr><td class='tdborderl'>Autor</td><td class='tdborderc'>Tytuł</td><td class='tdborderr'>Data dodania</td><td class='tdborderr'>Usuń</td></tr>";
  4. $mysqlia = "SELECT id, title, autor, date FROM code ORDER BY ID DESC";
  5. $mysqlib = $db->query($mysqlia);
  6. while($echo = $mysqlib->fetch_object())
  7. {
  8. echo "<tr><td><a href='index.php?sid=ustawienia&said=news&fid=".$echo->id."' title='".$echo->title."'>".$echo->autor."</a></td>";
  9. echo "<td>".$echo->title."</td>";
  10. echo "<td>".$human_date = date("Y-m-d H:i:s", $echo->date)."</td>";
  11. echo "<td><input class='input' type='checkbox' name='deleteus[]' value='".$echo->id."' /></td></tr>";
  12. }
  13. echo "<tr><td colspan='4'><input type='submit' value='Usuń' /></td></tr>";
  14. echo "</table><br />";
  15. ?>


Standardowo po wejściu w stawienia pojawia mi się lista użytkowników, po kliknięciu Dodaj news za pomocą switch wczytuje plik news.php i wszystko cacy, jednak, jeżeli chcę wejść w newsa i przypisać dodatkowe akcje nie tworząc plików dodatkowych, to nie mogę sobie go podczepić pod
  1. elseif( is_numeric( $fid ) )
bo ten parametr wykonuje tylko dla użytkowników akcje, szukam rozwiązania by fid rozpoznawał czy jestem w news czy ustawieniach.
Jeżeli jestem w news to parametr wyglądałby tak
  1. <a href='index.php?sid=ustawienia&said=news&fid=".$echo->id."' title='".$echo->title."'>".$echo->autor."</a>

A jeżeli jestem w ustawieniach standardowych i przeglądam dane użytkownika czyli wykonała się akcja jeżeli zmienna fid istnieje
  1. <a href='index.php?sid=ustawienia&fid=".$echo->id."' title='".$echo->user."'>".$echo->user."</a>

CZYLI już konkretniej jak mogę wytłumaczyć chcę by ten parametr:
  1. elseif( is_numeric( $fid ) )
  2. {
  3. $mysqlia = "SELECT id, user, date, email FROM user WHERE id=(".intval($_GET['fid']).")";
  4. $mysqlib = $db->query($mysqlia);
  5. while($echo = $mysqlib->fetch_object())
  6. {
  7. echo "Użytkownik: ".$echo->user."<br />mail: ".$echo->email."<br />".$human_date = date("Y-m-d H:i:s", $echo->date)."<br /><hr></hr><a href='java script:history.back();'><< Wstecz</a>";
  8.  
  9. TUTAJ druga AKCA DLA NEWSÓW A NIE USERÓW
  10. }
  11. }

rozróżniał akcje ale nadal w jednym pliku.

Pozdrawiam

Ten post edytował Bellum 23.04.2011, 22:08:56
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 - 10:33