Variabele verdwijnen na een druk op een link

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jac E

Jac E

19/04/2016 23:51:58
Quote Anchor link
Wanneer ik iets bij input invoer dan blijft de waarde staan bij een submit. Dat moet ook zodat de waarde blijft staan/bestaan bij een volgende ronde, ook wanneer ik niets invoer. Wanneer ik echter op de link druk verdwijnt deze waarde helemaal en komt niet meer terug. Wie weet waar het mis zou kunnen gaan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <input type="text" name="zoekterm" value="<?php if(isset($_POST['zoekterm']))
            echo htmlentities($_POST['zoekterm']); ?>
">
            <input type="submit" name="submit" value="Zoeken">
</form>


<?php
if ($a < $b){
echo '<li><a href= "'.$_SERVER['PHP_SELF'].'?pagina=c"</a></li>';}
?>
Gewijzigd op 19/04/2016 23:54:31 door Jac E
 
PHP hulp

PHP hulp

29/04/2024 08:18:27
 
Joe Boos

Joe Boos

20/04/2016 00:03:53
Quote Anchor link
De ins&outs zijn mij een beetje onduidelijk maar wat mij als eerste opvalt is dat je $_GET en $_POST door elkaar gebruikt....
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/04/2016 00:14:03
Quote Anchor link
punt 1 is dat er niets mis gaat maar dat het zo hoort te gaan.

punt 2 omdat je de oude zoekwaarde weer invult kun je deze zo weer opnieuw versturen. Al is de zoektekst misschien hetzelfde, het wordt opnieuw aangeleverd in de $_POST en je mag het dus zien als een nieuwe waarde.

Je formulier wordt verstuurd in de POST method. De snelkoppeling is altijd een GET method en dus worden er geen POST variabelen meegestuurd.

Je zult dus een workaround moeten bedenken. Meerdere mogelijkheden zijn mogelijk.

Een van de mogelijkheden is de zoektekst in de sessie op te slaan en als de $_GET['pagina'] bestaat dan is men dus naar de volgende (of vorige) pagina aan het navigeren en dan kun je de zoektekst wederom uit de sessie halen.

Schematisch:
overzicht.php (GET): zoektekst uit de sessie verwijderen (reset), de <input> wordt zonder zoektekst weergegeven

overzicht.php (POST): zoektekst is verstuurd en staat in de $_POST array. Deze waarde moet naar de sessie geschreven worden.

overzicht.php?pagina=123 (GET): zoektekst wordt niet meegestuurd dus moet uit de sessie gelezen worden en wederom in de <input> gezet worden.

Toevoeging op 20/04/2016 00:33:27:

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
<?php

session_start();

$zoekterm = '';

if($_SERVER['REQUEST_METHOD') == 'POST') {
    // nieuwe zoekterm
    $zoekterm = $_POST['zoekterm'];
}
else {
    // REQUEST_METHOD == GET
    if(isset($_GET['pagina']) && isset($_SESSION['zoekterm'])) {
        // pagina navigatie
        $zoekterm = $_SESSION['zoekterm'];
    }
}


// schrijf naar de sessie
$_SESSION['zoekterm'] = $zoekterm;

?>

<form method="post" action>
    <input type="text" name="zoekterm" value="<?php echo htmlspecialchars($zoekterm); ?>">
    <button type="submit">Zoeken</button>
</form>


Toevoeging op 20/04/2016 01:05:01:

p.s. Gebruik htmlspecialchars in combinatie met UTF-8 character encoding

http://stackoverflow.com/questions/6249151/how-to-properly-escape-html-form-input-default-values-in-php
Gewijzigd op 20/04/2016 01:02:45 door Frank Nietbelangrijk
 
Jac E

Jac E

20/04/2016 01:46:25
Quote Anchor link
Dank je Frank voor je hulp. Het werkt bijna. De zoektekst blijft nu netjes staan bij een submit. En wordt ook gebruikt bij het zoeken. Alleen wanneer ik op die link (o.a. volgende pagina) druk wordt er geen gebruik meer gemaakt van die zoektekst. Hij blijft echter wel staan bij de input en bij een submit gaat het zoeken weer goed. Het lijkt of $zoekterm leeg wordt gemaakt door die 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
<?php
session_start();
$zoekterm = '';

if($_SERVER['REQUEST_METHOD'] == 'POST') {
    // nieuwe zoekterm
    $zoekterm = $_POST['zoekterm'];
}
else {
    // REQUEST_METHOD == GET
    if(isset($_GET['pagina']) && isset($_SESSION['zoekterm'])) {
        // pagina navigatie
        $zoekterm = $_SESSION['zoekterm'];
    }
}


// schrijf naar de sessie
$_SESSION['zoekterm'] = $zoekterm;
?>


<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input class="textveld_administratie" type="text" name="zoekterm" value="<?php echo htmlspecialchars($zoekterm); ?>">
<input type="submit" name="submit" value="Zoeken">
</form>  
<?php
echo '<li><a href= "'.$_SERVER['PHP_SELF'].'?pagina='.($pagina+1).'"<>Volgende pagina</a></li>';}
?>
 
E vH

E vH

20/04/2016 09:47:30
Quote Anchor link
"Alleen wanneer ik op die link (o.a. volgende pagina) druk wordt er geen gebruik meer gemaakt van die zoektekst."

Hoe ziet je query er uit? Mij lijkt dat het daar fout gaat.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/04/2016 10:16:17
Quote Anchor link
Die wordt dan op regel 12 uit de sessie gehaald.
 
Jac E

Jac E

20/04/2016 11:16:56
Quote Anchor link
Klopt helemaal. Het ging daar inderdaad mis Elmar & Frank.
Frank: had je "hulp" code niet helemaal in het begin van het script en daarom werd $zoekterm toch gevuld met lege informatie na een submit. Weer wat geleerd. Super bedankt!
 
Thomas van den Heuvel

Thomas van den Heuvel

20/04/2016 15:24:08
Quote Anchor link
Waarom (in dit geval) niet altijd werken met GET? Dan heb je geen sessie nodig, alle noodzakelijke informatie wordt doorgegeven via de URL.

In zijn algemeenheid is het volgens mij stukken makkelijker om zoekfunctionaliteit altijd te implementeren via GET, je kunt dan ook zoekresultaten bookmarken, vooruit en achteruit navigeren zonder irritante meldingen over het her-verzenden van een formulier et cetera.
 
Jac E

Jac E

20/04/2016 16:37:03
Quote Anchor link
Bedankt ook voor de tip Thomas!
 



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.