Olen väsäillyt php + mysql pohjaisen tietovisan.
Sivu on peli.php, vastauksen jälkeen mennään linkistä takaisin samalle sivulle, lasketaan pisteet ym.
Mitenkäs onnistuisiko php:llä tehdä niin että selain luulee että, sivu on ensimmäinen eikä takaisin nappia voi käyttää...
Nyt pelissä pystyy väärin vastattuaan menemään edelliselle sivulle ja vaihtamaan vastaustaan...
Java script ei käsittääkseni ole paras vaihtoehto, eikä kaikilla ole se edes käytössä.
Avaa peli javascriptillä uuteen ikkunaan ja poist sieltä kaikki osoiterivit ynm, näin ainakaan ne jotka eivät tiedä että backspacesta ja nuolesta oikeelle voi vihtaa sivua eivät pääse vaihtamaan vastaustaan.
Ei nyt tule muuta mieleen, kuin että vastaukset kulkee evästeessä tai sessiossa (tai vastaukset ovat siellä tietokannassa ja sessiossa kulkee vain uniikki id, ihan miten vain), ja headereiden avulla määrittelet jokaisen sivun sellaiseksi, että se ei jää selaimen välimuistiin. Ja sitten tarkistat kysymyssivulla, onko kysymykseen jo vastattu (isset($_COOKIE['kymysys_nro_1']) ja jos on niin header("Location: kysymys_nro_2.php"), muuten tulostat kysymyksen.
Näillä headereilla sivu ei ainakaan ihan helposti jää välimuistiin:
<?php header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); ?>
Edit: ja vaikka sivu jäisikin välimuistiin, niin tarkistus sitten vielä siihen, ennen kuin vastaus kirjoitetaan *minne_ikinä_kirjoitetaankaan*, ettei siihen ole vastattu.
Sessioilla saat estettyä tuon.
Aina kun vastaus annetaan, kirjoitetaan sessio -muuttujaan jokin arvo, sitten sivu.php tarkistaa onko arvo X jo annettu, jos on niin annetaan järjestyksessä uusi kysymys. Jos arvoa taas ei ole annettu, on kyseessä ensimmäinen vastauskerta.
tai header("Location: seuraavasivu.php") joka rikkoo back-napin...
leftover kirjoitti:
tai header("Location: seuraavasivu.php") joka rikkoo back-napin...
Selitätkö vähän lisää...
Ei mennyt aivan jakeluun.
Käsittääkseni tuon olisi tarkotus väittää selaimelle että edellinen sivu oli seuraavasivu.php?
Mutta kuinka sen pitää heittää koodin sekaan.
En nyt tiedä tarkkaan käytäntöä miten hoidat visailua, mutta itse tekisin sen seuraavasti:
sivu.php?page=1 esittelisi kysymykset ja vastausvaihtoehdot. Tämän sivun formi ohjaisi osoitteeseen sivu.php?save=1 jossa vaihteohdot tallennettaisiin ja lopuksi asetettaisiin header("Location: sivu.php?page=2")
sivu.php?page=2 esittelisi toiset kysymykset, ja formi ohjaisi osoitteeseen sivu.php?save=2. Taas lopuksi header("Location: sivu.php?page=3")
Nyt kun käyttäjä yrittää edelliselle sivulle (esim. sivu.php?page=2), sen sijaan että hän pääsisi sivu.php?page=1 hän tuleekin sivulle sivu.php?save=1 joka nakkaa käyttäjän eteenpäin. Nopea tuplaklikkaus back-napillakaan ei onnistu sillä selain ei enää tiedä mikä sivu on ollut ennen ?save=1.
Kyllähän tuota taas osaa selostaa vaikeasti... koeta kestää :D
leftover kirjoitti:
Kyllähän tuota taas osaa selostaa vaikeasti... koeta kestää :D
Eheii.. tuosta saa tosi hyvin selvää!1
Joo nyt tajusin kiitoksia taas kaikille vaivautuneille käyttäjille... monettako kertaa. ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.