Variabele verdwijnen na een druk op een 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?
<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>';}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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
De ins&outs zijn mij een beetje onduidelijk maar wat mij als eerste opvalt is dat je $_GET en $_POST door elkaar gebruikt....
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:
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
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)
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
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>
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
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)
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
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>';}
?>
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>';}
?>
"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.
Hoe ziet je query er uit? Mij lijkt dat het daar fout gaat.
Die wordt dan op regel 12 uit de sessie gehaald.
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!
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!
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.
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.
Bedankt ook voor de tip Thomas!




