Opnieuw verzenden formulier voorkomen
Ik heb een PM systeem gemaakt.
Als je een berichtje stuurt dan krijg je netjes een melding dat het verzonden is.
Als je daar op F5 drukt dan wordt het nogmaals verzonden. Ik denk dat dit een veel voorkomend probleem is. Vaak zie je het bij een poll ofzo als je vorige doet dat je dan opnieuw het formulier kunt verzenden.
Ik ben op zoek naar een oplossing waarbij je het formulier niet opnieuw kunt verzenden. Maar waarbij je nog wel een nieuwe PM moet kunnen versturen.
Als je een berichtje stuurt dan krijg je netjes een melding dat het verzonden is.
Als je daar op F5 drukt dan wordt het nogmaals verzonden. Ik denk dat dit een veel voorkomend probleem is. Vaak zie je het bij een poll ofzo als je vorige doet dat je dan opnieuw het formulier kunt verzenden.
Ik ben op zoek naar een oplossing waarbij je het formulier niet opnieuw kunt verzenden. Maar waarbij je nog wel een nieuwe PM moet kunnen versturen.
Gesponsorde koppelingen:
Je kan het met verschillende manieren tegengaan.
Als je al je velden controleerd of ze zijn ingevuld (neem aan dat je dat doet).
Dan unset je alle variabelen bij het verzenden.
Als je al je velden controleerd of ze zijn ingevuld (neem aan dat je dat doet).
Dan unset je alle variabelen bij het verzenden.
je kan ook direct als het in je database weggeschreven is een header("Location: paginametberichtenoid.php") gebruiken.
Een PM systeem? Met database? Maak de combintatie van velden UNIQUE. Men kan dan zovaak hetzelfde bericht verzenden als men wil (dat kun je onmogelijk tegengaan), maar er wordt slechts 1 bericht opgeslagen.
unset() helpt niet, dat werkt leuk op de server maar niet in de browser van de bezoeker. En het is de browser die de data toestuurt.
unset() helpt niet, dat werkt leuk op de server maar niet in de browser van de bezoeker. En het is de browser die de data toestuurt.
Kan altijd nog headers gebruiken:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
// Headers zetten zodat de de inhoud niet word gecashed
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);
header("Pragma: no-cache");
?>
// Headers zetten zodat de de inhoud niet word gecashed
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);
header("Pragma: no-cache");
?>
Die header is inderdaad ook geen slecht plan. Niet 100% waterdicht (browser en dus de gebruiker bepaalt wat er moet gebeuren), maar het komt wel in de buurt.
Hoe maak ik de combinatie van alle velden UNIQUE ? door in PhpMyAdmin bij alle velden op het knopje UNIQUE te drukken?
Gewoon alle velden selecteren en zie je onderaan inderdaad knopje UNIQUE staan.
Ik krijg deze foutmelding terug van PhpMyAdmin:
ALTER TABLE `priveberichten` ADD UNIQUE (
`PmId` ,
`FromUserId` ,
`ToUserId` ,
`DateTime` ,
`Onderwerp` ,
`Bericht` ,
`Gelezen`
);
MySQL said:
#1170 - BLOB/TEXT column 'Onderwerp' used in key specification without a key length
ALTER TABLE `priveberichten` ADD UNIQUE (
`PmId` ,
`FromUserId` ,
`ToUserId` ,
`DateTime` ,
`Onderwerp` ,
`Bericht` ,
`Gelezen`
);
MySQL said:
#1170 - BLOB/TEXT column 'Onderwerp' used in key specification without a key length
Maar nu bedenk ik mezelf dat deze combinatie nooit uniek is door het DateTime veld. Deze word elke keer met NOW() ingevuld. Dus dat scheelt zowieso elke keer 1 seconde.
Dat maakt het geheeld dan toch elke keer een unieke combinatie?
Dat maakt het geheeld dan toch elke keer een unieke combinatie?
niet als je UNIQUE bij bericht zet :)
de kans is super klein dat iemand anders juist hetzelfde bericht heeft geschreven
de kans is super klein dat iemand anders juist hetzelfde bericht heeft geschreven



