Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Kody jednorazowe
Forum PHP.pl > Forum > PHP
patol
Witam,

Chciałbym stworzyć ankietę, którą można wypełnić jedynie po wpisaniu wcześniej wygenerowanego i przesłanego drogą "analogową" jednorazowego kodu.

Inaczej mówiąc. Klient dostaje jednorazowy kod uprawniający do wypełnienia ankiety, przy wypełnianiu ankiety musi wpisać kod, ale kod może być wykorzystany tylko raz!
Wszystko chcę zrobić w PHP i MySQL.

Pozdrawiam
Pawel
lDoran
zrób tabelę w bazie:
Kod
tabela codes:
user_id | code | active

Jeżeli kod nie był używany ustaw go na true w rubryce active, w przeciwnym przypadku false. Kody możesz generować na podstawie dzień-miesiąc-rok-godzina-minuta-sekunda i hash np. md5
Zdunek
Cytat(patol @ 2.11.2010, 10:35:07 ) *
Witam,

Chciałbym stworzyć ankietę, którą można wypełnić jedynie po wpisaniu wcześniej wygenerowanego i przesłanego drogą "analogową" jednorazowego kodu.

Inaczej mówiąc. Klient dostaje jednorazowy kod uprawniający do wypełnienia ankiety, przy wypełnianiu ankiety musi wpisać kod, ale kod może być wykorzystany tylko raz!
Wszystko chcę zrobić w PHP i MySQL.

Pozdrawiam
Pawel

Nie opiszę dokładnych rozwiązań i gotowego skryptu(google pomoże smile.gif ) ale myślę że te kilka rad swoje zrobi.

Jeżeli chcesz zrobić wysyłanie np. przez smsy, to musisz się zapoznać z paypal, dotpay albo czymś podobnym(sprawa problematyczna i niestety są koszta obsługi tego).

Jeśli chcesz zrobić wysyłanie na email, to sprawa banalna. Przy generowaniu kodu(wysyłaniu go na emaila) dodajesz do bazy wpis z adresem email oraz id, id hashujesz jakąś prostą funkcją i wysyłasz ten hash na emaila. Bądź jeszcze dodajesz time() do tego i wtedy hashujesz(dłuższe, ale użytkownik ma opcję kopiuj)
najprostszy sposób żeby zahashować $dane = strtr($dane,'qwertyuiop1234567890','1234567890qwertyuiop');
ew. możesz użyć jakieś phpowe md5 sh1 itp.
a potem użytkownik podaje email i kod i gotowe smile.gif

Pozdrawiam
Zdunek
patol
a jednak sobie z tym nie radzę.
Jeszcze raz od początku przedstawię problem

Stworzyłem prostą ankietą, by ją wypełnić trzeba podać wcześniej wygenerowany niepowtarzalny i otrzymany listem kod.
Pomyślałem, że wygenerowane kody wpiszę do bazy i skrypt zbierający odpowiedzi z ankiety będzie edytował rekordy w bazie gdzie niepowtarzalny kod będzie pełnij rolę ID.
Po wypełnieniu ankiety na podany adres zostaje wysłany inny kod, który uprawnia do rabatu.
Problem polega na tym by móc wypełnić ankietę tylko raz wykorzystując przesłany wcześniej kod.

Mój kod wygląda tak:
  1.  
  2. $kod2 = substr(md5(time()), 0, 6);
  3.  
  4. if ($ac=="uaktualnij") {
  5. $baza = mysql_connect($sql_host, $sql_user, $sql_password);
  6. if ($baza) {
  7. $wynik = mysql_select_db($sql_baza);
  8. if ($wynik && $kod<>"") {
  9. $wynik = mysql_query("
  10.  
  11. UPDATE $sql_tabela
  12. SET
  13. data='$data',
  14. ip='$ip',
  15. imie='$imie',
  16. nazwisko='$nazwisko',
  17. email='$email',
  18. pole1='$pole1',
  19. pole2='$pole2',
  20. pole3='$pole3',
  21. pole3_1='$pole3_1',
  22. status='1'
  23. WHERE kod='$kod' and status = '0'
  24. ");
  25. }
  26.  
  27. if ($wynik) {
  28. $headers = 'From: kod@lcel.com.pl' . "\r\n" .
  29. 'Reply-To: kupon@lcel.com.pl' . "\r\n" .
  30. 'X-Mailer: PHP/' . phpversion();
  31. mail("$email","Kod rabatowy","Kupon rabatowy na zakupy w LC ELEKTRONIK: $kod2",$headers);
  32. echo "
  33.  
  34. <div align=\"center\">
  35. <table width=\"100\" border=\"0\" cellpadding=\"0\">
  36. <tr>
  37. <td><img src=\"http://www.lcel.com.pl/repository/layout/img/szyld3.png\" /></td>
  38. </tr>
  39. <tr>
  40. <td valign=\"top\"><br><br>Dziękujemy za poświęcony czas, kod rabatowy został przesłany na adres: $email
  41.  
  42. </td>
  43. </tr>
  44. <tr>
  45. <td valign=\"top\"></td>
  46. </tr>
  47. </table>
  48. </div>
  49. ";
  50. }else{ echo "<br>Rekord nie został dodany/uaktualniony: ".mysql_error();
  51. mysql_close($baza);
  52. $ac="szukaj";
  53. $szid=$id;
  54. }
  55. }
  56. }
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.