Fout in functie??

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

The Ultimate

The Ultimate

22/07/2013 11:20:10
Quote Anchor link
Ik ben bezig met een online vragenlijst. De bedoeling is dat de bezoeker na het beantwoorden van de vraag doorgaat naar de volgende vraag. In een sessie wordt bijgehouden welke vraag als laatste werd beantwoord. Het script gaat wel door naar de volgende vraag, maar slaat ook vragen over. Het script geeft de volgende vragen weer: 1, 2, 4, 36.

Vragen 30 en 87 worden overgeslagen. Ik probeer al 2 dagen te achterhalen waar dit door komt??

Ik vermoed dat er een foutje in de functie zit, maar kom er maar niet achter. Kan iemand helpen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
/* Function */
function get_next($array, $key) {
    $currentKey = key($array);
    while ($currentKey !== null && $currentKey != $key) {
        next($array);
        $currentKey = key($array);
    }

    return current($array);
}


/* Afhandeling formulier */
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    /* Controleer het formulier
      $error_msg = false;

      /* Controleer op fouten
      if (empty($error_msg) === false) {

      /* Error melding weergeven

      } else {

      echo 'U wordt doorgestuurd naar de volgende vraag.';

      /* Volgende vraag activeren */

    $_SESSION['cur_q_id'] = get_next($_SESSION['q_ids'], $_SESSION['cur_q_id']);
    //}
}


/* Virtuele vragenlijst */
$_SESSION['q_ids'] = array(30, 2, 36, 87, 4, 1);

/* Sorteer de vragenlijst op value (q_id) van hoog naar laag */
sort($_SESSION['q_ids'], SORT_NUMERIC);

/* Gesorteerde vragen weergeven */
foreach ($_SESSION['q_ids'] as $key => $val) {
    echo "vraag[" . $key . "] = " . $val . "<br/>";
}


/* Controleer of er al antwoorden zijn gegeven */
if (isset($_SESSION['cur_q_id']) === false) {

    echo 'De vragenlijst wordt opnieuw gestart bij de eerste vraag.';

    /* Start een nieuwe vragenlijst bij eerste vraag */
    $_SESSION['cur_q_id'] = $_SESSION['q_ids'][0];
}




/* Huidige vraag */
$cur_q_id = $_SESSION['cur_q_id'];
echo 'Huidige vraag: ' . $cur_q_id;

/* Key van huidige vraag (value) opvragen */
$cur_key = array_search($cur_q_id, $_SESSION['q_ids']);

/* Volgende vraag */
$next_q_id = get_next($_SESSION['q_ids'], $cur_key);
echo 'Volgende vraag: ' . $next_q_id;




/* Formulier */
?>

<h2>Dit is vraag <?php echo $_SESSION['cur_q_id']; ?></h2>
<form method="post" action="">
    <input type="submit">
</form>

<?php
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
?>
Gewijzigd op 22/07/2013 11:24:21 door The Ultimate
 
PHP hulp

PHP hulp

29/03/2024 15:40:24
 

22/07/2013 11:46:03
Quote Anchor link
Waar is je session_start(); ?
 
The Ultimate

The Ultimate

22/07/2013 11:52:12
Quote Anchor link
De sessie wordt reeds in index.php gestart. Hoezo?
Gewijzigd op 22/07/2013 12:00:34 door The Ultimate
 

22/07/2013 12:05:16
Quote Anchor link
Het is natuurlijk mogelijk dat je die vergeten bent, en dat daardoor niet alles wordt weergegeven.
 
The Ultimate

The Ultimate

22/07/2013 12:41:41
Quote Anchor link
Ben er inmiddels uitgekomen (zie script hieronder).

Indien iemand nog suggesties/verbeterpunten heeft, dan zijn deze uiteraard zeer welkom!

Indien iemand interesse heeft in het script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $_SESSION['cur_q_key'] = $_SESSION['next_q_id'];
}


/* Vragenlijst */
$_SESSION['q_ids'] = array(5, 10, 15, 20, 25, 30);

/* Start nieuwe vragenlijst */
if (empty($_SESSION['cur_q_key']) === true) {
    $_SESSION['cur_q_key'] = key($_SESSION['q_ids']);
}

$cur_key = $_SESSION['cur_q_key'];

/* Verplaats de internal pointer naar de huidige positie indien de vragenlijst al werd gestart */
while (key($_SESSION['q_ids']) != $_SESSION['cur_q_key']) {
    next($_SESSION['q_ids']);
    $cur_key = key($_SESSION['q_ids']);
}

echo 'Huidige key: ' . $cur_key . '<br />';

/* Sla de value van de huidige key op */
$cur_val = current($_SESSION['q_ids']);

/* volgende vraag opslaan */
next($_SESSION['q_ids']);
$_SESSION['next_q_id'] = key($_SESSION['q_ids']);

echo 'Volgende: ' . $_SESSION['next_q_id'];


/* Formulier */
?>

<h2>Dit is vraag <?php echo $cur_val; ?></h2>
<form method="post" action="">
    <input type="submit">
</form>

<?php
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
?>


<br/><a href="resetb">Reset</a>

<?php
/* resetb.php */
// session_destroy();
// header("Location: " . URL . "testb");

?>
 
Jeroen VD

Jeroen VD

22/07/2013 20:18:26
Quote Anchor link
enige aamerkingen die ik nog heb:
-gebruik niet empty(), maar isset() (of in dit geval !isset())
-het is <br>, niet <br />, dat is XHTML

al ben ik de logica van je script niet nagegaan, moet ik toegeven
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.