Gå til innhold

Fjerne innholdet i $_POST tabellen


Anbefalte innlegg

Hei

 

Har et problem med en gjestebok jeg holder på å lage.

Jeg bruker $_POST for å hente data fra brukeren og lagre dem i en MySql database. Når dette er gjort tømmer jeg $_POST tabellen slik at skjema blir tomt igjen.

Kode:

lagreMelding($meld);
echo "Melding lagret";  	
$_POST = 0;

 

Når jeg da skriver ut $_POST tabellen er den tom. Men vis brukeren trykker på oppdater knappen, lagres meldingen på nytt og jeg ser at $_POST tabellen ikke er tom lenger, men har samme innholdet som den hadde før.

Skjer dette fordi $_POST tabellen også lagres hos klienten? (f.eks. cookies....?)

Hvordan kan jeg eventuelt fikse dette?

Lenke til kommentar
Videoannonse
Annonse

Det er rett og slett fordi brukeren når han trykker oppdater så sender han hele requesten på nytt til siden din, hvor han også sender skjemaet. Derfor hjelper det ikke at du tømmer $_POST, for den blir sendt på nytt. Bruk header("Location: www.dinside.com"); for å sende brukeren til siden igjen. Merk at du kan ikke ha noe output før bruken av header().

Lenke til kommentar

så lenge du ikke printer ut noe html, eller annet snusk, som skal tolkes av nettleseren, står du fritt til å lagre data i en database før du bruker header().

 

Det ?x50 mente var at du ikke kan bruke ting som print og echo, eller dumpe noe tekst før du evt. vil bruke header-funksjonen.

 

Eks:

 

Feil

<html>
<head>
 <title>test</title>
</head>

<?php
Header("Location: www.vg.no");
?>
....

 

 

Riktig

<?php
Header("Location: www.vg.no");
?>

<html>
<head>
 <title>test</title>
</head>

....

 

Litt lodden forklaring, som vanlig, men du skjønte kanskje tegninga :)

Lenke til kommentar

$_POST = 0 vil resette post til integeren 0, mens unset($_POST) vil sette $_POST = null. å gjøre $_POST = null manuelt vil derfor være (ørlite) kjappere ettersom det ikke skaper «overheat» ved å kalle en funksjon. Uansett er det ikke veldig lurt å unsette $_POST ettersom den vil bli refylt ved ei oppdatering av sida- og du mister den globale effekten $_POST har (ikke 100% sikker på denne).

 

Det finnes flere måter å unngå denne «dobbelpostinga på», hvor én allerede er nevnt- nemlig redirect. De andre metodene innebærer sessions og/eller cookies.

  • Sette timelimit ved å lagre tidspunkt for siste post i sessions/cookies og sammenlikne om det har gått ei viss tid sia siste post
  • Lagre sha1/md5-hash i sessions/cookies og sammenlikne om de er like

Lenke til kommentar

dabear, hva i alle dager får deg til å tro at unset() vil være tregere?

Det finnes da ingen ting som tilsier det? Hvis noe så så vil det være mye kjappere! Merk at på dette nivået så er det snakk om HELT ubetydelig forskjeller, men jeg unset() vil være kjappere!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...