Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kod ważny czasowo
Forum PHP.pl > Forum > Przedszkole
stefan_precz
  1. <?php
  2. include &#092;"config.php\";
  3.  
  4. $limi_czasu=900; //podajemy czas w sekundach
  5.  
  6. $zapytanie = &#092;"select * from kody_czas where kod = '\".$kod.\"'\";
  7. $wynik = mysql_query($zapytanie);
  8. $ilosc = mysql_num_rows($wynik);
  9. if ($ilosc == 0 && $ilosc[czas]<=time()) {
  10. echo &#092;"zly kod\";
  11. }
  12. elseif ($ilosc == 1) {
  13. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"'\";
  14. $wynik = mysql_query($zapytanie1);
  15. echo &#092;"kod jest dobry\";
  16. }
  17.  }
  18. ?>


w tym kodzie chodzi o to że ktoś podaje kod przez formularz kod jest sprawdzany i nadawany jest mu limit czasowy przekazywany przez zmienną $limit_czasu za pomocą time() no i moj problem polega na tym że jak ktoś pisze drugi raz ten kod a będzie on nada wazny to znów zostanie nadana mu poczatkowa wartość zmiennej $limit_czasu trzeba zrobić w tym zapytaniu UPDATE coś w stylu że jeśli pole czas != 0 to nie dodawaj już do niego nic Smile ale nie mam pojęcia jak to zrealizować
nospor
odchodząc od Twojego pytania:
Co miałeś na myśli w linijce:
if ($ilosc == 0 && $ilosc[czas]<=time()) {
przecież $ilość to liczba, nie tabela. Nie możesz zrobić $ilosc[czas]
stefan_precz
wiem tutaj jest błąd ale zapomniałem tego poprawić, no ale nie to jest probelem tylko moje wcześniejsze pytanie
nospor
  1. <?php
  2.  
  3. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas!=0\";
  4.  
  5. ?>
stefan_precz
loozik działa,

czyli aby sprawdzić czy czas nie został przekroczony dla danego kodu muszę zrobić
  1. <?php
  2.  
  3. $zapytanie = &#092;"select * from kody_czas where kod = '\".$kod.\"'\";
  4. $wynik = mysql_query($zapytanie);
  5. $ilosc = mysql_num_rows($wynik);
  6. if ($ilosc == 0 && $wynik[czas]<=time()) {
  7. echo &#092;"zly kod\";
  8. }
  9. elseif ($ilosc == 1) {
  10. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas==0\";
  11. $wynik = mysql_query($zapytanie1);
  12. echo &#092;"kod jest dobry\";
  13. }
  14.  }
  15. ?>


tylko że takie rozwiazanie cuś nie chce działać
nospor
nie wiem co ci nie dziala, ale napewno taki warunek jest bledny logicznie:
if ($ilosc == 0 && $wynik[czas]<=time()) {
gdyż jesli ilosć ==0 to $wynik jest pusty i napewno nie ma elemntu czas.
Jeżeli już to powinno być
if ($ilosc == 0 || $wynik['czas']<=time()) {

PS. Pamiętaj o ciapkach

edit: że już nie wspomnę że $wynik to nigdy nie będzie tablicą. Poczytaj se o mysql_query
stefan_precz
  1. <?php
  2. if ($ilosc == 0 || $wynik['czas']<=time()) {
  3. ?>
przy takim układzie zawsze wskazuje ze kod jest zły
nospor
bo $wynik to nie wynik zapytania, tylko "uchwyt" do wyniku. poczytaj se o mysql_query. Na podstawie $wynik musisz jeszcze odebrac dane np. mysql_fetch_array
stefan_precz
  1. <?php
  2. $zapytanie = &#092;"select * from kody_czas where kod = '\".$kod.\"'\";
  3. $wynik = mysql_query($zapytanie);
  4. $sprawdz = mysql_fetch_array($wynik);
  5. $ilosc = mysql_num_rows($wynik);
  6. if ($ilosc == 0 || $sprawdz['czas']<=time()) {
  7. ?>
zrobiłem tak i to samo
nospor
oznacza to, że albo $ilość=0 (czyli nic nie spełnia twego zapytania) albo $sprawdz['czas']<=time(). To już nie moja wina że masz takie dane.
Daj echo $ilosc; echo $sprawdz['czas']; i zobacz co ci zwraca i przeanalizuj se to
stefan_precz
$ilosc zwraca 1
"$sprawdz['czas']"; zwraca zawartość pola czas
nospor
czyli $sprawdz['czas']<=time() czyli kod jest zły, tak? to już nie moja wina biggrin.gif
Lecę domciu
stefan_precz
ma porowanać czas obecny z czasem dodania i jeśli ten jest większy od tych 900 sekund przekazanych w zmiennej limit_czasu to kod nie wazny, brakuje więc w tym tego przyrówniania, a ja nie mam pojęcia jak to zapisać inaczej
nospor
to może tak:
if ($ilosc == 0 || $sprawdz['czas']+$limit_czasu<=time()) {//kod niewazny

nie wiem czy oto ci chodzi, bo później w update i tak zwiekszasz czas o $limit_czasu
stefan_precz
update nie zwiększy bo jest zrobione
Kod
$zapytanie1="UPDATE kody_czas SET czas = ".(time()+$limit_czasu)." WHERE kod = '".$kod."' and czas=0";
czyli jeśli kod jest już raz ruszony to update go juz nie rusza smile.gif Jeśli chodzi o twoje rozwiązanie nada nie działa,
  1. <?php
  2.  echo &#092;"<form action=\"kod_czas.php\" method=\"post\">\";
  3.  echo &#092;"Podaj kod:<br><input name=\"kod\" type=\"text\"><br>
  4.  <input type=&#092;"submit\" value=\"Dalej>>\">
  5.  </form>&#092;";
  6.  
  7. if ($_POST['kod']) {
  8. include &#092;"config.php\";
  9.  
  10. $limit_czasu=900; //czas w sekundach
  11.  
  12. $zapytanie = &#092;"select * from kody_czas where kod = '\".$kod.\"'\";
  13. $wynik = mysql_query($zapytanie);
  14. $sprawdz = mysql_fetch_array($wynik);
  15. $ilosc = mysql_num_rows($wynik);
  16.  if ($ilosc == 0 || $sprawdz['czas']+$limit_czasu<=time()) {
  17. echo &#092;"zly kod <br>\";
  18. echo &#092;"$ilosc <br>\";
  19. echo &#092;"$sprawdz[czas]\";
  20. }
  21. elseif ($ilosc == 1) {
  22. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas = 0\";
  23. $wynik = mysql_query($zapytanie1);
  24. echo &#092;"kod jest dobry\";
  25. }
  26.  }
  27.  
  28.  
  29. ?>
Sprawdziłem i wiem że porblem polega na tym że jeśli kod jest nowy czyli pole czas ma wartość 0 to przy tym porównianiu zawsze go odrzuci trzeba zrobić aby kod najpier update odznaczał a potem weryfikował ale nie wiem jak to zrealizwoać gdyż kod musi być najpierw sprawdzony czy jest w bazie
nospor
to może tak:
  1. <?php
  2.  
  3. if ($ilosc == 1 && $sprawdz['czas']==0) {
  4. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas = 0\";
  5. $wynik = mysql_query($zapytanie1);
  6. echo &#092;"kod jest dobry\";
  7. }
  8. else {
  9. echo &#092;"zly kod <br>\";
  10. echo &#092;"$ilosc <br>\";
  11. echo &#092;"$sprawdz[czas]\";
  12.  
  13. }
  14.  
  15.  
  16. ?>
stefan_precz
no tak ale gdzie tutaj dalej sprawdzanie czy limit czasu dla kodu upłynął ? Poza tym jeśli kody są wazne czasowo np. przez dwa dni to ktoś kto na drugi dzień wpisze kod zostanie zablokowany przez to sprawdz['czas']==0
nospor
ups. zapomnialem:
  1. <?php
  2.  
  3. if ($ilosc == 1 && $sprawdz['czas']==0) {
  4. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas = 0\";
  5. $wynik = mysql_query($zapytanie1);
  6. echo &#092;"kod jest dobry\";
  7. }
  8. elseif ($sprawdz['czas']<=time()) {
  9. echo &#092;"zly kod <br>uplynal czas\";
  10. }
  11. else
  12. {
  13. echo &#092;"zly kod <br>cos innego\";
  14. }
  15.  
  16. ?>
stefan_precz
no cóż teraz jest tak wpisuje nowy kod działa, odznacza go po czym gdy wpisuje go ponownie zwraca błąd zły kod czyli to echo "zly kod <br>cos innego"; tutaj dalej jest to $sprawdz['czas']==0 wywaliłem to i kod działa powinien działać przez 15 minut trzeba poczekać
nospor
dużo masz tych rekordów w tabeli? pokaż je jak możesz.
Bo albo w tabeli masz kilka rekordów o tych samych kodach, albo ci update nie działa.
No jak może ci wyskoczyć że zly kod cos innego i jednoczesnie czas=0? Musi w związku z tym bbyć więcej rekordów o tych samych kodach. No bo przecież jesli czas=0 i jest ilosc=1 to jest sprawdzane na początku.
stefan_precz
- ale jeśli na początku jest $ilosc == 1 && $sprawdz['czas']==0 to jest to pierwszy warunek więc kazdy odznaczony kod przez update nie będzie działać wpisuje kod "www" odznacza go w polu czas i już nie spełnia warunku $ilosc == 1 && $sprawdz['czas']==0
nospor
No dobra, pomalutku.
Zaklądamy że chodzi o kod test123. Aktualnie jest czas=0;

Wpisujesz kod test123. Watunek ilosc=1 i czas=0 jest spelniony. Robi więc update i czas ustawia na 900 sekund później. Podejrzyj se teraz ten rekord. Zobacz czy kod i czas się zgadza.

Wpisujesz drugi raz kod test123. warunek ilosc=1 i czas=0 nie spelniony. Patrzy drugi warunek ilosc=1 i czas<=time(). Jesli wszystko wczesniej poszlo dobrze ten warunek powinien byc spelniony. jesli nie jest to ja wymiękam biggrin.gif (nie, no musi być spełniony).

Dam ci nowy kod. Wykonaj te dwie operacje i pokaż wyniki każdej z nich:
  1. <?php
  2.  
  3. if ($ilosc == 1 && $sprawdz['czas']==0) {
  4. $newTime=time()+$limit_czasu;
  5. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".$newTime.\" WHERE kod = '\".$kod.\"' and czas = 0\";
  6. $wynik = mysql_query($zapytanie1);
  7. echo &#092;"kod jest dobry <br>\";
  8. echo &#092;"kod: $kod; new time:$newTime; ilsoc:$ilosc<br>\";
  9. }
  10. elseif ($ilosc=&& $sprawdz['czas']<=time()) {
  11. echo &#092;"zly kod <br>uplynal czas<br>\";
  12. echo &#092;"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\";
  13. }
  14. else
  15. {
  16. echo &#092;"zly kod <br>cos innego<br>\";
  17. echo &#092;"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\";
  18. }
  19.  
  20. ?>
stefan_precz
wpisuje pierwszy raz kod test123
zwraca kod jest dobry

Cytat
kod: test123; new time:1113907122; ilsoc:1


wpisuje drugi raz

Cytat
zly kod
cos innego
kod: test123; czas w bazie:1113907122;czas aktualny:1113906246;ilsoc:


czyli to samo co przedtem
nospor
a, czyli wszytko jest ok. bo jest jeszcze sytuacja, gdy kod jest w limicie czasu
  1. <?php
  2.  
  3. if ($ilosc == 1 && $sprawdz['czas']==0) {
  4. $newTime=time()+$limit_czasu;
  5. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".$newTime.\" WHERE kod = '\".$kod.\"' and czas = 0\";
  6. $wynik = mysql_query($zapytanie1);
  7. echo &#092;"kod jest dobry <br>\";
  8. echo &#092;"kod: $kod; new time:$newTime; ilsoc:$ilosc<br>\";
  9. }
  10. elseif ($ilosc=&& $sprawdz['czas']<=time()) {
  11. echo &#092;"zly kod <br>uplynal czas<br>\";
  12. echo &#092;"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\";
  13. }
  14. elseif ($ilosc=&& $sprawdz['czas']>time()) {
  15. echo &#092;"kod jest w bazie i jeszcze sie lapie w limicie czasu\";
  16. echo &#092;"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\";
  17. }
  18. else
  19. {
  20. echo &#092;"zly kod <br>cos innego<br>\";
  21. echo &#092;"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\";
  22. }
  23.  
  24. ?>


no teraz chyba jest tak jak chcesz biggrin.gif
stefan_precz
hehe udało się w końcu wielkie dzięki smile.gif
nospor
ufff, co za ulga. biggrin.gif
stefan_precz
mam jeszcze problem polegający na pamiętaniu kodu
  1. <?php
  2. setcookie('wybrany_id',$id,time()+3600);
  3.  
  4. if(!isset($_COOKIE['kod'])) {
  5.  
  6.  echo &#092;"<form action=\"wyswietl.php\" method=\"post\">\";
  7.  echo &#092;"Podaj kod:<br><input name=\"kod\" type=\"text\"><br>
  8.  <input type=&#092;"submit\" value=\"Dalej>>\">
  9.  </form>&#092;";
  10. }
  11. else
  12. {
  13. setcookie('kod',$kod,time()+48000);
  14. }
  15. dalsza część strony
  16. ?>
- no i problem polega na tym że chce zrobić tak że raz wpisany kod będzie pamiętany więc wysyłam ciastko, i skrypt powienien się zachować tak: wpisuje kod pojawia się chroniona treść a panel do wpisania kodu znika zamykam okno wybieram jakąś inną pozycje i tym razem kodu nie powinno już wołac bo dla tego usera zapisane jest cookie
nospor
No i wczym problem. Twój kod chyba to realizuje. Brakuje ewentualnie ustawienia ciastka gdy ktoś wpisze kod i wyśle. Ale to robisz podobnie.
stefan_precz
  1. <?
  2. setcookie('wybrany_id',$id,time()+3600);
  3.  
  4. if(!isset($_COOKIE['kod'])) {
  5.  
  6.  echo &#092;"<form action=\"wyswietl.php\" method=\"post\">\";
  7.  echo &#092;"Podaj kod:<br><input name=\"kod\" type=\"text\"><br>
  8.  <input type=&#092;"submit\" value=\"Dalej>>\">
  9.  </form>&#092;";
  10. }
  11. else
  12. {
  13.  setcookie('kod',$kod,time()+48000);
  14. }
  15. if ($_POST[kod]) {
  16. include &#092;"config.php\";
  17.  
  18. $limit_czasu=900; //czas w sekundach
  19.  
  20. $zapytanie = &#092;"select * from kody_czas where kod = '\".$kod.\"'\";
  21. $wynik = mysql_query($zapytanie);
  22. $sprawdz = mysql_fetch_array($wynik);
  23. $ilosc = mysql_num_rows($wynik);
  24.  
  25. if ( ($ilosc == 1 && $sprawdz['czas']==0) || ($ilosc=&& $sprawdz['czas']>time() ) ) {
  26. $newTime=time()+$limit_czasu;
  27. $zapytanie1=&#092;"UPDATE kody_czas SET czas = \".$newTime.\" WHERE kod = '\".$kod.\"' and czas = 0\";
  28. $wynik = mysql_query($zapytanie1);
  29.  
  30. ///////////////////////////////chroniona tresc//////////////////////////////////////////////////////
  31. $dir = &#092;"gry\";
  32. $query = mysql_db_query ($mysql_baza, &#092;"SELECT * FROM gry WHERE id = '\".$_COOKIE['wybrany_id'].\"'\");
  33. $row = mysql_fetch_array($query);
  34. echo &#092;"<object type=\"application/x-shockwave-flash\" data=\"$dir/\".$row['patch'].\"\" height=\"600\" width=\"800\">
  35. <param name=&#092;"movie\" value=\"$dir/\".$row['patch'].\"\">
  36. <param name=&#092;"quality\" value=\"high\">
  37. <param name=&#092;"bgcolor\" value=\"#FFFFFF\">
  38. </object>&#092;";
  39. ///////////////////////////////chroniona tresc//////////////////////////////////////////////////////
  40. }
  41. elseif ($ilosc=&& $sprawdz['czas']<=time()) {
  42. echo &#092;"zly kod <br>uplynal czas<br>\";
  43. }
  44. else
  45. {
  46. echo &#092;"zly kod <br>cos innego<br>\";
  47. }
  48. }
  49. ?>


tak wygląda cały kod, problem w tym że po raz wpisanym kodzie formularz powinien do wpisania kodu powinien znikać i po ponownym wyborze jakiejś gry nie powienien wymagać już kodu bo go pamięta gdyz poszło ciastko a tak się nie dzieje za kazdym razem trzeba podawać kod
nospor
Najwyraźniej ci ciastka nie ustawia. Pamiętaj że ciastka trzeba wysłać przed wysłaniem nagłówków (czy jakoś tak)
stefan_precz
a jak trzeba zrobić zeby ustawiało cookie
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.