Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z rejestracja i sesjami
Forum PHP.pl > Forum > Przedszkole
ArthaS_Delano
Witam, robie na swojej stronce prosta rejestracje z uzyciem prostego tokena.. Niestety mam najprawdopodbniej zle skonstruowane warunki gdyz i tak nie chce mi dodac danych do bazy.. Blad pojawia sie dopiero przy sprawdzaniu poprawnosci tokena gdyz kiedy to usune to all dziala jak powinno.. Moze ktos ma pomysl na jakas lepsza modyfikacje mojego kodu ? Bylbym niesamowicie wdzieczny.. Najlepiej jak pokaze kod:

  1. <?php
  2.  require('libs/Smarty.class.php');
  3.  include('data/config.php');
  4.  $smarty = new Smarty;
  5.  
  6. $_SESSION['token'] = '';
  7. for($i=0;$i<5;$i++) {
  8.  $liczba = rand(0,9);
  9.  $_SESSION['token'] .= $liczba;
  10.  $img .= '<img src="images/token/'.$liczba.'.gif" />';
  11. }
  12.  
  13. $token = $_SESSION['token'];
  14.  
  15. if (($_POST['nick']) && ($_POST['haslo']) && ($_POST['haslo2']) && ($_POST['email']) && ($_POST['email2']) && ($_POST['token']))
  16. {
  17.  if ($_POST['haslo'] == $_POST['haslo2'])
  18.  {
  19. if ($_POST['email'] == $_POST['email2'])
  20. {
  21.  if ($token == $_POST['token']) // tu sie pojawia blad, po usunieciu tej linijki all zapisuje dobrze..
  22.  {
  23.  
  24.  $nick = $_POST['nick'];
  25.  $haslo = $_POST['haslo'];
  26.  $email = $_POST['email'];
  27.  
  28.  $db = "INSERT INTO `player` (`id`, `nick`, `haslo`, `email`) VALUES ('', '$nick', '$haslo', '$email')";
  29.  $start = mysql_query($db);
  30.  }
  31. }
  32.  }
  33. }
  34.  
  35.  $smarty -> assign('img', $img);
  36.  $smarty -> assign('error', $error);
  37.  $smarty -> display('register.tpl');
  38. ?>


Siedze nad tym caly wieczor ale pomyslalem ze poprosze o pomoc madrzejszych.. Z gory dziekuje..
nowotny
Wyechuj sobie zmienne $_SESSION['token'] i $_POST['token'] i parę razy przeładuj stronę... od razu zauważysz co zrobiłeś źle... winksmiley.jpg
ArthaS_Delano
Teoretycznie wiem bo tak jakby zapisywalo sie nastepne wywolanie tokena a porownuje do porzedniego ktory uzytkownik wpisal.. Nie wiem tylko jak rozwiazac to..
bmL
Najpierw sprawdź formularz a potem dopiero generuj token
  1. <?php
  2. require('libs/Smarty.class.php');
  3.  include('data/config.php');
  4.  $smarty = new Smarty;
  5.  
  6.  
  7.  
  8. $token = $_SESSION['token'];
  9.  
  10. if (($_POST['nick']) && ($_POST['haslo']) && ($_POST['haslo2']) && ($_POST['email']) && ($_POST['email2']) && ($_POST['token']))
  11. {
  12.  if ($_POST['haslo'] == $_POST['haslo2'])
  13.  {
  14. if ($_POST['email'] == $_POST['email2'])
  15. {
  16.  if ($token == $_POST['token']) // tu sie pojawia blad, po usunieciu tej linijki all zapisuje dobrze..
  17.  {
  18.  
  19.  $nick = $_POST['nick'];
  20.  $haslo = $_POST['haslo'];
  21.  $email = $_POST['email'];
  22.  
  23.  $db = "INSERT INTO `player` (`id`, `nick`, `haslo`, `email`) VALUES ('', '$nick', '$haslo', '$email')";
  24.  $start = mysql_query($db);
  25.  }
  26. }
  27.  }
  28. }
  29. $_SESSION['token'] = '';
  30. for($i=0;$i<5;$i++) {
  31.  $liczba = rand(0,9);
  32.  $_SESSION['token'] .= $liczba;
  33.  $img .= '<img src="images/token/'.$liczba.'.gif" />';
  34. }
  35.  
  36.  $smarty -> assign('img', $img);
  37.  $smarty -> assign('error', $error);
  38.  $smarty -> display('register.tpl');
  39. ?>


Jeżeli się nie mylę tongue.gif
ArthaS_Delano
Tylko ze kod html wyglada tak i token jest akceptowany razem z reszta formularza.. To jak potem sprawdzic token ?

  1. <td width="450" align="center" valign="top" background="images/site-bg.png">
  2. <br>
  3. <center><img src="images/menu/guildinfo.png"></center>
  4. <br>
  5. <form action="index.php" method="post">
  6. <tr>
  7. <td align="left">Nick:</td><td align="right"><input type="text" name="nick" size="30"></td>
  8. </tr>
  9. <tr>
  10. <td align="left">Haslo:</td><td align="right"><input type="password" name="haslo" size="30"></td>
  11. </tr>
  12. <tr>
  13. <td align="left">Powtórz:</td><td align="right"><input type="password" name="haslo2" size="30"></td>
  14. </tr>
  15. <tr>
  16. <td align="left">E-mail:</td><td align="right"><input type="text" name="email" size="30"></td>
  17. </tr>
  18. <tr>
  19. <td align="left">Powtórz:</td><td align="right"><input type="text" name="email2" size="30"></td>
  20. </tr>
  21. <tr>
  22. <td align="left"></td><td align="right">{$img}</td>
  23. </tr>
  24. <td align="left">Przepisz:</td><td align="right"><input type="text" name="token" size="5"></td>
  25. </tr>
  26. <tr>
  27. <tr>
  28. <td align="left"></td><td align="right"><input type="submit" name="register" value="ZAREJESTRUJ"></td>
  29. </tr>
  30. </table>
  31. </form>
  32. </center>
  33. </td>
bmL
Najlepiej zrób tak jak na początku i w formularzu dodaj pole
  1. <input type="hidden" name="token_spr" value="{token}">

I potem tylko porównaj $_POST[token] do $_POST[token_spr].
Oczywiście w kodzie php też dopisz:
  1. <?php
  2. $smarty -> assign('token', $liczba);
  3. ?>

a
  1. <?php
  2. $_SESSION['token'] .= $liczba;
  3. ?>

można wywalić smile.gif
ArthaS_Delano
Nie rozumie czemu mam wywalic

  1. <?
  2. $_SESSION['token'] .= $liczba;
  3. ?>


skoro to jest odpowiedzialne za ulozenie 5 cyfrowego tokena..
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.