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="&aacute;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 :P

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..