stefan_precz
18.04.2005, 10:17:00
<?php
include \"config.php\";
$limi_czasu=900; //podajemy czas w sekundach
$zapytanie = \"select * from kody_czas where kod = '\".$kod.\"'\";
if ($ilosc == 0
&& $ilosc[czas
]<=time()) { }
elseif ($ilosc == 1) {
$zapytanie1=\"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"'\";
echo \"kod jest dobry\"; }
}
?>
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
18.04.2005, 11:19:25
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
18.04.2005, 11:30:30
wiem tutaj jest błąd ale zapomniałem tego poprawić, no ale nie to jest probelem tylko moje wcześniejsze pytanie
nospor
18.04.2005, 11:35:19
<?php
$zapytanie1=\"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas!=0\";
?>
stefan_precz
18.04.2005, 14:58:45
loozik działa,
czyli aby sprawdzić czy czas nie został przekroczony dla danego kodu muszę zrobić
<?php
$zapytanie = \"select * from kody_czas where kod = '\".$kod.\"'\";
if ($ilosc == 0
&& $wynik[czas
]<=time()) { }
elseif ($ilosc == 1) {
$zapytanie1=\"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas==0\";
echo \"kod jest dobry\"; }
}
?>
tylko że takie rozwiazanie cuś nie chce działać
nospor
18.04.2005, 15:11:22
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
18.04.2005, 15:14:43
<?php
if ($ilosc == 0
|| $wynik['czas']<=time()) { ?>
przy takim układzie zawsze wskazuje ze kod jest zły
nospor
18.04.2005, 15:16:35
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
18.04.2005, 15:23:30
<?php
$zapytanie = \"select * from kody_czas where kod = '\".$kod.\"'\";
if ($ilosc == 0
|| $sprawdz['czas']<=time()) { ?>
zrobiłem tak i to samo
nospor
18.04.2005, 15:26:55
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
18.04.2005, 15:33:40
$ilosc zwraca 1
"$sprawdz['czas']"; zwraca zawartość pola czas
nospor
18.04.2005, 15:34:48
czyli $sprawdz['czas']<=time() czyli kod jest zły, tak? to już nie moja wina
Lecę domciu
stefan_precz
18.04.2005, 17:08:31
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
19.04.2005, 07:32:13
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
19.04.2005, 10:13:28
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

Jeśli chodzi o twoje rozwiązanie nada nie działa,
<?php
echo \"<form action=\"kod_czas.php\" method=\"post\">\"; echo \"Podaj kod:<br><input name=\"kod\" type=\"text\"><br> <input type=\"submit\" value=\"Dalej>>\">
</form>\";
if ($_POST['kod']) {
include \"config.php\";
$limit_czasu=900; //czas w sekundach
$zapytanie = \"select * from kody_czas where kod = '\".$kod.\"'\";
if ($ilosc == 0
|| $sprawdz['czas']+$limit_czasu<=time()) { echo \"zly kod <br>\"; echo \"$ilosc <br>\"; echo \"$sprawdz[czas]\"; }
elseif ($ilosc == 1) {
$zapytanie1=\"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas = 0\";
echo \"kod jest dobry\"; }
}
?>
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
19.04.2005, 10:22:19
to może tak:
<?php
if ($ilosc == 1 && $sprawdz['czas']==0) {
$zapytanie1=\"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas = 0\";
echo \"kod jest dobry\"; }
else {
echo \"zly kod <br>\"; echo \"$ilosc <br>\"; echo \"$sprawdz[czas]\";
}
?>
stefan_precz
19.04.2005, 10:37:14
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
19.04.2005, 10:40:16
ups. zapomnialem:
<?php
if ($ilosc == 1 && $sprawdz['czas']==0) {
$zapytanie1=\"UPDATE kody_czas SET czas = \".(time()+$limit_czasu).\" WHERE kod = '\".$kod.\"' and czas = 0\";
echo \"kod jest dobry\"; }
elseif ($sprawdz['czas']<=time()) { echo \"zly kod <br>uplynal czas\"; }
else
{
echo \"zly kod <br>cos innego\"; }
?>
stefan_precz
19.04.2005, 10:55:55
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
19.04.2005, 11:00:26
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
19.04.2005, 11:07:02

- 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
19.04.2005, 11:19:05
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

(nie, no musi być spełniony).
Dam ci nowy kod. Wykonaj te dwie operacje i pokaż wyniki każdej z nich:
<?php
if ($ilosc == 1 && $sprawdz['czas']==0) {
$newTime=time()+$limit_czasu; $zapytanie1=\"UPDATE kody_czas SET czas = \".$newTime.\" WHERE kod = '\".$kod.\"' and czas = 0\";
echo \"kod jest dobry <br>\"; echo \"kod: $kod; new time:$newTime; ilsoc:$ilosc<br>\"; }
elseif ($ilosc=1
&& $sprawdz['czas']<=time()) { echo \"zly kod <br>uplynal czas<br>\"; echo \"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\"; }
else
{
echo \"zly kod <br>cos innego<br>\"; echo \"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\"; }
?>
stefan_precz
19.04.2005, 11:25:56
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
19.04.2005, 11:43:41
a, czyli wszytko jest ok. bo jest jeszcze sytuacja, gdy kod jest w limicie czasu
<?php
if ($ilosc == 1 && $sprawdz['czas']==0) {
$newTime=time()+$limit_czasu; $zapytanie1=\"UPDATE kody_czas SET czas = \".$newTime.\" WHERE kod = '\".$kod.\"' and czas = 0\";
echo \"kod jest dobry <br>\"; echo \"kod: $kod; new time:$newTime; ilsoc:$ilosc<br>\"; }
elseif ($ilosc=1
&& $sprawdz['czas']<=time()) { echo \"zly kod <br>uplynal czas<br>\"; echo \"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\"; }
elseif ($ilosc=1 && $sprawdz['czas']>time()) {
echo \"kod jest w bazie i jeszcze sie lapie w limicie czasu\"; echo \"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\"; }
else
{
echo \"zly kod <br>cos innego<br>\"; echo \"kod: $kod; czas w bazie:\".$sprawdz['czas'].\";czas aktualny:\".time().\";ilsoc:$ilosc<br>\"; }
?>
no teraz chyba jest tak jak chcesz
stefan_precz
19.04.2005, 11:48:02
hehe udało się w końcu wielkie dzięki
nospor
19.04.2005, 11:50:06
ufff, co za ulga.
stefan_precz
20.04.2005, 17:44:50
mam jeszcze problem polegający na pamiętaniu kodu
<?php
if(!isset($_COOKIE['kod'])) {
echo \"<form action=\"wyswietl.php\" method=\"post\">\"; echo \"Podaj kod:<br><input name=\"kod\" type=\"text\"><br> <input type=\"submit\" value=\"Dalej>>\">
</form>\";
}
else
{
}
dalsza część strony
?>
- 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
21.04.2005, 11:48:40
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
21.04.2005, 14:01:07
<?
if(!isset($_COOKIE['kod'])) {
echo \"<form action=\"wyswietl.php\" method=\"post\">\"; echo \"Podaj kod:<br><input name=\"kod\" type=\"text\"><br> <input type=\"submit\" value=\"Dalej>>\">
</form>\";
}
else
{
}
if ($_POST[kod]) {
include \"config.php\";
$limit_czasu=900; //czas w sekundach
$zapytanie = \"select * from kody_czas where kod = '\".$kod.\"'\";
if ( ($ilosc == 1 && $sprawdz['czas']==0) || ($ilosc=1 && $sprawdz['czas']>time() ) ) {
$newTime=time()+$limit_czasu; $zapytanie1=\"UPDATE kody_czas SET czas = \".$newTime.\" WHERE kod = '\".$kod.\"' and czas = 0\";
///////////////////////////////chroniona tresc//////////////////////////////////////////////////////
$dir = \"gry\";
$query = mysql_db_query ($mysql_baza, \"SELECT * FROM gry WHERE id = '\".$_COOKIE['wybrany_id'].\"'\"); echo \"<object type=\"application/x-shockwave-flash\" data=\"$dir/\".$row['patch'].\"\" height=\"600\" width=\"800\"> <param name=\"movie\" value=\"$dir/\".$row['patch'].\"\">
<param name=\"quality\" value=\"high\">
<param name=\"bgcolor\" value=\"#FFFFFF\">
</object>\";
///////////////////////////////chroniona tresc//////////////////////////////////////////////////////
}
elseif ($ilosc=1
&& $sprawdz['czas']<=time()) { echo \"zly kod <br>uplynal czas<br>\"; }
else
{
echo \"zly kod <br>cos innego<br>\"; }
}
?>
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
21.04.2005, 14:05:45
Najwyraźniej ci ciastka nie ustawia. Pamiętaj że ciastka trzeba wysłać przed wysłaniem nagłówków (czy jakoś tak)
stefan_precz
21.04.2005, 14:29:13
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.