$_SESSION aan het werk krijgen
Ik heb een quiz, en met behulp van sessions wil ik ervoor zorgen dat een quizvraag maar 1 keer kan worden beantwoord.
Ik heb nu dit, maar het werkt niet:
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();
if ( $_SERVER['REQUEST_METHOD'] == 'POST') {
if($_POST) {
while ( $aBericht = mysql_fetch_assoc( $rResult ) ) {
// We moeten vanwege de speciale tekens in de titel htmlspecialchars() gebruiken
// Dit zorgt ervoor dat bijvoorbeeld < en " onschadelijk worden gemaakt
$paginanummer= ''.htmlspecialchars($aBericht['id']).'';
switch($_GET['vraag']) {
case $paginanummer:
echo '
<form method="post" action="" name="vraag" id="quizvraag">';
echo '<p>
<a href="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding'] ) . '" rel="lightbox"><img src="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding_thumb'] ) . '"></a><br><br>
'.htmlspecialchars($aBericht['vraag']).'
</p>
<p>';
echo 'A.<input type="submit" disabled="disabled" name="a" class="form" value="'.htmlspecialchars($aBericht['antwoordA']).'" />'; if(isset($_POST['a']) && $aBericht['goede_antwoord'] != 'A') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'A') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['a']) && $aBericht['goede_antwoord'] == 'A') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
echo 'B.<input type="submit" disabled="disabled" name="b" class="form" value="'.htmlspecialchars($aBericht['antwoordB']).'" />'; if(isset($_POST['b']) && $aBericht['goede_antwoord'] != 'B') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'B') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['b']) && $aBericht['goede_antwoord'] == 'B') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
echo 'C.<input type="submit" disabled="disabled" name="c" class="form" value="'.htmlspecialchars($aBericht['antwoordC']).'" />'; if(isset($_POST['c']) && $aBericht['goede_antwoord'] != 'C') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'C') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['c']) && $aBericht['goede_antwoord'] == 'C') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
echo '</p>
<input type="submit" name="volgendevraag" value="Volgende vraag" />
</form>
';?>
session_start();
if ( $_SERVER['REQUEST_METHOD'] == 'POST') {
if($_POST) {
while ( $aBericht = mysql_fetch_assoc( $rResult ) ) {
// We moeten vanwege de speciale tekens in de titel htmlspecialchars() gebruiken
// Dit zorgt ervoor dat bijvoorbeeld < en " onschadelijk worden gemaakt
$paginanummer= ''.htmlspecialchars($aBericht['id']).'';
switch($_GET['vraag']) {
case $paginanummer:
echo '
<form method="post" action="" name="vraag" id="quizvraag">';
echo '<p>
<a href="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding'] ) . '" rel="lightbox"><img src="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding_thumb'] ) . '"></a><br><br>
'.htmlspecialchars($aBericht['vraag']).'
</p>
<p>';
echo 'A.<input type="submit" disabled="disabled" name="a" class="form" value="'.htmlspecialchars($aBericht['antwoordA']).'" />'; if(isset($_POST['a']) && $aBericht['goede_antwoord'] != 'A') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'A') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['a']) && $aBericht['goede_antwoord'] == 'A') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
echo 'B.<input type="submit" disabled="disabled" name="b" class="form" value="'.htmlspecialchars($aBericht['antwoordB']).'" />'; if(isset($_POST['b']) && $aBericht['goede_antwoord'] != 'B') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'B') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['b']) && $aBericht['goede_antwoord'] == 'B') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
echo 'C.<input type="submit" disabled="disabled" name="c" class="form" value="'.htmlspecialchars($aBericht['antwoordC']).'" />'; if(isset($_POST['c']) && $aBericht['goede_antwoord'] != 'C') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'C') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['c']) && $aBericht['goede_antwoord'] == 'C') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
echo '</p>
<input type="submit" name="volgendevraag" value="Volgende vraag" />
</form>
';?>
Je hebt momenteel punt(en)
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
33
34
35
36
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
<?php echo '<br><br>';
if(!empty($_SESSION['vraag'][$paginanummer])) {
header("Location: ?vraag=" . mt_rand(1, 20));
exit();
}
if($_POST['volgendevraag'])
{
$_SESSION['vraag'][$paginanummer] = 'beantwoord';
header("Location: ?vraag=" . (intval($paginanummer)+1));
exit();
}
}
}
}
} else {
while ( $aBericht = mysql_fetch_assoc( $rResult ) ) {
// We moeten vanwege de speciale tekens in de titel htmlspecialchars() gebruiken
// Dit zorgt ervoor dat bijvoorbeeld < en " onschadelijk worden gemaakt
$paginanummer= ''.htmlspecialchars($aBericht['id']).'';
switch($_GET['vraag']) {
case $paginanummer:
echo '
<form method="post" action="" name="vraag" id="quizvraag">
<p>';
if ($aBericht['afbeelding'] != '') {
echo '<a href="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding'] ) . '" rel="lightbox"><img src="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding_thumb'] ) . '"></a><br><br>';
}
echo '
'.htmlspecialchars($aBericht['vraag']).'
</p>
<p>
A.<input type="submit" name="a" class="form" value="'.htmlspecialchars($aBericht['antwoordA']).'" /><br>
B.<input type="submit" name="b" class="form" value="'.htmlspecialchars($aBericht['antwoordB']).'" /><br>
C.<input type="submit" name="c" class="form" value="'.htmlspecialchars($aBericht['antwoordC']).'" /><br>
</p>
</form>';?>
if(!empty($_SESSION['vraag'][$paginanummer])) {
header("Location: ?vraag=" . mt_rand(1, 20));
exit();
}
if($_POST['volgendevraag'])
{
$_SESSION['vraag'][$paginanummer] = 'beantwoord';
header("Location: ?vraag=" . (intval($paginanummer)+1));
exit();
}
}
}
}
} else {
while ( $aBericht = mysql_fetch_assoc( $rResult ) ) {
// We moeten vanwege de speciale tekens in de titel htmlspecialchars() gebruiken
// Dit zorgt ervoor dat bijvoorbeeld < en " onschadelijk worden gemaakt
$paginanummer= ''.htmlspecialchars($aBericht['id']).'';
switch($_GET['vraag']) {
case $paginanummer:
echo '
<form method="post" action="" name="vraag" id="quizvraag">
<p>';
if ($aBericht['afbeelding'] != '') {
echo '<a href="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding'] ) . '" rel="lightbox"><img src="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding_thumb'] ) . '"></a><br><br>';
}
echo '
'.htmlspecialchars($aBericht['vraag']).'
</p>
<p>
A.<input type="submit" name="a" class="form" value="'.htmlspecialchars($aBericht['antwoordA']).'" /><br>
B.<input type="submit" name="b" class="form" value="'.htmlspecialchars($aBericht['antwoordB']).'" /><br>
C.<input type="submit" name="c" class="form" value="'.htmlspecialchars($aBericht['antwoordC']).'" /><br>
</p>
</form>';?>
Je hebt momenteel punt(en)
Hoe kan ik de sessions aan de praat krijgen?
Alvast bedankt!
n9iels
Maar ja lees dan nog maar eens goed:
http://www.php.net/set_cookie
http://www.php.net/cookie
http://www.php.net/session
Toevoeging op 19/12/2011 20:00:27:
Overigens, wat is er dan trouwens slecht aan de basis
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
- de juiste controles en validaties ontbreken
- je gebruikt de functie htmlspecialchars op een verkeerde manier
- je gebruikt de nutteloze functie empty
- switch constructie, daar waar deze niet thuis hoort, dan wel niet benodigd is, script logica is ver te zoeken
- ik zie quotes staan op plekken waar deze overbodige zijn
- ik zie veels te veel echo's
En je kan in deze - kleine 30 minuten - tijd niet de links doorgrond hebben.
Ik heb als eerst eens gekeken naar htmlspecialchars().
Hij wordt fout gebruikt, en dat merk ik nu ook.
Want het gene dat ik uit de database haal bevat eigenlijk helemaal tags die opgezet hoeven te worden.
Maar nu het moeilijkst, hoe moet het dan wel?
Daar kan ik eigenlijk nergens iets over vinden.
Toevoeging op 19/12/2011 20:51:18:
Moet ik deze dan gewoon verwijderen en het op deze manier doen:
Code (php)
1
2
3
2
3
<?php
<input type="submit" disabled="disabled" name="a" class="form" value="'.($aBericht['antwoordA']).'" />
?>
<input type="submit" disabled="disabled" name="a" class="form" value="'.($aBericht['antwoordA']).'" />
?>
Overigens vind ik persoonlijk niks mis met alles te echoen, ik doe dat zelf ook altijd omdat ik dat beter leeesbaar vind dan elke keer te switchen van php naar html.
Niels van der Veer op 19/12/2011 20:50:02:
Code (php)
1
2
3
2
3
<?php
<input type="submit" disabled="disabled" name="a" class="form" value="'.($aBericht['antwoordA']).'" />
?>
<input type="submit" disabled="disabled" name="a" class="form" value="'.($aBericht['antwoordA']).'" />
?>
Een input die disabled staat wordt niet meeverzonden.
Dus als ik dit doe klopt het wel:
Code (php)
1
2
3
4
2
3
4
<?php
$antwoord-a= htmlspecialchars($aBericht['antwoordA'])
//While looop
<input type="submit" name="a" class="form" value="'.$antwoord-a.'" />
$antwoord-a= htmlspecialchars($aBericht['antwoordA'])
//While looop
<input type="submit" name="a" class="form" value="'.$antwoord-a.'" />
Gewijzigd op 20/12/2011 07:39:29 door Niels Veer