PHP Taaltoets array probleem
-Controle of antwoord goed of fout is
-Bijhouden hoeveel pogingen zijn gedaan en hoeveel daarvan goed zijn
-Een goed woord mag niet opnieuw worden gevraagd
-Als alle woorden gevraagd zijn of als de gebruiker op stop heeft gedrukt moet er een cijfer worden weergegeven aan de hand van het aantal goede pogingen.
Nou ben ik al een eindje opweg, heb alleen nog niet de laatste eis verwerkt, omdat ik vastliep bij de derde. Ik dacht, als een woord goed is, haal ik deze uit beide arrays, echter werkt dit nog niet goed. Waar ga ik de fout in?
De eerste pagina:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
session_start();
$_SESSION['woord_nl']=array("stoel", "bord", "mes", "vork", "lepel", "bureau");
$_SESSION['woord_en']=array("chair", "plate", "knife", "fork", "spoon", "desk");
$_SESSION['aantal_w']=count($_SESSION['woord_nl']);
$_SESSION['n']=array_rand($_SESSION['woord_nl']);
$_SESSION['vraag']=$_SESSION['woord_nl'][$_SESSION['n']];
$_SESSION['antwoord']=$_SESSION['woord_en'][$_SESSION['n']];
?>
session_start();
$_SESSION['woord_nl']=array("stoel", "bord", "mes", "vork", "lepel", "bureau");
$_SESSION['woord_en']=array("chair", "plate", "knife", "fork", "spoon", "desk");
$_SESSION['aantal_w']=count($_SESSION['woord_nl']);
$_SESSION['n']=array_rand($_SESSION['woord_nl']);
$_SESSION['vraag']=$_SESSION['woord_nl'][$_SESSION['n']];
$_SESSION['antwoord']=$_SESSION['woord_en'][$_SESSION['n']];
?>
Controle pagina:
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
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
<?php
session_start();
if (isset($_SESSION['pogingen'])){
$_SESSION['pogingen']++;
}
else{
$_SESSION['pogingen']=1;
}
if ($_POST['antwoord']==$_SESSION['antwoord'])
{
echo "Het door jou ingevoerde woord is <font color='green'>goed!</font>";
unset($_SESSION['woord_nl'][$_SESSION['n']]);
unset($_SESSION['woord_en'][$_SESSION['n']]);
array_values($_SESSION['woord_nl']);
array_values($_SESSION['woord_en']);
if (isset($_SESSION['goede'])){
$_SESSION['goede']++;
}
else{
$_SESSION['goede']=1;
}
}
else
{
echo "Het door jou ingevoerde woord is <font color='red'>fout!</font>";
}
?>
session_start();
if (isset($_SESSION['pogingen'])){
$_SESSION['pogingen']++;
}
else{
$_SESSION['pogingen']=1;
}
if ($_POST['antwoord']==$_SESSION['antwoord'])
{
echo "Het door jou ingevoerde woord is <font color='green'>goed!</font>";
unset($_SESSION['woord_nl'][$_SESSION['n']]);
unset($_SESSION['woord_en'][$_SESSION['n']]);
array_values($_SESSION['woord_nl']);
array_values($_SESSION['woord_en']);
if (isset($_SESSION['goede'])){
$_SESSION['goede']++;
}
else{
$_SESSION['goede']=1;
}
}
else
{
echo "Het door jou ingevoerde woord is <font color='red'>fout!</font>";
}
?>
En de pagina die geladen wordt na controle dmv een link:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
session_start();
?>
<html>
<head>
<title>Taaltoets</title>
</head>
<body>
<h4>Taaltoets</h4>
<p>Deze toets bevat <?php echo $_SESSION['aantal_w'];?> woorden.</p>
<p>Je hebt <?php echo $_SESSION['pogingen'];?> pogingen gedaan, waarvan <?php echo $_SESSION['goede'];?> goede.</p>
<form method="post" action="controle.php">Vul het Engelse woord in voor <?php echo $_SESSION['vraag'];?>:</br><input type="text" size="15" name="antwoord">
<input type="submit" value="Controleer!" name="controle"></form>
</body>
</html>
session_start();
?>
<html>
<head>
<title>Taaltoets</title>
</head>
<body>
<h4>Taaltoets</h4>
<p>Deze toets bevat <?php echo $_SESSION['aantal_w'];?> woorden.</p>
<p>Je hebt <?php echo $_SESSION['pogingen'];?> pogingen gedaan, waarvan <?php echo $_SESSION['goede'];?> goede.</p>
<form method="post" action="controle.php">Vul het Engelse woord in voor <?php echo $_SESSION['vraag'];?>:</br><input type="text" size="15" name="antwoord">
<input type="submit" value="Controleer!" name="controle"></form>
</body>
</html>
Je probeert een array te unsetten welke niet bestaat. $_SESSION['n'] is bijvoorbeeld "stoel" geworden. Er bestaat geen $_SESSION['woord_nl']['stoel'], dit zou moeten zijn $_SESSION['woord_nl'][0]. Zoek eens function array_keys. Dan kom je er wel uit!
Die unset() functie heb ik gebruikt om ervoor te zorgen dat een gevraagd woord niet opnieuw gevraagd wordt. Wanneer ik $_SESSION['woord_nl'][0] gebruik, wordt toch de eerste entry (=eerste woord) verwijderd in plaats van het gevraagde woord?