$_POST variable destroyen ivm refresh van pagina?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Leroy

leroy

16/08/2007 20:56:00
Quote Anchor link
Dit is relatief vrij lastig uit te leggen,
Heb al bij google, het forum en wat andere php websites doorzocht, maar kan gewoon niet vinden wat ik zoek...

HEt probleem is als volgt.

Voor mijn aankomende website heb ik een formulier:

file blaat.php
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
24
25
26
27
28
29
30
function formulier() {
  $uitvoer = ""; //init
  $uitvoer .= "  <form action="blaat.php" method="post" name="f">\n";
  $uitvoer .= "  <input type="text" name="gebruikersnaam"><br>\n";
  $uitvoer .= "  <input type="text" name="bericht"><br>\n";
  $uitvoer .= "  <input type="submit" name="actie" value="plaatsen"><br>\n";
  $uitvoer .= "</form>";
  return $uitvoer;
}

function formulier() {
  $uitvoer = ""; //init
  mysql_connect($host,$user,$passwd);
  mysql_select_db($database);
  $sql  = "INSERT INTO berichten (gebruikersnaam, bericht) VALUES ";
  $sql .= "('" . $_POST['gebruikersnaam'] . "','" . $_POST['bericht'] . "')";
  mysql_close();

  $uitvoer .= "Uw bericht is geplaatst";
  $uitvoer .= Formulier();
  return $uitvoer;
}


if ((isset($_POST['actie']) && ($_POST['actie'] == "plaatsen")) {
  echo BerichtPlaatsen();
}
else {
  echo Formulier();
}


Ok, heb de code even uit mijn hoofd geschreven, maar er vanuit gaande dat dit werkt.

Ik wil voorkomen dat de user eerst een tussenpagina voor zijn kiezen krijgt (dmv javascript location.href="take_post.php";) of iets dergelijks.

als ik deze pagina refresh krijg ik een popup vanuit firefox / internet explorer of ik de data nogmaals wil verzenden, of dat ik misschien wil annuleren.

Om de pagina te willen zien moet ik dus opnieuw drukken... leuk, maar dan is mijn posting er 2 x.

Om de database te checken met een datum zie ik ook niet echt zitten.

Worden deze $_POST[] variablen nu in de http header gezet? of waar komen deze vandaan? (ik zag op php.net iets van $HTTP_POST_VARS maar dat komt op hetzelfde neer (Gecontroleer met print_r($_POST); en print_r($HTTP_POST_VARS);

Is het mogelijk om deze te 'destroyen'? en dit dus niet meer mogelijk is?

Kan er op internet weinig over vinden, terwijl er best wel wat scripts (lees o.a. fora's) hier gebruik van maken? (met refresh krijg ik in ieder geval geen dubbele postings...


Ben nu paar uur bezig geweest met stoeien, alle hulp is welkom.
 
PHP hulp

PHP hulp

27/12/2024 10:11:52
 
Martijn B

Martijn B

16/08/2007 21:13:00
Quote Anchor link
blaat.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
# Is er wat gepost hier heen?
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{


  header('location: blaat.php');
  exit;
}

?>
 
Leroy

leroy

16/08/2007 21:15:00
Quote Anchor link
@Martijn,

Hmm dat gaat niet werken aangezien ik gebruik maak van sessies en cookies die de headers already sent hebben zeg maar....
 
Martijn B

Martijn B

16/08/2007 21:19:00
Quote Anchor link
Bij PHP sessies wordt er toch maar 1 keer een cookie aangemaakt, die jou aan de sessie koppelt?

Ik heb een eigen sessie systeem gemaakt met de database en daar maak ik maar 1 keer een cookie aan.
 
Leroy

leroy

16/08/2007 21:22:00
Quote Anchor link
dat klopt,

maar indien session_start(); gebruikt wordt kun je daarna geen headers meer gebruiken.

Daarom was ik over gestapt naar javascript:location.href=''; die voor mijn gevoel ook sneller door stuurt.

header('location : iets.php'); geeft tijdens het parsen van de code al een ander pagina? of moet je dan output buffering gebruiken?
 
Martijn B

Martijn B

16/08/2007 21:32:00
Quote Anchor link
Lukt dit wel dan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
session_start();

session_write_close();
header('location: blaat.php');
exit;
?>
 
Leroy

leroy

16/08/2007 21:35:00
Quote Anchor link
nope, helaas:

Warning: Cannot modify header information - headers already sent by (output started at /opt/data/apache/PROD

edit:
Weet je misschien waar de post data vandaan komt?deze komt uit de HTTP vars, dus zou weg te drukken moeten zijn?
Gewijzigd op 01/01/1970 01:00:00 door leroy
 
Leroy

leroy

17/08/2007 06:01:00
Quote Anchor link
ik zit toch te denken om een javascript re-direct aan te maken, en deze in een functie te banjeren.

lijkt me het makkelijkst...
 
Niels Janssen

Niels Janssen

17/08/2007 08:26:00
Quote Anchor link
Waar slaat dat op? Na session_start() kun je gewoon headers blijven gebruiken, wat is anders het nut ervan? Jij moet eens kijken waar die output vandaan komt, misschien heb je wel ergens een echo neergezet waar die niet thuis hoort of iets anders.
 
Jelmer -

Jelmer -

17/08/2007 09:28:00
Quote Anchor link
Klinkt als gratis-host reclamebanners a la lycos e.a. to me
 
PHP Newbie

PHP Newbie

17/08/2007 09:31:00
Quote Anchor link
weet je zeker dat je echt geen output voor die header hebt?

een spatie kan al te veel zijn...
 
Martijn B

Martijn B

17/08/2007 10:33:00
Quote Anchor link
Dit werkt gewoon:
sessie_pagina1.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
session_start();

$_SESSION['blaat'] = 'blaat';
$_SESSION['hits_pagina1'] = (isset($_SESSION['hits_pagina1']) ? $_SESSION['hits_pagina1'] + 1 : 1);

session_write_close();
header('location: sessie_pagina2.php');
exit;
?>


sessie_pagina2.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
session_start();

echo    'blaat: ', $_SESSION['blaat'], '<br />',
        'hits_pagina1: ', $_SESSION['hits_pagina1'], '<br />',
        '<a href="sessie_pagina1.php">Terug naar pagina 1</a>';
?>


Moet je wel eerst naar "sessie_pagina1.php" gaan.
 
Leroy

leroy

17/08/2007 16:28:00
Quote Anchor link
@Jelmer,

ik snap je niet...

@alle anderen

er wordt idd al dingen ge-echo'd; dat klopt.

Vandaar dat ik dus ook over ben gegaan naar javascript.
Zelf heb ik geen zin om extra pagina's te gaan gebruiken, reden hiervoor is vrij simpel : ik wil overzicht in me code houden.

er komen gewoon weg teveel input forms op de site dat ik wil weten wat wat is.

Maar bij deze mag hij als opgelost komen te staan (closed?) javascript bied wel een oplossing voor mij :)
 
Frank -

Frank -

17/08/2007 16:35:00
Quote Anchor link
Quote:
er wordt idd al dingen ge-echo'd; dat klopt.
Dan de oplossing: Niks echoen!

Ik wil niet lullig doen, maar dat had je zelf toch ook wel kunnen bedenken?

Mijn scripts maken letterlijk pas op de allerlaatste regel de html-output aan. Tot die tijd worden er alleen maar variabelen aangemaakt met gegevens die uiteindelijk moeten worden geechood, wat dus op de allerlaatste regel gebeurd. Gevolg: Ik heb nooit gedonder met cookies en/of sessies.

Tip: Gebruik een template-engine.
 
Stefan

Stefan

18/08/2007 01:01:00
Quote Anchor link
je kan ook een buffer gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php ob_start(); /*en */ ob_end_flush();?>
 
Stefan

Stefan

18/08/2007 01:01:00
Quote Anchor link
sorry voro doublepost, met die functies boven en onderaan je pagina kun je gewoon tussendoor echoen en headers plaatsen etc, omdat dan pas op het einde van het bestand de data wordt verzonden naar de client.
Gewijzigd op 01/01/1970 01:00:00 door Stefan
 
Leroy

leroy

18/08/2007 10:34:00
Quote Anchor link
@door,

Je doet niet lullig, ik had het idd zelf kunnen bedenken, probleem is dat ik met includes werk die al wel wat lopen te outputten.

@stefan,

Buffer kan inderdaad ook, maar de persoon met wie ik de website maak die wil dat niet gebruiken,

anyway, ik houd het op een mooi javascriptje!

Toch bedankt jullie allen!
 



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.