Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne]Problem ze skryptem rejestracji i logowania
Forum PHP.pl > Forum > Przedszkole
Skera
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 smile.gif
Gość
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
ciekawskiii
Co do polskich znaków to jest gdzieś przypięty temat a tematów o polskich znakach było setki (tysiące?), wystarczy poszukać
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.