[php/mysql] Dubble invoer na refresh (F5)

Pagina: 1
Acties:
  • 206 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een simpel formuliertje die wat gegevens in mijn database moet zetten.
Nu is mijn probleem dat de date nog een keer wordt weg geschreven als je op F5 druk of op refresh
PHP:
1
header("Location: formulier.php");
werkt niet omdat ik met een header werk waar dus al gegeven in worden ge-print. Wie heeft er een idee hoe ik dit probeem netjes kan verhelpen.

Ik heb al ff zitten te zoeken op GOT maar helaas geen duidelijk antwoord.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<? include "includes/header.php";

if ($submit == "submit") {

        $datum = date("d-m-y H:i");

        mysql_query ("INSERT INTO inbox values (0,
                                                '" . $voornaam . "',
                                                '" . $achternaam . "',
                                                '" . $email . "',
                                                '" . $omschrijving . "',
                                                '" . $datum . "')");


?>
        <font class=header>Uw vraag is verzonden.</font>
<?
    }
}
if ($submit != "submit") {
?>
    <font class=header>Heeft u vragen?:</font>
<? if (!$fout == "true") { ?>
    <p align=justify class=tekst>Heeft u het antwoord op uw vraag niet terug kunnen vinden bij het <a href=info.php class=tekstunderline>informatie</a> gedeelte? Vult u dan onderstaand formulier zo volledig mogelijk in. Wij proberen u dan binnen 24 uur antwoord te geven.<p>
<? } else { ?>
    <p align=justify class=tekst><font class=redheader_normal>Let op:</font> De rode velden zijn niet of niet correct ingevuld. Wijzig of vul deze velden in en druk op "versturen" onderaan.<p>
<? } ?>
    <form method=post action=vragen.php?submit=submit>
    <table align=center border=0>
    <tr>
        <td width=150 valign=top <? if (!$voornaam_fout == "") echo $voornaam_fout; else echo "class=header>Voornaam<font color=red>*</font>:"; ?></td>
        <td><input class=input type=text name=voornaam value ="<? echo htmlentities(stripslashes($voornaam)); ?>" size=35></td>
    </tr>
    <tr>
        <td width=150 valign=top <? if (!$achternaam_fout == "") echo $achternaam_fout; else echo "class=header>Achternaam<font color=red>*</font>:"; ?></td>
        <td><input class=input type=text name=achternaam value ="<? echo htmlentities(stripslashes($achternaam)); ?>" size=35></td>
    </tr>
    <tr>
        <td width=150 valign=top <? if (!$email_fout == "") echo $email_fout; else echo "class=header>E-mailadres<font color=red>*</font>:"; ?></td>
        <td><input class=input type=text name=email value ="<? echo htmlentities(stripslashes($email)); ?>" size=35></td>
    </tr>
    <tr>
        <td width=150 valign=top <? if (!$omschrijving_fout == "") echo $omschrijving_fout; else echo "class=header>Uw vraag<font color=red>*</font>:"; ?></td>
        <td><textarea class=input rows=10 cols=34 name=omschrijving><? echo htmlentities(stripslashes($omschrijving)); ?></textarea>
         <p><input type=image src=images/versturen.gif width=125 height=19></td>
    </tr>
    </table>
    </form>

<? include "includes/footer.php"; ?>

Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 14:26

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Alleen de datum of alles? Het is namelijk vrij normaal dat als je op F5 drukt, dat een form opnieuw wordt verzonden :)

Om dit te voorkomen kan je uiteraard een controle inbouwen (ip checken / tijd invoer checken / checken of voornaam al voorkomt / etc)

[ Voor 42% gewijzigd door We Are Borg op 29-02-2004 22:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou dat lijkt me niet... :? ik wil dus dat als iemand iets invult en verstuurd het niet nog een keer in mijn database komt als je op F5 druk... :p

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Snelle oplossing; gebruik een javascript dat een
code:
1
location.replace('bedankt.htm');
doet :)

Je kunt ook met een uniek ID / Random code werken en die controleren voor je de gegevens invoert of werken met een snelle controle van de $email :)

[ Voor 58% gewijzigd door Spider.007 op 29-02-2004 22:07 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wie of wat houdt je tegen alsnog een location header te sturen?

edit:

niet goed gelezen
werkt niet omdat ik met een header werk waar dus al gegeven in worden ge-print. Wie heeft er een idee hoe ik dit probeem netjes kan verhelpen.
Hoe bedoel je dit?

[ Voor 64% gewijzigd door drm op 29-02-2004 22:07 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 14:26

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Lijkt mij wel :P Kan het mis hebben, maar dit is volgens mij gewoon normaal gedrag van een browser (i.i.g. IE). Misschien dat iemand het niet met me eens is?
ik wil dus dat als iemand iets invult en verstuurd het niet nog een keer in mijn database komt als je op F5 druk... :p
Zie mijn edit. Je kan controle inbouwen, maar waarop je wilt controleren is uiteraard aan jou de keuze :)
edit:
Oplossing van Spider.007 is ook een optie

[ Voor 13% gewijzigd door We Are Borg op 29-02-2004 22:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke "Spider.007" heb jij of misschien iemand ander zoon stukje code in javascript dus?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

JorJor:
Oke "Spider.007" heb jij of misschien iemand ander zoon stukje code in javascript dus?
Laten we ajb niet op de script-requesttoer gaan en gewoon even je probleem oplossen. Ik weet in ieder geval 100% zeker dat het zonder javascript kan, dus ik ben wel benieuwd of je mijn vraag even kan beantwoorden ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
drm schreef op 29 februari 2004 @ 22:10:
[...]
Laten we ajb niet op de script-requesttoer gaan en gewoon even je probleem oplossen. Ik weet in ieder geval 100% zeker dat het zonder javascript kan, dus ik ben wel benieuwd of je mijn vraag even kan beantwoorden ;)
okee ik heb dus een
PHP:
1
<? include "includes/header.php";
waar ik de header van mijn pagina in laad ik print daar ook dingen dus een header("vragen.php"); is niet meer mogelijk aangezien je die moet uitvoeren voordat je iets ga printen/uitvoeren als ik het goed heb :*)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Dat heb je goed, maar heb je een hele goede reden die header.php te includen voordat je de gegevens checkt? Meestal is het uberhaupt namelijk beter je output pas helemaal aan het eind van je script te doen, juist om je niet te beperken met headers e.d.

Verder kun je daarvoor ook een plakbandoplossing gebruiken, maar ik raad je aan toch even te kijken naar een mooiere oplossing waarbij je zorgt dat eventuele headers verstuurd kunnen worden zonder de output te bufferen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 14:26

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Verwijderd schreef op 29 februari 2004 @ 22:09:
Oke "Spider.007" heb jij of misschien iemand ander zoon stukje code in javascript dus?
Zoek op het gedeelte wat hij post met google en je vind binnen 2 minuten de informatie om het af te maken :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
drm schreef op 29 februari 2004 @ 22:15:
Dat heb je goed, maar heb je een hele goede reden die header.php te includen voordat je de gegevens checkt? Meestal is het uberhaupt namelijk beter je output pas helemaal aan het eind van je script te doen, juist om je niet te beperken met headers e.d.

Verder kun je daarvoor ook een plakbandoplossing gebruiken, maar ik raad je aan toch even te kijken naar een mooiere oplossing waarbij je zorgt dat eventuele headers verstuurd kunnen worden zonder de output te bufferen.
Mmmmmmmmmmmmmzzzzzzzzz daar zit wat in "DRM" :+ noooooit bij stil gestaan dat ik mijn
PHP:
1
 include "includes/header.php";
ook een stukje lager kan zetten hehehe

Acties:
  • 0 Henk 'm!

Verwijderd

Het is misschien beter om je include niet zelf naar de output te laten schrijven, maar daarin alleen functies te schrijven..

In je .php roep je dan een functie aan voor het schrijven van de header en de footer (bijv. writeheader() writefooter())
Op een pagina waarin je meteen redirect hoef je die dus al helemaal niet aan te roepen..

een andere oplossing is door gebruik te maken van ob_start() en ob_end_flush(), waardoor eerst het hele zooitje in een buffer wordt gepleurd alvorens het naar de client te sturen. In dat geval mag je ook halverwege de paginaopbouw nog header informatie schrijven.
Pagina: 1