$_POST variable destroyen ivm refresh van pagina?
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)
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
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();
}
$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.
Hmm dat gaat niet werken aangezien ik gebruik maak van sessies en cookies die de headers already sent hebben zeg maar....
Ik heb een eigen sessie systeem gemaakt met de database en daar maak ik maar 1 keer een cookie aan.
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?
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
lijkt me het makkelijkst...
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.
Klinkt als gratis-host reclamebanners a la lycos e.a. to me
een spatie kan al te veel zijn...
sessie_pagina1.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
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;
?>
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)
1
2
3
4
5
6
7
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>';
?>
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.
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 :)
Quote:
Dan de oplossing: Niks echoen!er wordt idd al dingen ge-echo'd; dat klopt.
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.
je kan ook een buffer gebruiken:
Gewijzigd op 01/01/1970 01:00:00 door Stefan
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!