Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne]Problem ze skryptem rejestracji i logowania
-Skera-
post
Post #1





Goście







Witam mam problem ze skryptem rejestracji i logowania który jest umieszczony na stronie : http://www.webskrypty.pl/2010/system-rejes...i-uzytkownikow/
Wszystko pięknie działa , ale są 2 problemy :
1. Dlaczego zamiast naszych znaków są krzaki
2. Dlaczego po dodaniu w sql kolejnej kolumny skrypt rejestracji przestaje działać .
Tabela sql :
  1. CREATE TABLE `uzytkownik` (
  2.  
  3. `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  4. `imie` VARCHAR(100) NOT NULL,
  5. `nazwisko` VARCHAR(100) NOT NULL,
  6. `login` VARCHAR(30) NOT NULL,
  7. `haslo` VARCHAR(50) NOT NULL,
  8. `email` VARCHAR(100) NOT NULL,
  9. `kod` VARCHAR(32) NOT NULL,
  10. `data` DATETIME NOT NULL,
  11. `status` TINYINT(1) DEFAULT 0,
  12.  
  13. PRIMARY KEY (`id`)
  14.  
  15. )
  16.  
  17. ENGINE=MyISAM DEFAULT CHARACTER SET latin1 // coś mi się wydaje że przez TO są te krzaki
  18.  
  19. COLLATE latin1_general_cs AUTO_INCREMENT=0;



A to kod rejestracji :
  1. <?php
  2.  
  3. session_start(); // rozpoczęcie sesji
  4.  
  5. if (!isset($_SESSION['login'])) { // dostęp dla niezalogowanego użytkownika
  6.  
  7. include 'db.php'; // połączenie się z bazą danych
  8. $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
  9. require_once('recaptchalib.php'); // dołączenie modułu reCAPTCHA
  10. $privatekey = 'tu wpisz klucz prywatny'; // prywatny klucz reCAPTCHA
  11. $publickey = 'tu wpisz klucz publiczny'; // publiczny klucz reCAPTCHA
  12.  
  13. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  14.  
  15. // filtrowanie treści wprowadzonych przez użytkownika
  16. $login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES);
  17. $haslo = $_POST["haslo"];
  18. $haslo2 = $_POST["haslo2"];
  19. $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
  20. $email2 = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email2"]))), ENT_QUOTES);
  21. $imie = htmlspecialchars(addslashes(strip_tags(trim($_POST["imie"]))), ENT_QUOTES);
  22. $nazwisko = htmlspecialchars(addslashes(strip_tags(trim($_POST["nazwisko"]))), ENT_QUOTES);
  23. $resp = recaptcha_check_answer ($privatekey,
  24. $_SERVER["REMOTE_ADDR"],
  25. $_POST["recaptcha_challenge_field"],
  26. $_POST["recaptcha_response_field"]);
  27.  
  28. // system sprawdza czy prawidło zostały wprowadzone dane
  29. if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
  30. $blad++;
  31. echo '<p>Proszę poprawny wprowadzić login (od 3 do 30 znaków).</p>';
  32. } else {
  33. $wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
  34. if (mysql_num_rows($wynik) <> 0) {
  35. $blad++;
  36. echo '<p>Podana nazwa użytkownika została już zajęta.</p>';
  37. }
  38. }
  39. if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
  40. $blad++;
  41. echo '<p>Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków). </p>';
  42. }
  43. if ($haslo !== $haslo2) {
  44. $blad++;
  45. echo '<p> Podane hasła nie są ze sobą zgodne. </p>';
  46. }
  47. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  48. $blad++;
  49. echo '<p> Proszę wprowadzić poprawnie adres email.</p>';
  50. } else {
  51. $wynik = mysql_query("SELECT * FROM $tabela WHERE email='$email'");
  52. if (mysql_num_rows($wynik) <> 0) {
  53. $blad++;
  54. echo '<p> Podany adres e-mail jest już zajęty.</p>';
  55. }
  56. }
  57. if ($email !== $email2) {
  58. $blad++;
  59. echo '<p> Podane adresy e-mail nie są ze sobą zgodne.</p>';
  60. }
  61. if (!$resp->is_valid) {
  62. $error = $resp->error;
  63. echo '<p>Proszę wpisać poprawnie wyrazy z obrazka.</p>';
  64. $blad++;
  65. }
  66.  
  67. // jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
  68. if ($blad == 0) {
  69.  
  70. $haslo = md5($haslo); // zaszyfrowanie hasla
  71. $kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
  72.  
  73. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$imie', '$nazwisko', '$login', '$haslo', '$email', '$kod', NOW(), '')");
  74. if ($wynik) {
  75. $list = "Witaj $login !
  76. Kliknij w poniższy link, aby aktywować swoje konto. <a href="http://www.twoja-strona.pl/weryfikacja.php?weryfikacja=potwierdz&amp;kod=$kod&quot;;" target="_blank">http://www.twoja-strona.pl/weryfikacja.php...#036;kod";</a>
  77. mail($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  78. echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  79. mysql_close($polaczenie);
  80. }
  81. }
  82. mysql_close($polaczenie);
  83. }
  84.  
  85. // tworzenie formularza HTML
  86. echo <<< KONIEC
  87.  
  88.   <form action="rejestracja.php" method="post">
  89.   <input type="hidden" name="wyslane" value="TRUE" />
  90.  
  91.   <p>Imię: <input type="text" name="imie" /></p>
  92.   <p>Nazwisko: <input type="text" name="nazwisko" /></p>
  93.   <p>Login*: <input type="text" name="login" /></p>
  94.   <p>Hasło*: <input type="password" name="haslo" /></p>
  95.   <p>Powtórz hasło*: <input type="password" name="haslo2" /></p>
  96.   <p>Adres e-mail*: <input type="text" name="email" /></p>
  97.   <p>Powtórz adres e-mail*: <input type="text" name="email2" /></p>
  98. KONIEC;
  99.  
  100. echo recaptcha_get_html($publickey); // wyświetlanie reCAPTCHA
  101. echo <<< KONIEC
  102.  
  103.   <p><input type="submit" value="wyślij" /></p></form>
  104. KONIEC;
  105.  
  106. } else {
  107. header('Location: / '); // zalogowany użytkownik zostaje przekierowany na stronę główną
  108. }
  109.  
  110. ?>

Czy ktoś może sprawdzić ten kod i zrobić tak aby działał pomimo nowych kolumn ? I jeszcze jedno ktoś widział lepszy skrypt interesuje mnie możliwość dodania avatara ( właśnie po to chcę dodać kolumnę ) . Tylko nie chodzi mi tu o potężne CMS bo generują duże obciążenie . Dziękuję za pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
-Gość-
post
Post #2





Goście







MD5 nie jest już bezpieczną metodą przechowywania haseł, zamiast tego należy używać hash'a z solą. Sól powinna być unikatowa dla każdego rekordu. Można np. zastosować szeroko stosowany framework phpass (używa go np. phpbb3, wordpress)

dodatkowo ten skrypt mimo "filtrowania treści" jest podatny na SQL INJECTION.

Nie działa zapewne dlatego że przy:

Kod
INSERT INTO $tabela VALUES('', '$imie', '$nazwisko', '$login', '$haslo', '$email', '$kod', NOW(), '')


nie ma wypisanych nazw kolumn, są tylko wartości, w takim przypadku trzeba podać wszystkie kolumny użyj struktury:

Kod
NSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)


i będzie działało

Info: http://www.w3schools.com/php/php_mysql_insert.asp
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #3





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


Co do polskich znaków to jest gdzieś przypięty temat a tematów o polskich znakach było setki (tysiące?), wystarczy poszukać
Go to the top of the page
+Quote Post

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: 22.08.2025 - 14:50