gevens blijven in POST zitten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wouter

wouter

18/12/2007 14:46:00
Quote Anchor link
Hallo,

ik ben bezig aan een heel simpel formuliertje om wat gegevens in een database te steken.
En dit werkt perfect maar net iets te goed, als ik op submit klik worden ze toegevoegd maar als ik daarna op f5 worden ze nog eens toegevoegd.

Nu dacht ik dit simpel op te lossen met nen unset maar zo simpel blijkt het niet te zijn.

Een redelijk klein maar redelijk vervelend probleem, iemand een oplossing?

Quote:
if (isset($_POST['verzonden'])){

$naam = $_POST['naam'];

$query = "INSERT INTO bbq (id,naam,inschrijving) VALUES ('','$naam',now())";

mysql_query($query, $link);
mysql_close($database);

unset($_POST['verzonden']);

//header("Location: http://www.scoutingranst.be/bbq/";);

};


Quote:
<form action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$php_self?>
" method="post">
<input type="text" name="naam" size="35"/>
<input type="submit" value="Inschrijven" name="verzonden"/>
</form>
Gewijzigd op 01/01/1970 01:00:00 door Wouter
 
PHP hulp

PHP hulp

29/11/2024 00:43:36
 
Jelmer -

Jelmer -

18/12/2007 15:15:00
Quote Anchor link
Op PHPhulp is dit opgelost door die redirect, herkenbaar aan de "klik hier als je niet kan wachten". Je kan ook een header('Location') redirect gebruiken, dat scheelt weer een tussenpagina. Maar het probleem is wel opgelost.

Het probleem is dat de browser herladen ziet als het opnieuw aanroepen van de pagina. Dus als je de pagina hebt aangeroepen door op 'submit' in een formuliertje te drukken, dan zal de browser als het ware weer op dat 'submit' knopje drukken. Door de redirect is de laatste stap het opvragen van een pagina in plaats van het versturen van een formuliertje waardoor F5 die aanvraag opnieuw uitvoert, en niet opnieuw het formulier verstuurt.
 
Jan Koehoorn

Jan Koehoorn

18/12/2007 15:28:00
Quote Anchor link
Je kunt ook een hidden field vullen met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    echo '<input name="time" value="'.time().'" type="hidden">';
?>

en die in een veld met een UNIQUE constraint opslaan.

Wat ik ook nog wel eens doe is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
    $form_style
= '';
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        // alles afhandelen en als alles okee is:
        $form_style = ' style="display: none;"';
    }

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
    <form method="post" action="#"<?php echo $form_style; ?>>
    <!--
        hier je formuliervelden
    -->
    </form>
</body>
</html>

dan wordt je form onzichtbaar na een geslaagde post. Dat geeft zo'n duidelijk visueel signaal dat de gebruiker niet op F5 gaat rammen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.