Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Kody na rejestrację
Forum PHP.pl > Forum > Przedszkole
Marcinekk
Siema,

mam skrypt rejestracji i chciałbym, aby był on na kody.
Na kody tzn. że w bazie danych dodaje kody, które są jednorazowe.
Powiedzmy, że użytkownikowi daje kod (przykładowo 123) i on wchodzi na adres jakistam.pl/dodajkonto.php na wstępie poprosi go o ten kod, jeżeli będzie błędny, to go nie wpuści, jeżeli będzie poprawny, to go wpuści a kod zostanie usunięty. Proszę też, aby był jeden kod (prywatny), który nigdy się nie usunie po użyciu.

Kod rejestracji :

  1. <?php
  2. include 'config.php';
  3. db_connect();
  4.  
  5.  
  6. if(!$_SESSION['logged']) {
  7.  
  8. if(isset($_POST['name'])) {
  9.  
  10. $_POST['name'] = clear($_POST['name']);
  11. $_POST['password'] = clear($_POST['password']);
  12. $_POST['password2'] = clear($_POST['password2']);
  13. $_POST['email'] = clear($_POST['email']);
  14.  
  15.  
  16. if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) {
  17. echo '<p>Musisz wypełnić wszystkie pola.</p>';
  18.  
  19. } elseif($_POST['password'] != $_POST['password2']) {
  20. echo '<p>Podane hasła różnią się od siebie.</p>';
  21.  
  22. } elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
  23. echo '<p>Podany email jest nieprawidłowy.</p>';
  24. } else {
  25.  
  26. $result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}'");
  27. $row = mysql_fetch_row($result);
  28. if($row[0] > 0) {
  29. echo '<p>Już istnieje użytkownik z takim loginem lub adresem e-mail.</p>';
  30. } else {
  31.  
  32. $_POST['password'] = codepass($_POST['password']);
  33.  
  34. mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', '".time()."')");
  35. echo '<p>Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php">zalogować</a>.</p>';
  36. }
  37. }
  38. }
  39.  
  40.  
  41. echo '<form method="post" action="dodajkonto.php">
  42. <p>
  43. Login:<br>
  44. <input type="text" value="'.$_POST['name'].'" name="name">
  45. </p>
  46. <p>
  47. Hasło:<br>
  48. <input type="password" value="'.$_POST['password'].'" name="password">
  49. </p>
  50. <p>
  51. Powtórz hasło:<br>
  52. <input type="password" value="'.$_POST['password2'].'" name="password2">
  53. </p>
  54. <p>
  55. E-mail:<br>
  56. <input type="text" value="'.$_POST['email'].'" name="email">
  57. </p>
  58. <p>
  59. <input type="submit" value="Zarejestruj">
  60. </p>
  61. </form>';
  62. } else {
  63. echo '<p>Jesteś już zalogowany, więc nie możesz stworzyć nowego konta.</p>
  64. <p>[<a href="index.php">Powrót</a>]</p>';
  65. }
  66.  
  67. db_close();
  68. ?>
markonix
Ty potrzebujesz pomocy w próbach wykonania czy po prostu zlecasz?
Marcinekk
Gdybym zlecał, to napisałbym w odpowiednim dziale, albo w temacie chyba proste tak?
markonix
No ale nie widzę nigdzie w tym żadnych zalążków.

Najpierw przemyśl porządnie koncepcje - kto kody np. ustala bo to dość istotne..
Marcinekk
Nie rozumiem Cię. Napisałem normalnie, że kody są wpisywane do bazy danych przeze mnie.
markonix
Nie napisałeś dosłownie, zrozumiałem że skrypt.

Póki nie masz użytkownika to nie możesz mu przypisać kodu tak więc kody to oddzielna lista.
Przy dodawaniu dodaj dodatkowe pole na owy kod - sprawdzaj go na końcu gdy cały formularz jest w porządku żeby ktoś nie mógł zgadywać kodów.
Jeżeli kod jest w bazie oznacz go jako użyty np. kolumna used (tinyint 0/1) i przypisz do kodu użytkownika relacją (kolumna used_by int/varchar, zależy jak masz w systemie).
jarek0203
Musisz podczas rejestracji dodać do bazy np. losowe dwa kody.

echo '<p>Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php">zalogować</a>.</p>';
Gdy to się wykonuje dodajesz info o kodzie jaki się dodał do bazy.

A podczas logowania podany kod zmieniasz np na NULL w tabeli gdzie user_name=$_POST['name']
Marcinekk
facepalmxd.gif

Chodziło mi o to, że ja dodaje kod do bazy danych, i jak ktoś nie ma tego kodu, to nie otrzymuje dostępu do formularza rejestracji, jeżeli ma ktoś ten kod, to przed rejestracją ma pojawić się mu formularz, żeby wpisał kod. Jak wpisze i się zarejestruje to kod ma się usunąć. A kod użytkownikowi podaje sam, nie pod jakieś podpisywanie jak to 2x up mówił. facepalmxd.gif
jarek0203
Problem tkwi w tym że skąd php będzie wiedział ze jakiś noname który chce się zarejestrować ma ten kod czy nie...
Marcinekk
BOŻE!

Skrypt ma tylko sprawdzać, czy kod jest poprawny, jeżeli tak to go usuwa z bazy i pozwala na rejestracje temu userowi!!
jarek0203
Napisz formularz do pobierania kodu z post=nazwa pliku do rejestracji

  1. if($_POST[kod]=$kod_z_bazy
  2. {
  3. kod rejestracji
  4. }
  5. else{ header('Location:plik_z_formularzem.php'); }
Marcinekk
I to sobie samo magicznie wybierze bazę danych tak? ohno-smiley.gif
jarek0203
Przecież masz już kod który jakoś magicznie dodaje i pobiera informacje z bazy danych.

Nie wiem jak wygląda twoja baza. Jak wygląda tabela z kodami?
Marcinekk
Kody mają być w tabeli "kody" i kolumna "kod" smile.gif
markonix
Pisałeś na początku o tym, że kod jest usuwany po użyciu, a za chwilę "który nigdy się nie usunie po użyciu" więc nie miej pretensji.

Czyli kod to tak jakby hasło dostępu do zakładki rejestracji.
No ok, czyli algorytm jest taki:

1) Wpisz hasło dostępu.
2) Jeżeli ok to wyświetla formularz i reszta obywa się jak dotychczas
3) Przy rejestracji kod usuwasz, czy przypisujesz do nowo utworzonego użytkownika

Niby proste ale trzeba wziąć pod uwagę walidacje danych - po wysłaniu formularza kod zniknie dlatego trzeba go gdzieś zapisać.
Zapisałbym go w sesji - wpisanie poprawnego kodu będzie podobne do zalogowania.
Tak długo jak w sesji będzie kod tak długo formularz będzie działać - jeżeli brak kodu w sesji - wyświetl formularz do wpisania kodu dostępu.
W ostatnim kroku za pomocą $_SESSION['access_code'] będziesz wiedział, którego kodu użył żeby go odpowiednio wyłączyć/usunąc.
Marcinekk
Widać, że kolega up nie wie co to czytanie ze zrozumieniem. Napisałem, żeby była możliwość dodania jednego kodu, który nigdy się nie usunie po użyciu, a inne (które bd dawał użytkownikom) będą się usuwały po użyciu.
jarek0203
  1. $result = mysql_query("SELECT * FROM `kody` where kod='$_POST[kod]'");
  2. while($row = mysql_fetch_assoc($result)) {
  3.  
  4. $kod_z_bazy=$row[kod]; }
  5.  
  6. if($_POST[kod]=$kod_z_bazy)
  7. {
  8. mysql_query("delete '$_POST[kod]' from kody where kod='$_POST[kod]'")
  9. kod rejestracji
  10. }
  11. else{ header('Location:plik_z_formularzem.php'); }
Marcinekk
Formularz, który ma sprawdzać kod ma być w tym samym pliku, co rejestracja?
markonix
jarek0203 kiepski, nieoptymalny i dziurawy kod, poza tym używaj znaczników jak wstawiasz coś na forum

Co do owego specjalnego kodu nie widzę problemu. Jeżeli będzie zawsze to jeden kod to po prostu dodaj warunek if na "sztywno" przed usuwaniem kodów w momencie udanej rejestracji.

@edit Tak, może być w tym samym, może być includowany - ja bym zrobił te drugie bo będą obszerne warunki.
jarek0203
Nie.

Nie do końca wiem jak ma działać ten kod prywatnym ale po prostu przed usuwaniem sprawdz czy kod=kod_prywatny.
Marcinekk
Zrobiłem to tak :

  1. <?php
  2. include 'config.php';
  3. include 'rejesracja.php';
  4. db_connect();
  5.  
  6. $result = mysql_query("SELECT * FROM `kody` where kod='$_POST[kod]'");
  7. while($row = mysql_fetch_assoc($result)) {
  8.  
  9. $kod_z_bazy=$row[kod]; }
  10.  
  11. if($_POST[kod]=$kod_z_bazy)
  12. {
  13. mysql_query("delete '$_POST[kod]' from kody where kod='$_POST[kod]'")
  14. // sprawdzamy czy user nie jest przypadkiem zalogowany
  15. if(!$_SESSION['logged']) {
  16. // jeśli zostanie naciśnięty przycisk "Zarejestruj"
  17. if(isset($_POST['name'])) {
  18. // filtrujemy dane...
  19. $_POST['name'] = clear($_POST['name']);
  20. $_POST['password'] = clear($_POST['password']);
  21. $_POST['password2'] = clear($_POST['password2']);
  22. $_POST['email'] = clear($_POST['email']);
  23.  
  24. // sprawdzamy czy wszystkie pola zostały wypełnione
  25. if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) {
  26. echo '<p>Musisz wypełnić wszystkie pola.</p>';
  27. // sprawdzamy czy podane dwa hasła są takie same
  28. } elseif($_POST['password'] != $_POST['password2']) {
  29. echo '<p>Podane hasła różnią się od siebie.</p>';
  30. // sprawdzamy poprawność emaila
  31. } elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
  32. echo '<p>Podany email jest nieprawidłowy.</p>';
  33. } else {
  34. // sprawdzamy czy są jacyś uzytkownicy z takim loginem lub adresem email
  35. $result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}'");
  36. $row = mysql_fetch_row($result);
  37. if($row[0] > 0) {
  38. echo '<p>Już istnieje użytkownik z takim loginem lub adresem e-mail.</p>';
  39. } else {
  40. // jeśli nie istnieje to kodujemy haslo...
  41. $_POST['password'] = codepass($_POST['password']);
  42. // i wykonujemy zapytanie na dodanie usera
  43. mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', '".time()."')");
  44. echo '<p>Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php">zalogować</a>.</p>';
  45. }
  46. }
  47. }
  48.  
  49. // wyświetlamy formularz
  50. echo '<form method="post" action="dodajkonto.php">
  51. <p>
  52. Login:<br>
  53. <input type="text" value="'.$_POST['name'].'" name="name">
  54. </p>
  55. <p>
  56. Hasło:<br>
  57. <input type="password" value="'.$_POST['password'].'" name="password">
  58. </p>
  59. <p>
  60. Powtórz hasło:<br>
  61. <input type="password" value="'.$_POST['password2'].'" name="password2">
  62. </p>
  63. <p>
  64. E-mail:<br>
  65. <input type="text" value="'.$_POST['email'].'" name="email">
  66. </p>
  67. <p>
  68. <input type="submit" value="Zarejestruj">
  69. </p>
  70. </form>';
  71. } else {
  72. echo '<p>Jesteś już zalogowany, więc nie możesz stworzyć nowego konta.</p>
  73. <p>[<a href="index.php">Powrót</a>]</p>';
  74. }
  75. }
  76. else{ header('Location:rejestracja.php'); }
  77.  
  78.  
  79.  
  80. db_close();
  81. ?>


Lecz do cholery nie mam zielonego pojęcia co ma zawierać w sobie formularz, w końcu musi jakoś sprawdzić poprawność kodu i przepuścić usera..
markonix
Nie widzę w ogóle żebyś coś zrobił z mojego opisu.
Marcinekk
Bo twój opis mi nic nie mówi...
markonix
  1. if ($_SESSION['secure_code'])
  2. include('rejestracja.php');
  3. else
  4. include('wpisz_kod.php');
Marcinekk
Cytat(markonix @ 23.02.2014, 02:53:23 ) *
include('wpisz_kod.php');[/php]


i co ja tu niby mam wpisać?
markonix
Formularz do wpisania kodu.. Kod sprawdzający, zapisywanie go do sesji i odświeżenie strony (aby sprawdził czy warunek jest spełniony - jak tak to wyświetla plik z rejestracją i wszystko wygląda jak jest teraz).
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.