Hoe zorg ik ervoor dat een query niet nogmaals uitgevoerd wordt als de pagina vernieuwd wordt?
Want heb nu het probleem dat na het invullen van een formulier een regel wordt aangemaakt in de database en na het vernieuwen van de pagina nog een....

Ik dacht zelf aan iets met mysql_insert_id(); maar ik weet niet precies hoe... Iemand?
Daan, zou je een duidelijkere topictitel voor dit topic kunnen instellen? Alvast bedankt!
Thomas, is er ergens een online voorbeeld?
Heb het gelezen, maar weet niet precies hoe ik dat kan maken...
Zoiets bijvoorbeeld:
[code]<?php

if($_SERVER['REQUEST_METHOD'] == 'POST'){

mysqli query gebeuren

header('Location: pagina.php');
exit;

}

// hier rest van pagina
Ramon van Dongen op 22/02/2016 08:06:48

Zoiets bijvoorbeeld:
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST'){

mysqli query gebeuren

header('Location: pagina.php');
exit;

}

// hier rest van pagina
?>



En als je dan op backspace duwt, of je gaat terug in de browser?

Als je dat wilt tegenhouden kan je tokens gebruiken.
Kijk eens naar deze stackoverflow post.
Het artikel waar @Randy naar verwijst haalt voornamelijk oplossingen aan met tokens. Dit heeft mogelijk wel het gewenste effect dat hiermee dubbelposting kan worden tegengegaan, maar dit volgt niet logisch uit het ontwerp. Vergelijk het met een muur waarin je een deur introduceert, die af en toe wordt dichtgetimmerd. Zou het dan niet beter zijn dat er in het geheel geen deur was indien iemand op een ongewenst tijdstip wenst te passeren?

Het token dient (eigenlijk) nog een (ander) doel: het token dwingt af dat het (POST) verzoek afkomstig is van de site zelf, met andere woorden, het voorkomt Cross Site Request Forgeries (CSRF). Daarom wordt aan dit token ook wel gerefereerd als CSRF-token. Maar het is dus niet echt (in eerste instantie) bedoeld om dubbelposting tegen te gaan.

Wat mij betreft is de enige fatsoenlijke (architectonische) manier om dubbelposting tegen te gaan het isoleren van de verwerk-stap. Dit zou je bijvoorbeeld kunnen doen door de verwerking van het formulier te laten plaatsvinden in een apart PHP-bestand (bijvoorbeeld: form.php voor het formulier, process.php voor de verwerking) of op een andere manier deze acties (het weergeven van een formulier, en het verwerken ervan) te scheiden.

Het splitsen van deze stappen heeft ook weer een gevolg: stel dat er fouten zijn gemaakt in de formulier-invoer. Iemand moet dan terugetransporteerd worden naar het formulier en liefst met behoud van de eerder ingevoerde informatie (en een omschrijving van wat er is misgegaan). Deze zul je dus ergens tijdelijk moeten opslaan om deze weer terug te overhevelen in het formulier. Mja of je doet iets fancy met JavaScript zodat het formulier in eerste instantie niet verstuurd wordt voordat de invoer klopt maar er zal altijd een controle aan de serverzijde moeten zijn of deze invoer klopt want JavaScript kan worden uitgeschakeld.

EDIT: het script van @Ramon werkt trouwens gewoon naar behoren, je kunt gewoon refreshen of teruggaan in de historie zonder problemen. Heb je dit uberhaupt geprobeerd Randy?

Reageren