Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz rejestracji z aktwacją administratora/problem
Forum PHP.pl > Forum > PHP
hadzo
Od kilku dni zacząłem zabawę z PHP napisałem swój system użytkowników, logowanie etc. Teraz moje pytanie jest takie: Chciałbym aby po rejestracji do użytkownika został wysłany mail: Twoje żądanie zalogowania się zostanie rozpatrzone przez administratora strony. Jak zrobić tak aby była możliwość aktywowania użytkowników po tym jak wpiszą swoje dane w formularz a drugie pytanie jak zabezpieczyć formularz ponieważ tak naprawdę łatwo znaleźć informacje jak zbudować formularz ale są to informacje sprzed paru lat a ja potrzebuje jakiegoś zabezpieczenia, na razię opiera się on o prosty skrypt php. Z góry dziękuję za pomoc wink.gif
  1. <?php
  2.  
  3. $db_host = 'localhost';
  4. $db_user = 'test';
  5. $db_pass = 'xxxxx';
  6. $db_name = 'users';
  7.  
  8. $con­nect = mysql_connect($db_host,$db_user,$db_pass) or die ('Nie udało się połączyć z bazą danych');
  9. mysql_select_db($db_name) or die('Nie znaleziono bazy !');
  10. mysql_set_charset('utf8', $con­nect);
  11.  
  12. $nick = trim($_POST["nick"]);
  13. $imie = trim($_POST["imie"]);
  14. $haslo = trim($_POST["haslo"]);
  15. $haslo2 = trim($_POST["haslo2"]);
  16.  
  17. if ($_POST['wyslij']) {
  18. if (empty($nick) or empty($haslo) or empty($haslo2)) {
  19. echo('Pola wyma­gane nie są wypełnione<br>');
  20. } elseif ($haslo !== $haslo2) {
  21. echo ("Wpisane hasła nie sa takie same !" . '<br>');
  22. } else {
  23.  
  24. $query = mysql_query("insert into reje­stra­cja (nick,imie,haslo,haslo2) values ('$nick','$imie','$haslo','$haslo2')");
  25.  
  26. if ($query = true) {
  27. echo ('Zosta­łeś popraw­nie zare­je­stro­wany <br>');
  28. } else {
  29. echo ("Wysta­pił‚ błąd pod­czas reje­stra­cji");
  30. }
  31. }
  32. }
  33.  
  34. ?>
hadzo
Niestety nie bardzo rozumiem.. ;/
Chciałbym tylko dowiedzieć się jaka komenda pozwoli na tkz "uśpienie" nowego uzytkownika w bazie od samego początku żeby można było decydować który może się logować a który nie po weryfikacji danych z formularz?


Wchodzi ktoś na moją stronę i chce z niej coś pobrać ale żeby to zrobić musi się zarejestrować. Wpisuje swoje dane w formularz i te dane lądują u mnie w bazie mysql teraz ja patrze na dane tego osobnika (imie email itd) i chce decydować czy może pobierać pliki ze strony czy nie.
com
no to przykład:
  1. $nick = trim(htmlspecialchars($_POST["nick"], ENT_QUOTES));


hasła w bazie danych trzymasz plain textem?

Cytat(hadzo @ 27.09.2013, 22:35:04 ) *
Chciałbym tylko dowiedzieć się jaka komenda pozwoli na tkz "uśpienie" nowego uzytkownika w bazie od samego początku żeby można było decydować który może się logować a który nie po weryfikacji danych z formularz?


A tak po polsku? smile.gif

zakładając że cie dobrze zrozumiałem dodajesz jeszcze jedno pole typu Boolean i ustawiasz w nim 0 dla nie potwierdzonych użytkowników i 1 dla potwierdzonych a potem sprawdzasz jeśli 1 może się logować jak nie to nie może smile.gif

pisz nowe posty wink.gif no to robisz tak samo jak powiedziałem, ale hasła to musisz zahaszować jakaś funkcją typu md5 , sha1 itp wink.gif
hadzo
ale jak to opisać w php questionmark.gif? Bo właśnie głowie się nad tym 3 dzień questionmark.gif? Bo właśnie o to mi chodzi wink.gif


a jeżeli chodzi o hash to można by jeszcze przez mysqli
tylko w 9 linijce mam jakis błąd ;/
  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST))
  3. {
  4.  
  5. $login = $_POST['login'];
  6. $password = $_POST['password'];
  7. $email = $_POST['email'];
  8.  
  9. if(empty($login) empty($password) empty($email))
  10. {
  11. die('Wypełnij wszystkie dane.');
  12. }
  13. elseif(!filter_var($email, FILTER_VALIDATE_EMAIL))
  14. {
  15. die('Nie poprawny adres E-mail.');
  16. }
  17. else
  18. {
  19. include_once('config.php');
  20.  
  21. $mysqli = new mysqli($db['host'], $db['user'], $db['password'], $db['database']);
  22.  
  23. if($mysqli -> connect_error)
  24. die('Problem z połączeniem się z bazą danych:'.$mysqli -> connect_error.'['.$mysqli -> connect_errno.']');
  25.  
  26.  
  27. $login = trim(htmlspecialchars($mysqli -> real_escape_string($login)));
  28. $password = hash('sha256', trim(htmlspecialchars($mysqli -> real_escape_string($password))));
  29. $email = trim(htmlspecialchars($mysqli -> real_escape_string($email)));
  30. $ip = $_SERVER['REMOTE_ADDR'];
  31.  
  32.  
  33. $stmt = $mysqli -> prepare("INSERT INTO `user`(`id_user`, `login`,`password`,`email`,`added`,`ip`) VALUES('', ? , ? , ? , now(), ?)");
  34. $stmt -> bind_param('ssss', $login, $password, $email, $ip);
  35. $stmt -> execute();
  36.  
  37. if($stmt -> affected_rows == 1)
  38. {
  39. echo 'Zostałeś pomyślnie zarejestrowany';
  40. }
  41. }
  42. }
  43.  
  44.  
  45. ?>


com
1. po pierwsze dodaj sobie pole np verification typu Boolean do tabeli rejestracja
  1. <?php
  2.  
  3. $db_host = 'localhost';
  4. $db_user = 'test';
  5. $db_pass = 'xxxxx';
  6. $db_name = 'users';
  7.  
  8. $con­nect = mysql_connect($db_host,$db_user,$db_pass) or die ('Nie udało się połączyć z bazą danych');
  9. mysql_select_db($db_name) or die('Nie znaleziono bazy !');
  10. mysql_set_charset('utf8', $con­nect);
  11.  
  12. $nick = trim(htmlspecialchars($_POST["nick"], ENT_QUOTES)); // Convert special characters to HTML entities
  13. $imie = trim(htmlspecialchars($_POST["imie"], ENT_QUOTES));
  14. $haslo = trim(htmlspecialchars($_POST["haslo"], ENT_QUOTES));
  15. $haslo2 = trim(htmlspecialchars($_POST["haslo2"], ENT_QUOTES));
  16. $haslo = md5($haslo); // hash bo nie możesz mieć przecież jawnych haseł w bazie tongue.gif
  17. $haslo2 = md5($haslo2);
  18.  
  19. if ($_POST['wyslij']) {
  20. if (empty($nick) or empty($haslo) or empty($haslo2)) {
  21. echo('Pola wyma­gane nie są wypełnione<br>');
  22. } elseif ($haslo !== $haslo2) {
  23. echo ("Wpisane hasła nie sa takie same !" . '<br>');
  24. } else {
  25.  
  26. $query = mysql_query("insert into reje­stra­cja (nick,imie,haslo,haslo2,verification) values ('$nick','$imie','$haslo','$haslo2',0)");
  27.  
  28. if ($query = true) {
  29. echo ('Zosta­łeś popraw­nie zare­je­stro­wany <br>');
  30. } else {
  31. echo ("Wysta­pił? błąd pod­czas reje­stra­cji");
  32. }
  33. }
  34. }
  35.  
  36. ?>


Tylko kolejne pytanie jak będziesz sprawdzał tych zarejestrowanych?

zdecyduj sie jakiego kodu używasz smile.gif
  1. if(empty($login) || empty($password) || empty($email)) {\\whatever }


  1. if ($query == true) { .. }
jak już pomijamy fakt ze mysql_query() nie zwraca true wink.gif
hadzo
Program z którego korzystam wywala mi komunikat, że mysql jest przestażały i że lepiej użyć mysqli i myślałem, że lepiej bedzie jednak mysqli ale gdy dopisuje więcej to wywala mi błędy w mojej bazie danych ma być: imię i nazwisko, email (jako login czego też nie mogę zrobić) firma, adres, tel. I im wiecej tych danych tym wiecej problemów.... a jeszcze ta weryfikacja właśnie próbuje to zrobić z tą komórką boolean ale to chyba ponad moje możliwości biggrin.gif

czyli co byś proponował zostać przy msql czy msqli ?
com
nie wiem z jakiego programu korzystasz, ale korzystaj z niego dalej bo mądrze Ci podpowiada, powoli mysql wycofują z php wink.gif mysqli oczywiscie.. ale dałeś kod z mysql to o nim rozwialiśmy smile.gif a co do reszty to musisz pokazać o co konkretnie chodzi bo nie jestem czarodziej.gif wink.gif
hadzo
Więc dokładnie mówiąc mam taką tabelkę
i męczę się już 3 dzień jak napisać skrypt który mi to wrzyci w bazę
bo te które napisałem coś nie chcą...
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Dokument bez tytułu</title>
  5. </head>
  6.  
  7. <form id="form1" name="form1" method="post" action="">
  8. <table width="362" border="0" cellspacing="0" cellpadding="0">
  9. <tr>
  10. <td width="126">email:</td>
  11. <td width="303"><label for="email"></label>
  12. <input type="text" name="email" id="email" /></td>
  13. </tr>
  14. <tr>
  15. <td>hasło:</td>
  16. <td><label for="haslo"></label>
  17. <input type="text" name="haslo" id="haslo" /></td>
  18. </tr>
  19. <tr>
  20. <td>hasło (powtórz):</td>
  21. <td><label for="haslo1"></label>
  22. <input type="text" name="haslo1" id="haslo1" /></td>
  23. </tr>
  24. <tr>
  25. <td>imię i nazwisko:</td>
  26. <td><label for="nazwa"></label>
  27. <input type="text" name="nazwa" id="nazwa" /></td>
  28. </tr>
  29. <tr>
  30. <td>nazwa firmy:</td>
  31. <td><label for="firma"></label>
  32. <input type="text" name="firma" id="firma" /></td>
  33. </tr>
  34. <tr>
  35. <td>adres firmy:</td>
  36. <td><label for="adres"></label>
  37. <input type="text" name="adres" id="adres" /></td>
  38. </tr>
  39. <tr>
  40. <td>tel. kontaktowy:</td>
  41. <td><label for="haslo1"></label>
  42. <input type="text" name="tel" id="tel" /></td>
  43. </tr>
  44. <tr>
  45. <td>&nbsp;</td>
  46. <td align="right"><input type="submit" name="zarejestruj" id="zarejestruj" value="Zarejestruj" /></td>
  47. </tr>
  48. </table>
  49. </form>
  50. </body>
  51. </html>
Turson
Coś w ten deseń
  1. <?php
  2.  
  3. $db_host = 'localhost';
  4. $db_user = 'test';
  5. $db_pass = 'xxxxx';
  6. $db_name = 'users';
  7.  
  8. $con­nect = mysql_connect($db_host,$db_user,$db_pass) or die ('Nie udało się połączyć z bazą danych');
  9. mysql_select_db($db_name) or die('Nie znaleziono bazy !');
  10. mysql_set_charset('utf8', $con­nect);
  11.  
  12. $nick = trim(htmlspecialchars($_POST["nick"], ENT_QUOTES));
  13. $imie = trim(htmlspecialchars($_POST["imie"], ENT_QUOTES));
  14. $haslo = trim(htmlspecialchars($_POST["haslo"], ENT_QUOTES));
  15. $haslo2 = trim(htmlspecialchars($_POST["haslo2"], ENT_QUOTES));
  16. $haslo = md5($haslo);
  17. $haslo2 = md5($haslo2);
  18.  
  19. if (isset($_POST['wyslij']))
  20. {
  21. if (empty($nick) or empty($haslo) or empty($haslo2))
  22. {
  23. echo'Pola wyma­gane nie są wypełnione<br>';
  24. }
  25. elseif ($haslo !== $haslo2)
  26. {
  27. echo "Wpisane hasła nie sa takie same !" . '<br>';
  28. }
  29. else
  30. {
  31. $query = mysql_query("insert into reje­stra­cja (nick,imie,haslo,haslo2,verification) values ('$nick','$imie','$haslo','$haslo2',0)");
  32. }
  33. if($query)
  34. {
  35. echo 'Zosta­łeś popraw­nie zare­je­stro­wany <br>';
  36. }
  37. else
  38. {
  39. echo ("Wysta­pił? błąd pod­czas reje­stra­cji");
  40. }
  41. }
  42.  
  43.  
  44. ?>
com
no bo pola z formularza się nie zgadzają ze skryptem ... a tak konkretnie wyskakuje jakiś błąd? czy nie dodaje sie wszystko co ma czy o co chodzi? wink.gif
Turson
com myślałem, że jesteś wróżką i wiesz co nie działa kiedy ktoś powie, że ma problem tongue.gif
Można wałkować to 100x dziennie wink.gif


hadzo przestaw się na mysqli lub pdo póki jeszcze się uczysz



@down
Dobra, moje niedopatrzenie bo jest kilka wersji skryptu i pomieszałem biggrin.gif
com
Turson czym to się niby rożni od tego co było wcześniej?
  1. if($query)
questionmark.gif to przecież już napisałem , ale nie w tym tkwił problem bo rozmawiamy już nie o tej wersji tylko tej z mysqli tongue.gif

Turson wiem w co drugim poście dziś wróże ale cóż zrobić biggrin.gif
hadzo
więc tak biggrin.gif chyba jestem coraz bliżej biggrin.gif linijka 41 problem ;/

  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST))
  3. {
  4.  
  5. $email = $_POST['email'];
  6. $haslo = $_POST['haslo'];
  7. $haslo1 = $_POST['haslo1'];
  8. $nazwa = $_POST['nazwa'];
  9. $firma = $_POST['adres'];
  10. $tel = $_POST['tel'];
  11.  
  12.  
  13. if(empty($email) || empty($haslo) || empty($haslo1) || empty($nazwa) || empty($firma) || empty($tel))
  14. {
  15. die('Wypełnij wszystkie dane.');
  16. }
  17. elseif(!filter_var($email, FILTER_VALIDATE_EMAIL))
  18. {
  19. die('Nie poprawny adres E-mail.');
  20. }
  21. else
  22. {
  23. include_once('config.php');
  24.  
  25. $mysqli = new mysqli($db['host'], $db['user'], $db['password'], $db['database']);
  26.  
  27. if($mysqli -> connect_error)
  28. die('Problem z połączeniem się z bazą danych:'.$mysqli -> connect_error.'['.$mysqli -> connect_errno.']');
  29.  
  30.  
  31. $email = trim(htmlspecialchars($mysqli -> real_escape_string($email)));
  32. $haslo = hash('sha256', trim(htmlspecialchars($mysqli -> real_escape_string($haslo))));
  33. $haslo1 = hash('sha256', trim(htmlspecialchars($mysqli -> real_escape_string($haslo1))));
  34. $nazwa = trim(htmlspecialchars($mysqli -> real_escape_string($nazwa)));
  35. $firma = trim(htmlspecialchars($mysqli -> real_escape_string($firma)));
  36. $tel = trim(htmlspecialchars($mysqli -> real_escape_string($tel)));
  37. $ip = $_SERVER['REMOTE_ADDR'];
  38.  
  39.  
  40. $stmt = $mysqli -> prepare("INSERT INTO `user`(`id_user`,`email`,`haslo`,`haslo1`,`nazwa`,`firma`,`adres`,`tel`,`added`,`i
    p`) VALUES('', ? , ? , ? , now(), ?)"
    );
  41. $stmt -> bind_param('sssd', $email, $haslo, $ip);
  42. $stmt -> execute();
  43.  
  44. if($stmt -> affected_rows == 1)
  45. {
  46. echo 'Zostałeś pomyślnie zarejestrowany';
  47. }
  48. }
  49. }
  50.  
  51.  
  52. ?>



plik config

  1. <?php
  2.  
  3. $db['host'] = 'localhost';
  4. $db['user'] = 'test';
  5. $db['password'] = 'test';
  6. $db['database'] = 'test';
  7.  
  8.  
  9. ?>
com
  1. VALUES('', ? , ? , ? , now(), ?)");
za mało parametrów za dużo pól to pierwsze , tu tak samo
  1. $stmt -> bind_param('sssd', $email, $haslo, $ip);
hadzo
coś pomieszałem z tym biggrin.gif co tam mógłbym wpisać w pola ;/ no i czy z w. wrzuconą tabelką ma prawo to zadziałać :
a no właśnie i jak w mysqli porównać hasła bo chyba nie elseif questionmark.gif czy się myle?


Trochę się już gubię w tym.. ;/ dlatego tyle pytań a chciałbym po 5 dniach w końcu skończyć bo już mi się śnią te komendy biggrin.gif
com
każdy przecinek w values to kolejna pozycja stad wiec skoro jest tu (`id_user`,`email`,`haslo`,`haslo1`,`nazwa`,`firma`,`adres`,`tel`,`added`,`ip`) 10 to tam też musi być 10 im odpowiadających pól i w kolejnym tak samo.. nie wiem bo nie znam struktury tabeli smile.gif
hadzo
tabela

Mówisz masz biggrin.gif marze żeby to już działało smile.gif jak to zoptymalizować zeby już mi wrzucało do bazy
Turson
Nie no przesadzasz. Tak ciężko pozamieniać wartości jakie podał com na te, które masz w bazie...?
hadzo
Ale to wciąż nie działa

Fatal error: Call to a member function bind_param() on a non-object in line 41

$stmt = $mysqli -> prepare("INSERT INTO `user`(`id_user`,`email`,`haslo`,`haslo1`,`nazwa`,`firma`,`adres`,`tel`,`added`,`ip`) VALUES('$email','$haslo','$haslo1',$nazwa','$firma','$adres',$tel',now(),'$ip')");
$stmt -> bind_param('sssd', $email, $haslo, $ip);
$stmt -> execute();

Albo najwyraźniej ja tu czegoś nie rozumiem ;/
Turson
  1. $stmt = $mysqli -> prepare("INSERT INTO `user`(`id_user`,`email`,`haslo`,`haslo1`,`nazwa`,`firma`,`adres`,`tel`,`added`,`i
    p`) VALUES('$email','$haslo','$haslo1',$nazwa','$firma','$adres',$tel',now(),'$ip')"
    );

Znowu to samo. Do 10 kolumn dodajesz 9 wartości.

Jeśli `id_user` jest Auto Increment to dodaj do niego null
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.