Síða 1 af 1
Að kom aí veg fyrir Double posting í php
Sent: Fim 14. Apr 2005 16:13
af gnarr
Vitiði einhverja aðferð til að koma í veg fyrir double post í php?
ég hélt ég væri búinn að finna góða aðferð
Kóði: Velja allt
<form method= 'get' action= 'action.php' >
<kóði sem nær í breytur>
<input type= 'hidden' name= 'commented' value= 'set' >
<input type="submit" name="Submit" value="áfram">
Kóði: Velja allt
if(isset($_GET['commented']))
{
<kóði sem sendir í SQL>
}
else
{
}
en svo prófaði ég að gera refresh, og það kom alltaf ný og ný entry ;( einhverjar hugmyndir?
Sent: Fim 14. Apr 2005 18:15
af daremo
Tvær tillögur;
Kóði: Velja allt
if(!isset($_SESSION['commented']))
{
<kóði sem sendir í SQL>
$_SESSION['commented']=1;
}
Muna bara að gera unset($_SESSION['commented']); einhvers staðar, t.d. á yfirlitinu yfir pósta.
Svo geturðu líka sett tímalimit.
Kóði: Velja allt
if(time()+60 < $_SESSION['commented'])
{
forwarda á yfirlit pósta, eða eitthvað :)
}
else
{
<kóði sem sendir í SQL>
$_SESSION['commented']=time();
}
Sent: Fim 14. Apr 2005 22:32
af MezzUp
Ef að það nægir þér að stoppa þá sem að ýta á 'bakk' til þess að skoða aftur upprunalega póstinn, þá ætti að duga að setja 20 sek. tímalimit á milli pósta.
Sent: Fös 15. Apr 2005 07:55
af gnarr
daremo skrifaði:Tvær tillögur;
Kóði: Velja allt
if(!isset($_SESSION['commented']))
{
<kóði sem sendir í SQL>
$_SESSION['commented']=1;
}
Muna bara að gera unset($_SESSION['commented']); einhvers staðar, t.d. á yfirlitinu yfir pósta.
Svo geturðu líka sett tímalimit.
Kóði: Velja allt
if(time()+60 < $_SESSION['commented'])
{
forwarda á yfirlit pósta, eða eitthvað :)
}
else
{
<kóði sem sendir í SQL>
$_SESSION['commented']=time();
}
Þetta virkar ekki vegna þess að ég er ekki að sækja commented í session :p það kemur bara beint af síðustu síðu.
á ekki að vera hægt að gera unset($_POST['commented']); ?
annars eru skemmtilegar pælingar hérna:
http://labs.silverorange.com/archives/2003/june/canyousaythat
ég ætla að athuga hvort ég fæ þetta til að virka.
Sent: Fös 15. Apr 2005 09:26
af daremo
þú þarft ekki að sækja neitt, þú býrð til session breytuna á staðnum
skelltu bara session_start(); efst í skjalið og notaðu kóðann fyrir ofan, ég ábyrgist það að hann virki
Sent: Fös 15. Apr 2005 09:59
af Dagur
Að auki borgar sig að koma í veg fyrir að hægt sé að klikka á submit tvisvar:
sjá hér
Sent: Fös 15. Apr 2005 10:04
af gnarr
nei, það er ekki sniðugt að disable submit.
Sent: Fös 15. Apr 2005 12:11
af Dagur
gnarr skrifaði:nei, það er ekki sniðugt að disable submit.
vegna þess að...
Sent: Fös 15. Apr 2005 14:03
af gnarr
vegna þess að það þarf að nota hann stundum oftar en einusinni. það veldur líka ekki double pósti hjá mér að klikka tvisvar a´takkann.
Sent: Fös 15. Apr 2005 14:14
af Stutturdreki
Submittar formið í sjálft sig? Þe. í sömu síðu og inniheldur formið..
Sent: Fös 15. Apr 2005 14:32
af gnarr
nei. það er önnur "action" síða.
Sent: Fös 15. Apr 2005 14:45
af Stutturdreki
Ok.. þá geri ég ráð fyrir að notandin stoppi í action síðunni.
Það er hinsvegar miklu betra að redirecta honum bara annað. Td. ef þú ert með tvær síður, form.php og post.php:
- form.php: notandi slær eitthvað inn í þartilgert form og gerir submit.
- post.php: parsar querystrengin vinnur hugsanlega eitthvað með gögnin og dælir þeim í gagnagrunn.. redirectar svo notandanum aftur á form.php.
- form.php: birtir skilaboð um að búið sé að pósta og tómt form. Refresh á tómt form gerir ekki neitt..