Að kom aí veg fyrir Double posting í php

Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Að kom aí veg fyrir Double posting í php

Pósturaf gnarr » Fim 14. Apr 2005 16:13

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?


"Give what you can, take what you need."

Skjámynd

daremo
spjallið.is
Póstar: 465
Skráði sig: Mið 27. Okt 2004 00:39
Reputation: 73
Staða: Ótengdur

Pósturaf daremo » Fim 14. Apr 2005 18:15

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();
}




Skjámynd

MezzUp
Besserwisser
Póstar: 3694
Skráði sig: Þri 24. Sep 2002 15:19
Reputation: 0
Staða: Ótengdur

Pósturaf MezzUp » Fim 14. Apr 2005 22:32

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.



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Fös 15. Apr 2005 07:55

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.


"Give what you can, take what you need."

Skjámynd

daremo
spjallið.is
Póstar: 465
Skráði sig: Mið 27. Okt 2004 00:39
Reputation: 73
Staða: Ótengdur

Pósturaf daremo » Fös 15. Apr 2005 09:26

þú þ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 :)



Skjámynd

Dagur
Geek
Póstar: 802
Skráði sig: Fös 19. Sep 2003 14:00
Reputation: 65
Staðsetning: Reykjavík
Hafðu samband:
Staða: Ótengdur

Pósturaf Dagur » Fös 15. Apr 2005 09:59

Að auki borgar sig að koma í veg fyrir að hægt sé að klikka á submit tvisvar:

sjá hér



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Fös 15. Apr 2005 10:04

nei, það er ekki sniðugt að disable submit.


"Give what you can, take what you need."

Skjámynd

Dagur
Geek
Póstar: 802
Skráði sig: Fös 19. Sep 2003 14:00
Reputation: 65
Staðsetning: Reykjavík
Hafðu samband:
Staða: Ótengdur

Pósturaf Dagur » Fös 15. Apr 2005 12:11

gnarr skrifaði:nei, það er ekki sniðugt að disable submit.


vegna þess að... :)



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Fös 15. Apr 2005 14:03

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.


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Fös 15. Apr 2005 14:14

Submittar formið í sjálft sig? Þe. í sömu síðu og inniheldur formið..



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Fös 15. Apr 2005 14:32

nei. það er önnur "action" síða.


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Fös 15. Apr 2005 14:45

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