webForumDet fria alternativet

Hur hindra formulärdata från att skickas på nytt med reload?

10 svar · 780 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

Ny fråga längre ner (här). (red.)

Måste erkänna att jag är väldigt tveksam till om detta borde postats i HTML-forumet istället... det beror ju på hur lösningen - om den finns - ser ut... Och det vet jag inte... Om det blev fel forum är jag ledsen.

Jag har en sida som ursprungligen laddar en form där man kan logga in och samtidigt fylla i ett epostformulär. Om inloggningen är OK, så skickas innehållet i formuläret iväg mha mail(). Funkar jättebra. :) Men... det funkar lite för bra... För om jag sedan surfar iväg och gör något annat och sedan använder bakåtpilen till min contact-sida så skickas mailet igen. Samma sak om jag trycker uppdatera på sidan omedelbart efter det att mailet skickats. Finns det något sätt att komma ifrån det här? :q

Dvs, går det att hindra "gamla" (redan använda) POST-variabler från att laddas med samma innehåll om man använder bakåtpilen eller trycker uppdatera sidan? Hur? Och finns det annars något sätt att se till att det går minst x sek mellan två brev???

Tacksam för svar! :)

Patrik81Medlem sedan okt. 2001538 inlägg
#2

En tanke voro ju, om nu informationen lagras i en databas, att ha ett tid-fält i tabellen, som håller koll på när denna rad lagrades, och sedan kollar man om användaren nyligen har skrivit (lagrat något i databasen) och om tiden mellan nu och det som står i tidfältet i databasen är för kort, så sparas inte datan eller så skrivs ett felmeddelande ut...

Kanske inte en klockren lösning, beroende på hur lång tid det skall vara innan man får posta igen, ibland är man ju borta från siten en lång stund, och sedan backar... då skulle ju tiden mellan nu och tidfältet vara större än den man kontrollerar mot.

Ok, den sista meningen kanske blev alltför luddig, men då får du hojta :)

/r: Iofs, är man riktigt nitisk, kan man ju kontrollera så att senaste inlägget av användaren inte ser likadant ut som det som just postades, då kan man ju i stort sett inte kunna dubbelposta, fast trist om man vill lagra två identiska rader i databasen direkt efter varandra, med samma användare, det skulle ju då inte funka.
(Plus att det nog skulle vara ruskigt prestandakrävande att hämta ut användarens sista inlägg, jämföra det, och om de två inte matchar, spara det nypostade... men det är ju en lösning, bara inte så smidig ;) )

MVH Patrik

FuelMedlem sedan okt. 20001 285 inlägg
#3

hmm.. en tanke kunde ju va att mail funktionen kollar om postvariablerna inte är tomma sen "unset" alla postvariabler

Nexus86Medlem sedan okt. 20023 030 inlägg
#4

Fuel skrev:

hmm.. en tanke kunde ju va att mail funktionen kollar om postvariablerna inte är tomma sen "unset" alla postvariabler

Går man bakåt eller uppdaterar efter att ha skickat ett formulär så finns formulärdatat kvar eftersom de allra flesta webbläsare frågar om du vill skicka formulärdatat igen. Vill du inte det öppnar den inte heller sidan.

@ndersMedlem sedan juni 200032 969 inlägg
#5

En variant är ju att du direkt efter att inloggning gjorts och mail skickats är att du gör en redirect någon annanstans. Då kommer man bara komma tillbaka till inloggningsformuläret när man klickar på back-knappen.

Eftersom jag inte kan php har jag ingen exempelkod, men det bör gå ganska enkelt. :)

Mvh

tydalMedlem sedan juni 20034 013 inlägg
#6

Redirect heter egentligen (på http-språk) Location och den återfinns i headern. Därför heter det så här i php:

header("Location: sidan_du_vill_skicka_besökaren_till");

Raden måste finnas innan det sker någon utskrift på sidan. Eventuell utskrift skulle man ju ändå inte se eftersom man ska skickas till en annan sida.

aasahMedlem sedan mars 20034 471 inlägg
#7

Tack, @nders och tydal! :) Det verkar vara en utmärkt lösning!!! :) :birp

aasahMedlem sedan mars 20034 471 inlägg
#8

Nu har jag i grund och botten samma problem i min gästbok, men jag tycker att det känns helt avigt att skicka iväg folk nån annanstans i stället för att visa dom hur deras inlägg ser ut i postat skick. Finns det verkligen inget bättre sätt att lösa det på? :q

I alla gästböcker jag sett skickas man ju till samma sida... Hur löser era gästböcker problemet?

SkarreMedlem sedan apr. 20012 427 inlägg
#9

Du behöver ju inte skicka iväg dem någon annanstans. Skicka dem till samma sida med en liten querystring typ

http://www.foo.se/bar.php?success=

Om sedan "success" är satt

isset($_GET['success'])

... så gör du det du ska göra (i ditt fall "visa dom hur deras inlägg ser ut i postat skick").

tydalMedlem sedan juni 20034 013 inlägg
#10

aasah skrev:

Hur löser era gästböcker problemet?

I de första php-skripten jag gjorde blev det så att jag hade en separat php-fil som bara sparade inlägg. Den sidan visade ingenting utan sparade bara. Så för att användaren skulle se sitt inlägg var man ju tvungen att skicka användaren till gästboken med en header("Location: ...");

Nuförtiden brukar jag lägga koden i samma skript som visar gästboken, men jag inleder skriptet med:

if (isset($_POST['msg']))
// Spara inlägget
header("Location: guestbook.php?");

och sedan kommer själva sidan. När den laddas om, eller man bara går direkt till den så finns ju ingen data postad så då utförs ju inte spar-delen.

aasahMedlem sedan mars 20034 471 inlägg
#11

SMART! :D Tackar så mycket, Skarre och tydal! :birp

Nu hade jag verkligen velat kunna markera flera svar som slutgiltiga...

141 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)