Bij terug gaan naar pagina zoeken krijg ik foutmelding!
Deze webpagina kan alleen correct worden weergegeven op basis van gegevens die u eerder heeft opgegeven. U kunt deze gegevens opnieuw verzenden, maar hierdoor worden de acties herhaald die eerder op deze pagina zijn uitgevoerd.
Laad deze webpagina opnieuw.
Klik op de knop 'Opnieuw laden' om de gegevens opnieuw te verzenden die nodig zijn om de pagina te laden.
Foutcode: ERR_CACHE_MISS
Wat kan ik hier aan doen?!
Niets, dat komt doordat de pagina in eerste instantie werd opgeroepen met POST gegevens. De browser ziet nu een back actie, maar mist die POST gegevens. Om de pagina alsnog goed te kunnen opbouwen wil de browser dus opnieuw de POST gegevens meesturen en vraagt in feite of dat mag.
De enige manier om dit op te lossen is door het formulier te veranderen in een GET-request.
Code (php)
1
2
3
4
5
2
3
4
5
<form id="search" action="zoeken" method="post" onsubmit="zoek();">
<input type="hidden" name="zoek" value="ok" />
<input type="text" name="item" onfocus="clear_search(this); " id="zoekveld" value="Ik zoek...">
<input type="image" src="/img/icon-zoeken.png" class="btn" id="submit" alt="Zoeken" value="" />
</form>
<input type="hidden" name="zoek" value="ok" />
<input type="text" name="item" onfocus="clear_search(this); " id="zoekveld" value="Ik zoek...">
<input type="image" src="/img/icon-zoeken.png" class="btn" id="submit" alt="Zoeken" value="" />
</form>
welke dan vervolgens weer gewoon met de GET methode geladen wordt. Eventueel zijn dan de nodige gegevens nog in een session op te slaan.
Of door nadat een formulier gepost is te directen met Gewijzigd op 13/08/2013 16:53:22 door Frank Nietbelangrijk
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$_SESSION['post'] = $_POST; // we kopiëren de volledige post naar een session variabele. Die kunnen we later gebruiken waar we willen
header('location: ?');
}
$username = isset($_SESSION['post']['username']) ? $_SESSION['post']['username'] : '' ;
$site = isset($_SESSION['post']['site']) ? $_SESSION['post']['site'] : '' ;
echo '
<form action="" method="post">
<input name="username" placeholder="username" value="' . $username . '"><br>
<input name="site" placeholder="site" value="' . $site . '"><br>
<input type="submit" value="GO">
</form>';
?>
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$_SESSION['post'] = $_POST; // we kopiëren de volledige post naar een session variabele. Die kunnen we later gebruiken waar we willen
header('location: ?');
}
$username = isset($_SESSION['post']['username']) ? $_SESSION['post']['username'] : '' ;
$site = isset($_SESSION['post']['site']) ? $_SESSION['post']['site'] : '' ;
echo '
<form action="" method="post">
<input name="username" placeholder="username" value="' . $username . '"><br>
<input name="site" placeholder="site" value="' . $site . '"><br>
<input type="submit" value="GO">
</form>';
?>
Dus, wat doen we?
- Na een post moet je ALTIJD header('location ...') doen. Dan krijg je die warning niet die zegt 'post variables already sent' (of zo)
- We kopiëren de post naar een session variabele. Die blijft beschikbaar.
- Tja, dat is het zowat ...
@Kees: method="post" veranderen naar method="get"
Al je $_POST variabelen wijzigen naar $_GET. Klaar. Easy :P
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
31
32
33
34
35
36
37
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
<?php
session_start();
// default zoektekst
$search = '';
// als de zoektekst opgeslagen is in de sessie dan $search overschrijven
if(isset($_SESSION['form']['search']))
$search = $_SESSION['form']['search'];
// hee iemand heeft op 'zoek' gedrukt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// bewaar alle POST variabelen in de sessie.
foreach($_POST as $key => $post)
$_SESSION['form'][$key] = $post;
// redirect naar de zelfde pagina om hem in de GET methode aan te roepen
header('Location: ' . $_SERVER['SCRIPT_NAME']);
exit;
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<form action="" method="post" >
<input type="text" name="search" value="<?php echo $search; ?>" />
<button type="submit">Zoek!</button>
</form>
</body>
</html>
session_start();
// default zoektekst
$search = '';
// als de zoektekst opgeslagen is in de sessie dan $search overschrijven
if(isset($_SESSION['form']['search']))
$search = $_SESSION['form']['search'];
// hee iemand heeft op 'zoek' gedrukt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// bewaar alle POST variabelen in de sessie.
foreach($_POST as $key => $post)
$_SESSION['form'][$key] = $post;
// redirect naar de zelfde pagina om hem in de GET methode aan te roepen
header('Location: ' . $_SERVER['SCRIPT_NAME']);
exit;
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<form action="" method="post" >
<input type="text" name="search" value="<?php echo $search; ?>" />
<button type="submit">Zoek!</button>
</form>
</body>
</html>
Toevoeging op 13/08/2013 17:31:37:
chris: voor mij persoonlijk is de reden dat het er niet uit ziet, en zeker niet in combinatie met userfriendly url's
Chris - op 13/08/2013 17:08:57:
Nogmaals iedereen, wáárom persé POST-request? :P
Oh, het gaat om een zoekopdracht ... Daarvoor is GET wel goed.
Post gebruikt men, in principe, wanneer een gebruiker content toevoegt aan een website.
bv. commentaar; bv. een post op een forum (bv. het formulier waarop ik nu aan het typen ben)
Get gebruikt men om data te lezen. Dus, in het bijzonder ... de gebruiker stuurt een id -> de website geeft de inhoud van het record met die id; of een pagina (bv. index.php?pagina=kalender)
Het leuke aan GET, is dat je die url kan bookmarken, delen ...
Een login gebeurt altijd met post. Er is geen reden waarom je naam en paswoord in een url zouden verschijnen. Redenen om dat niet te doen, zijn er zeker. Niet doen !
Zoekopdrachten kunnen wel met GET. Hier is het wel relevant dat de pagina kan worden opgeslagen.
Het is dan wel wat prutsen met url_encode/url_decode. Zien dat speciale karakters (die worden in de url-balk anders weergegeven) goed worden ontcijferd
Gewijzigd op 13/08/2013 18:06:33 door Kris Peeters