[PHP/MySQL] Bij vernieuwen (F5) opnieuw query uitgevoerd.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Via video uitleg ben ik begonnen met PHP/MySQL. Zodoende
heb ik me eerste gastenboekje weten te maken. :) erg leuk.

Het gastenboekje bestaat uit een Form met naam, email en bericht en een submit knop.
Zodra men de gegevens invoert en op de submit knop druk worden de gegevens opgeslagen
in de database en deze direct op dezelfde pagina in een html tabel weer gegeven.

Ik test of de lengte van $_POST[naam] groter is dan 0. Als dit het geval is dan wordt
de insert query uitgevoerd.

Als ik vervolgens op F5 druk worden dezelfde gegeven weer in de database geplaatst terwijl naam, e-mail en bericht leeg zijn. Ik zou denken dat $_POST[naam] nog een waarde bevat en weer
de if statement ingaat. Maar als ik deze leeg met $_POST[naam] = ""; is er geen verschil.

Hier blijf ik hangen?

Is de if statement te zwak en moet ik in html meer gaan testen op lege text velden?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Op F5 drukken is niet hetzelfde als het formulieren verzenden. Toevallig worden de gegevens wel verzonden omdat deze in de laatste request zaten. Dat staat los van wat er in de huidige pagina gebeurt. Ook al wordt je doorverwezen naar tweakers.net (ik zeg maar wat), dan nog worden de gegevens opnieuw verzonden. Dat is puur wat er gebeurt als je op F5 drukt, de laatste headers worden nog een keer verzonden. Je zult hiervoor een andere check moeten maken. Mischien een vlaggetje in de sessie opslaan wanneer je een insert hebt gedaan.

[ Voor 19% gewijzigd door Michali op 10-03-2005 10:54 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik ken geen php, maar in ASP check ik zo voor dubbelposts:

Psuedo:
code:
1
2
3
4
5
6
7
Select * From messages Where Naam=Form.Naam AND Email=Form.Email AND Message=Form.Message

If Record = Leeg Then
  Insert Into blaat
Else
  Response.Write "Je bericht is al geplaatst."
End If

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 22:49

Reinier

\o/

Je kan ook via een header( "location:...." ) statement direct ná het uitvoeren van je MySQL-query redirecten naar een andere pagina. Een refresh voert dan niet nogmaals de query uit.

Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij kun je dan het beste php laten controleren of er een formulier is verstuurd:

PHP:
1
2
3
4
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) 
{
  // Er is een formulier verstuurd, via de POST methode...
}


Misschien dat dit je probleem oplost...

[ Voor 10% gewijzigd door Verwijderd op 10-03-2005 11:05 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Verwijderd schreef op donderdag 10 maart 2005 @ 11:04:
Volgens mij kun je dan het beste php laten controleren of er een formulier is verstuurd:

PHP:
1
2
3
4
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) 
{
  // Er is een formulier verstuurd, via de POST methode...
}


Misschien dat dit je probleem oplost...
Nope, dat gaat niet werken, omdat je met een refresh gewoon weer een post request doet. Het zijn gewoon dezelfde headers die verzonden worden.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 10 maart 2005 @ 11:04:
Volgens mij kun je dan het beste php laten controleren of er een formulier is verstuurd:

PHP:
1
2
3
4
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) 
{
  // Er is een formulier verstuurd, via de POST methode...
}


Misschien dat dit je probleem oplost...
Beperk je hier niet het weer nieuw invoeren van een bericht na het 1e geplaatste bericht in dezelfde
sessie?

Ik lees het volgende op php.net

PHP scripts genereren vaak dynamische content die niet mag worden gecached door de client browser of een proxy cache tussen de server en de client browser. Je kunt veel proxies en clients kunnen forceren het cachen uit te zetten met......

Wellicht moet ik het hierin zoeken door caching uit te schakelen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Michali schreef op donderdag 10 maart 2005 @ 10:53:
Op F5 drukken is niet hetzelfde als het formulieren verzenden. Toevallig worden de gegevens wel verzonden omdat deze in de laatste request zaten. Dat staat los van wat er in de huidige pagina gebeurt. Ook al wordt je doorverwezen naar tweakers.net (ik zeg maar wat), dan nog worden de gegevens opnieuw verzonden. Dat is puur wat er gebeurt als je op F5 drukt, de laatste headers worden nog een keer verzonden. Je zult hiervoor een andere check moeten maken. Mischien een vlaggetje in de sessie opslaan wanneer je een insert hebt gedaan.
Bedankt, het is al een stuk duidelijker. Aan een vlaggetje zat ik ook al te denken..
Pagina: 1