Hulp met sessions nodig
ik ben een beetje aan het spelen met sessions in PHP, en probeer een knop de maken om de sessie te resetten. Ik moet alleen 2 keer op Submit drukken om de sessie werkelijk te resetten.
Do ik wat verkeerd? Moet ik de Submit code ergens anders plaatsen?
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
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
<?php
session_start();
if(isset($_SESSION['views'])) {
$_SESSION['views'] = $_SESSION['views'] + 1;
}
else {
$_SESSION['views'] = 1;
}
echo "Pageviews = ".$_SESSION['views'];
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method='post'>
<input type='submit' value='Submit' name='submit' />
</form>
<?php
if(isset($_POST['submit'])) {
echo "works <br />";
session_destroy();
}
else {
echo "something went wrong <br />";
}
?>
session_start();
if(isset($_SESSION['views'])) {
$_SESSION['views'] = $_SESSION['views'] + 1;
}
else {
$_SESSION['views'] = 1;
}
echo "Pageviews = ".$_SESSION['views'];
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method='post'>
<input type='submit' value='Submit' name='submit' />
</form>
<?php
if(isset($_POST['submit'])) {
echo "works <br />";
session_destroy();
}
else {
echo "something went wrong <br />";
}
?>
ipv.
Verder zou ik geen $_SERVER['PHP_SELF'] gebruiken, en is het handiger om eerst logica (php in dit geval) te doen en dan pas de output te geven(html)
Getest en het werkt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
session_start();
if(isset($_POST['submit'])) {
session_destroy();
session_start();
}
if(isset($_SESSION['views'])) {
$_SESSION['views'] = $_SESSION['views'] + 1;
}
else {
$_SESSION['views'] = 1;
}
echo "Pageviews = ".$_SESSION['views'];
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method='post'>
<input type='submit' value='Submit' name='submit' />
</form>
session_start();
if(isset($_POST['submit'])) {
session_destroy();
session_start();
}
if(isset($_SESSION['views'])) {
$_SESSION['views'] = $_SESSION['views'] + 1;
}
else {
$_SESSION['views'] = 1;
}
echo "Pageviews = ".$_SESSION['views'];
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method='post'>
<input type='submit' value='Submit' name='submit' />
</form>
Gewijzigd op 03/02/2011 15:23:21 door - SanThe -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
session_start();
if(isset($_POST['submit'])) {
session_destroy();
session_start();
}
if(isset($_SESSION['views'])) {
$_SESSION['views']++;
}
else {
$_SESSION['views'] = 1;
}
echo "Pageviews = ".$_SESSION['views'];
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method='post'>
<input type='submit' value='Submit' name='submit' />
</form>
session_start();
if(isset($_POST['submit'])) {
session_destroy();
session_start();
}
if(isset($_SESSION['views'])) {
$_SESSION['views']++;
}
else {
$_SESSION['views'] = 1;
}
echo "Pageviews = ".$_SESSION['views'];
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method='post'>
<input type='submit' value='Submit' name='submit' />
</form>
gebruikt, wat dus dezelfde pagina is, laat action dan gewoon leeg.
<form method="post" action="">
...
Als je dan toch <form method="post" action="">
...
Mag ik vragen wat ik fout had gedaan? Was het omdat ik de session niet opnieuw startte na de klik? Dit deel bedoel ik:
@ Roel van de Water
Ik wist niet dat dat hetzelfde effect had, dank je!
Gewijzigd op 04/02/2011 13:11:59 door Jasper Geelen
if(isset($_POST['submit'])) {
Een submit knop dient om te submitten. Een submit knop dient niet om te controleren of er iets gepost is.
Er zijn meerdere situaties waarbij er wel gepost wordt maar waar $_POST['submit'] toch niet bestaat; bv. afhankelijk van de webbrowser, maar bv. is er ook een verschil wanneer de gebruiker effectief op de knop drukt of op enter drukt, na het invullen van de gegevens.
Vervang het door
if($_SERVER['REQUEST_METHOD'] == 'POST'){
Maar op die manier kan ik het niet aan een specifieke knop koppelen of wel? Of zou dat dan zo moeten
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_POST['submit'])) {
session_destroy();
session_start();
}
}
?>
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_POST['submit'])) {
session_destroy();
session_start();
}
}
?>
Gewijzigd op 04/02/2011 13:11:37 door Jasper Geelen
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
session_destroy();
session_start();
}
?>
if($_SERVER['REQUEST_METHOD'] == 'POST') {
session_destroy();
session_start();
}
?>
Ja maar als ik dan een andere knop in hetzelfde form heb staan, dan werken beide knoppen als een reset knop. Dat wil ik niet.
if(isset($_POST['submit']))
Als het maar 1 formulier is dan hoeft het niet.
Overigens zou je ook een aparte pagina kunnen maken waar je de sessie destroyt zodat je niet op iedere pagina een formulier hoeft te zetten. Dan maak je gewoon een linkje naar www.mijnsite.nl/uitloggen
Op die pagina zet je dan
session_destroy();
session_start();
header('Location: http://www.mijnsite.nl');
exit();
Jasper Geelen op 04/02/2011 13:08:03:
@ Kris Peeters
Maar op die manier kan ik het niet aan een specifieke knop koppelen of wel?
Maar op die manier kan ik het niet aan een specifieke knop koppelen of wel?
Waarom zou je?
Je hebt toch maar 1 submit knop per form.
Wat je wel kan doen, is controleren welk form is verzonden. Dat doe je met hidden input velden
Ozzie PHP op 04/02/2011 13:24:25:
if(isset($_POST['submit']))
Als het maar 1 formulier is dan hoeft het niet.
Als het maar 1 formulier is dan hoeft het niet.
Het is altijd een slecht idee. Ongeacht het aantal formulieren.
Gewijzigd op 04/02/2011 13:29:25 door Kris Peeters
Ozzie PHP op 04/02/2011 13:24:25:
Als je meerdere formulieren op je pagina hebt staan dan kun je dit wel doen:
if(isset($_POST['submit']))
if(isset($_POST['submit']))
Het punt is dus dat die niet altijd mee verstuurd wordt. Verder kan je netjes je code opdelen door if($_SERVER['REQUEST_METHOD'] == 'POST') te gebruiken. Alles wat in die if staat heeft te maken met een post.