Sessions worden niet opgeslagen
ik heb een multi-page form gemaakt, waar middels sessions de variabelen worden doorgegeven. Dit ging allemaal prima. Nu heb ik middels php 1 van de pagina's geheel gecontroleerd voor lege velden. Ook dit werkt. Alleen worden de variabelen nu niet meer in de session opgeslagen.
De controle doe ik als volgt:
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
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
<?php
if ( $_SERVER['REQUEST_METHOD'] == 'POST' &&
isset($_POST['initials'], $_POST['lastname'], $_POST['street'], $_POST['housenumber'], $_POST['zipcode'], $_POST['city'], $_POST['bsn'] , $_POST['birthdate'] ,$_POST['telephone'], $_POST['email'], $_POST['banknumber'], $_POST['recipient']) )
{
// Er zijn gegevens verstuurd naar deze pagina!
// We gaan de errors in een array bijhouden
$aErrors = array();
// Een initiaal bevat letters en spaties (minimaal 1)
if ( !isset($_POST['initials']) or !preg_match( '~^[\w ]{1,}$~', $_POST['initials'] ) ) {
$aErrors['initials'] = 'Voer aub je initialen in';
}
// Een Naam bevat letters en spaties (minimaal 2)
if ( !isset($_POST['lastname']) or !preg_match( '~^[\w ]{2,}$~', $_POST['lastname'] ) ) {
$aErrors['lastname'] = 'Voer aub je achternaam in';
}
if ( count($aErrors) == 0 ) {
// We hebben alle gegevens
// Gegevens verwerken!
// Volgende pagina aub
header('Location: http://localhost/testje/stap3.php');
exit();
}
}
?>
if ( $_SERVER['REQUEST_METHOD'] == 'POST' &&
isset($_POST['initials'], $_POST['lastname'], $_POST['street'], $_POST['housenumber'], $_POST['zipcode'], $_POST['city'], $_POST['bsn'] , $_POST['birthdate'] ,$_POST['telephone'], $_POST['email'], $_POST['banknumber'], $_POST['recipient']) )
{
// Er zijn gegevens verstuurd naar deze pagina!
// We gaan de errors in een array bijhouden
$aErrors = array();
// Een initiaal bevat letters en spaties (minimaal 1)
if ( !isset($_POST['initials']) or !preg_match( '~^[\w ]{1,}$~', $_POST['initials'] ) ) {
$aErrors['initials'] = 'Voer aub je initialen in';
}
// Een Naam bevat letters en spaties (minimaal 2)
if ( !isset($_POST['lastname']) or !preg_match( '~^[\w ]{2,}$~', $_POST['lastname'] ) ) {
$aErrors['lastname'] = 'Voer aub je achternaam in';
}
if ( count($aErrors) == 0 ) {
// We hebben alle gegevens
// Gegevens verwerken!
// Volgende pagina aub
header('Location: http://localhost/testje/stap3.php');
exit();
}
}
?>
Vervolgens komt in het formulier:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
[code]<?php echo isset($aErrors['initials']) ? '<li class="error">' : '<li>' ?>
<label for="initials">Initialen</label>
<input id="initials" name="initials" value="<?php echo isset($_POST['initials']) ? htmlspecialchars($_POST['initials']) : '' ?>" />
</li>
<?php echo isset($aErrors['name']) ? '<li class="error">' : '<li>' ?>
<label for="lastname">Achternaam</label>
<input id="lastname" name="lastname" value="<?php echo isset($_POST['lastname']) ? htmlspecialchars($_POST['lastname']) : '' ?>" />
</li>
?>
[code]<?php echo isset($aErrors['initials']) ? '<li class="error">' : '<li>' ?>
<label for="initials">Initialen</label>
<input id="initials" name="initials" value="<?php echo isset($_POST['initials']) ? htmlspecialchars($_POST['initials']) : '' ?>" />
</li>
<?php echo isset($aErrors['name']) ? '<li class="error">' : '<li>' ?>
<label for="lastname">Achternaam</label>
<input id="lastname" name="lastname" value="<?php echo isset($_POST['lastname']) ? htmlspecialchars($_POST['lastname']) : '' ?>" />
</li>
?>
En als laatste het storen van de variabelen in de sessie bij de volgende stap (dus bovenaan in de volgende file!:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
session_start();
$_SESSION['initials'] = $_POST['initials'];
$_SESSION['lastname'] = $_POST['lastname'];
?>
session_start();
$_SESSION['initials'] = $_POST['initials'];
$_SESSION['lastname'] = $_POST['lastname'];
?>
Iemand enig idee waarom dit mis gaat?
Gewijzigd op 23/01/2012 17:30:03 door Joost Online
NOOIT output en dus ook geen html vóór session_start(). Zet session_start() dan ook altijd helemaal bovenin.
session_start() moet altijd als aller eerste aangeroepen worden. Er mag voor die aanroep NIETS naar de browser zijn gestuurd.... dat zal dus je probleem zijn.
Zet het op elke pagina waar de gebruiker naar kan/mag surfen (wat je in je url-balk ziet).
maw.
Indien de gebruiker altid via index.php moet passeren (index.php?pagina=gastenboek , index.php?pagina=kalender , ... ), kan je best session_start() bovenaan index.php zetten. Zorg in dit geval dat session_start() niet meer voorkomt in include-files.
Indien de gebruiker kan surfen naar gastenboek.php , kalender.php , ... moet je session_start() bovenaan al die pagina's zetten.
Gewijzigd op 23/01/2012 17:28:44 door Kris Peeters
De session_start staat dus al bovenaan in de volgende file, niet onder de rest van de code.
Zo heb ik 6 stappen opgezet. Deze werken allemaal, alleen de informatie van stap 2 (waar de gegevens van worden gecontroleerd) wordt niet gestored zodra ik de session start in stap 3 geef.
maakt niet uit Joost, je stuurt nog steeds data naar de browser VOOR je session_start() aanroept.
Je moet de session vullen vóór regel 26 in je eerste script.
- SanThe - op 23/01/2012 17:39:03:
Je moet de session vullen vóór regel 26 in je eerste script.
Ah super, thanks! Is gelukt nu.
Allemaal hartelijk dank voor de snelle reacties.