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?

<?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>';
?>
Waar is je session_start(); ?
De sessie wordt reeds in index.php gestart. Hoezo?
Het is natuurlijk mogelijk dat je die vergeten bent, en dat daardoor niet alles wordt weergegeven.
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:


<?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");
?>
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

Reageren