Bij terug gaan naar pagina zoeken krijg ik foutmelding!

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

13/08/2013 14:54:32
Quote Anchor link
Op mijn website kan je zoeken naar een naam van een gast. Als je bij het resultaat op een profiel pagina klikt van de gast dan krijg je deze te zien op een nieuwe pagina. Als je dan in je browser op vorige pagina klikt krijg ik een foutmelding (in Chrome = oeps, zie onderstaande 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?!
 
PHP hulp

PHP hulp

20/03/2019 11:27:51
 
Erwin H

Erwin H

13/08/2013 14:56:29
Quote Anchor link
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.
 
Chris -

Chris -

13/08/2013 15:57:33
Quote Anchor link
De enige manier om dit op te lossen is door het formulier te veranderen in een GET-request.
 
Kees Mulder

Kees Mulder

13/08/2013 16:01:20
Quote Anchor link
Bedoel je dan de zoek opdracht of het formulier die het laat zien? Dit is de zoek opdracht:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/08/2013 16:53:06
Quote Anchor link
Of door nadat een formulier gepost is te directen met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php header('Location: een_andere_pagina.php'); ?>
welke dan vervolgens weer gewoon met de GET methode geladen wordt. Eventueel zijn dan de nodige gegevens nog in een session op te slaan.
Gewijzigd op 13/08/2013 16:53:22 door Frank Nietbelangrijk
 
Kris Peeters

Kris Peeters

13/08/2013 16:54:31
Quote Anchor link
Bekijk dit eens:

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
<?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>'
;
?>


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 ...
 
Chris -

Chris -

13/08/2013 17:08:57
Quote Anchor link
Nogmaals iedereen, wáárom persé POST-request? :P

@Kees: method="post" veranderen naar method="get"

Al je $_POST variabelen wijzigen naar $_GET. Klaar. Easy :P
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/08/2013 17:30:40
Quote Anchor link
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
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>


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
 
Kris Peeters

Kris Peeters

13/08/2013 18:03:54
Quote Anchor link
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
 



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.