ugrás a tartalomhoz

Visszaszámlálás

darkride · 2008. Feb. 11. (H), 18.55
Azt szeretném kérdezni hogyan tudom megcsinálni hogy ugye a legördülő menü nekem most így van:
<form action="processes.php" method="post" name="form1" id="form1">
<option value='1'>1<option value='2'>2<option value='3'>3<option value='4'>4<option value='5'>5
<option value='6'>6<option value='7'>7<option value='8'>8<option value='9'>9<option value='10'>10
<option value='11'>11<option value='12'>12</select><input type=submit value='Submit'></form>
Arra lennék kíváncsi hogy hogyan lehet megcsinálni azt hogy ha rákattintok a "Submit"-ra akkor ne azonnal töltse fel az adatbázisba az értéket hanem a kiválasztott érték*1 óra.
És ha rákattint a "Submit"-ra akkor kihozzon egy számlálót ami a (kiválasztott érték*1 óra)-tól számol vissza.
Ezt gondolom javascript-ben kell megcsinálni, de nem értek ahhoz úgyhogy segítsetek pls.

Remélem érthetően fogalmaztam:)

Válaszotokat előre is köszönöm
 
1

Írd körül jobban

Castor87 · 2008. Feb. 11. (H), 19.48
Először is lemaradt a <select> tag az elejéről és </option> mindenhonnan. Másodszor mit értesz az alatt hogy érték*1 óra? A kiválasztott értéket 1-gyel kell beszorozni, vagy nem értem!?

Szerk1:
Ha beírtad a hiányzó részt, akkor adsz neki egy nevet (name), ez lesz a változó neve, mely tartalmazza majd az egyik kiválasztott értéket (value), azaz a név nevű vátozó értéke ha nem üres, akkor szorzom 1 órával, vagy amennyivel szeretnéd.

Szerk2:
Ha azt szeretnéd hogy annyi órát várjon feltöltés előtt amennyit kijelölt a felhasználó, akkor azt javaslom, hogy a form és a feltöltő oldal között tegyél be egy "loading" oldalt. Van egy olyan meta tag, amivel bizonyos idő után újra lehet tölteni az oldalt, de php oldalon is lekezelheted. Egyszerűen a kiválasztott értéket átadod a "loading" lapnak, majd ha a kiválasztott idő letelik átdob a feltöltést végző lapra. És JS se kell hozzá. :)
PHP:
<? header("Refresh: 1; url=index.php"); ?>
HTML:
<meta http-equiv="refresh" content="1; url=index.php">
Szerk3:
Ha ragaszkodsz a JS-hez, ezt találtam neked:
prog.hu
2

ha azt akarod, csináld máshogy:)

lepke · 2008. Feb. 11. (H), 21.58
Minek kell ez?
hogy késleltetve legyen feltöltve. Ahol vissza akarod kapni a megfelelő értéket(feltöltött adatot), ott ellenőrizd le, hogy a tartalom küldése óta eltelt-e az a megadott idő amit bekértél. Ehhez egyszerüen tárold el a time() étéket, és a lejárathoz pedig $ennyioraszor*60*60 at.
Az, hogy órákig a böngészőben tartsd a felhazsnálót. Az lehetetlen. (vagy jó sok alertet kell írnod:))
3

Mi a cél?

s_volenszki · 2008. Feb. 11. (H), 22.09
Lehet, tisztább lenne a szitu ha ismernénk a célt!

s_volenszki
4

A cél az, hogy

darkride · 2008. Feb. 11. (H), 23.18
Ez tulajdonképpen egy autó "neveldéhez" kell.
Ez egy olyan lehetőség hogy itt tudsz "munkával" pénzt keresni ha pl kiválasztod hogy 8 akkor megkapod az órabér * a kiválasztott érték( most legyen 8).
És én azt szeretném hogy ne azonnal kapja meg hanem amit kiválasztott pl. most 8 , óra múlva, és ezalatt visszaszámol a kiválasztott érték (8)*óra.
Ja meg még azt is meg szeretném kérdezni hogy amíg itt dolgozik szóval amíg nem járt le ez az idő addig semmi mást ne tudjon csináni az oldalon.
5

ok

lepke · 2008. Feb. 11. (H), 23.51
optiont rakd be selectde, addj neki nevet, hogy hivatkozzhass rá.
<select name="ora">
    <option value="1">1</option>
</select>
feldolgozásnál meg:
$fizetesi_ido=time()+$ora*60*60;
Ezt az értéket tárold a db-ben.
Aztán amikor a kapott pénzeket iratod ki,(vayg csinálsz valami mást) ott meg egyszerüen ellenőrizd azt, hogy a kifizetés ideje elmúlt e már.
SELECT zoldhasu FROM fizetesek WHERE fizetesi_ido<NOW() and nev = 'kismiska';
6

Tudom írtad, hogy nem vagy profi JavaScript-ben.

s_volenszki · 2008. Feb. 12. (K), 12.01
Ezek szerint te a következő feladatra keresel megoldást:

Egy, a felhasználó által meghatározott ideig akarod a felhasználó figyelmét (böngészőjét) az oldaladon tartani és az ott eltöltött idő alapján jutalmazni.

Csak akkor jutalmazod, ha a teljes idő lejárt, vagy részidőt is "kifizetsz"? Illetve ha a visszaszámlálás kliesn oldalon megy akkor ugye te csak a lejáretról tájékozódsz, ha csak...

Én most csináltam valami hasonlót:

Készítettem még régebben egy szöveges tartalmat kiszolgáló rendszerem, ahol is egyre fontosabbá vált tudnom, mennyi időt és milyen aktívan töltenek a felhasználók olvasgatásal. Az alapján, hogy ki mennyi időt tölt ott, rangsorolom őket.

Na most elöljáróban kijelentem, hogy az én megoldásom sem tökéletes, a részleteket majd később!

Amikor a user betölt egy tartlamat, ami pl. lapozgatás nélkül 15 A4-es oldalnyi szöveg, egy adattáblába start cellájába, (munkamenet azonosítójához társítva, hogy tudjam ki az) bevésem a letöltés dátumát. Innentől egy stop cella tartalmát frissítgetem AJAX-szal 1 percenként (asszem erre mondta vbence egy régebbi topicban, hogy Heart beat).

Mivel ezzel csak azt tudom ellenőrizni, hogy a böngészőjében ott maradt-e az oldalam vagy se, ezért még azt a trükköt is bedobtam, hogy minden oldal görgetéskor elmentek egy változót, ami mutatja, hogy gördült-e a szöveg az elmúlt egy percben. Az AJAX kérés ezt is viszi, így kapok némi viszonyítási alapot user olvasási szokásairól, alaposságáról. Ha bármilyen hiba lép fel, csak a legutolsó perc bukik. Az eltöltött idő pedig a start és a stop cellák különbsége. Ezt már ki lehet értékelni.

Tudom, te jelezted, hogy nem vagy toppon js-ből, szerintem viszont a te esetedben előbb utóbb szükségessé válik, hogy értsed!

Mi lesz azokkal, akiknek a gépe, a megválasztott idő utolsó percében fagy le, szakad meg az internet kapcsolata, vagy pusztul ki a te kiszolgálód? Bukta az egész? Szomorúak lesznek!

s_volenszki
7

Így szeretném

darkride · 2008. Feb. 12. (K), 13.31
Egy, a felhasználó által meghatározott ideig akarod a felhasználó figyelmét (böngészőjét) az oldaladon tartani és az ott eltöltött idő alapján jutalmazni.


Nem, nem akarom a felhasználó böngészőjét ott tartani(amíg le nem jár bármit csinálhat), hanem pl. ha kiválasztja a 2 órát mondjuk délben akkor a 2 óráért járó pénzt 2 óra múlva töltjök fel az adatbázisba.
Amíg nem járt le ez a 2 óra akkor addig számol vissza hogy még hány óra perc másodperc van még addig.

Most úgy van nekem hogyha rákattint a 2 órára akkor azonnal meg is kapja a 2 óráért járó pénzt, de én úgy szeretném hogy csak 2 óra múlva kapja meg

A work.php tartalma:
<form action="processes.php" method="post" name="form1" id="form1">
<input name="penz" type="hidden" class="textfield" id="penz" value="<? echo $row['penz']; ?>" size="50" />
<input name="userid" type="hidden" id="userid" value="<? echo $row['userid']; ?>" />
<input name="function" type="hidden" id="function" value="work">
Elmegyek dolgozni <select name='oraber'>
<option value='2000'>1<option value='4000'>2<option value='6000'>3<option value='8000'>4<option value='10000'>5<option value='12000'>6<option value='14000'>7<option value='16000'>8<option value='18000'>9<option value='20000'>10<option value='22000'>11<option value='24000'>12

</select>
 órát!
 <input type=submit value='Munkára fel!'>
</form>
A processes (a feldolgozó, aminek elküldi az adatokat) tartalma:
$userid = $_POST['userid'];
$penz = $_POST['penz']+$_POST['oraber'];

include 'constants.php';

$mysql = mysql_connect(DBHOST,DBUSER,DBPASS); 
        mysql_select_db(DBNAME,$mysql); 

$connection = mysql_pconnect(DBHOST,DBUSER,DBPASS)
	or die ("Couldn't connect to server.");

$db = mysql_connect(DBHOST,DBUSER,DBPASS);
mysql_select_db(DBNAME,$db);

$query = "UPDATE ".DBTBLE." SET penz = '$penz' WHERE userid = '$userid'";
mysql_query($query) or die('Error, Check MySql'); 

	$alert =  "A munkaidőd lejárt, a pénz már a számládon van.";
		header("Location: ../work.php");
Itt egy link egy hasonló játékról ahol ugyan így van: Bitefight
jelentkezz be az én felhasználómmal
Név: darkride777
Jelszó: 123456
Munka
8

Értem.

s_volenszki · 2008. Feb. 12. (K), 14.22
Szerintem akkor tedd azt, hogy csinálsz egy táblát, amiben rögzíted a dolgozók azonosítóját és a munka befejezésének időpontját.

Tehát a formod ne a pénzt adja meg (pl. 1 órás munka beküldés pillanata: 200801121317), csak írja be a 'pending_works' táblába, hogy user:valaki és work_ends:200801121417, meg status: pending.

Amikor user bejelentkezik (vagy csinál bármilyen letöltődést) ellenőrízd, van-e a nevéhaz tartozó azonosítóval aktuális munka bejegyezve (SELECT * FROM `pending_works` WHERE user = 'valaki' AND statusz = 'pending' AND work_ends < $most) /$most az a bejelentkezés vagy letöltődés pillanata/. Ha van, akkor megadod az érte járó jutalmat és jelölöd valahogy, hogy az már ki lett fizetve, mondjuk status = 'ready'. Célszerű meghagyni, mert később összegezni tudod ki mennyi munkát végzett.

s_volenszki

szerk:
Értelmezd egy kicsit a kliens szerver modellt!
9

javascript visszaszámlálás

elchy · 2009. Jan. 21. (Sze), 14.42
A gyakorlatban érdemes mindenképpen a szerver és a kliens megoldásokat együtt is alkalmazni. A Javascript a kliens saját óráját használja így ha csak kliens oldali megoldást használsz, akkor emberünk rákattint a 8 óra munkára, majd a rendszeridőt növeli +8 órával és már nyert is :D

Szóval a kliens oldali megoldások ugyan szépek, de nem szabad a szerver oldalt elhanyagolni.