Kurt G. kom med denne ide:
if (!isset($_SESSION['progress')) || ($_SESSION['progress'] == 0)) {
$_SESSION[progress'] = 1;
}
switch ($_SESSION['progress']) {
case 2 :
if (success behandl data fra form1) {
$_SESSION['progress'] = $_SESSION['progress'] << 1;
}
break;
case 4 :
if (success behandl data fra form2) {
$_SESSION['progress'] = $_SESSION['progress'] << 1;
}
break;
case 8 :
if (success behandl data fra form3) {
$s_SESSION['progress'] = $_SESSION['progress'] << 1;
}
break;
case 16 :
if (success behandl data fra form4) {
$_SESSION['progress'] = $_SESSION['progress'] << 1;
}
break;
case 32 :
if (success behandl data fra form5) {
$_SESSION['progress'] = $_SESSION['progress'] << 1;
}
break;
// osv - bemærk at case-værdien skal ganges med 2 hver gang
// Første gang checkes ikke - der skal blot vises første form
}
switch ($_SESSION['progress']) {
case 1 :
// Vis form1
break;
case 2 :
// vis form2
break;
case 4 :
// vis form3
break;
case 8 :
// vis form4
break;
case 16 :
// vis form5
break;
case 32 :
// vis form6
break;
// osv - bemærk at case-værdien skal ganges med 2 hver gang
// Sidste gang skal formentlig vises noget andet end en form...
}
Shift left operationen:
$session['progress'] = $session['progress'] << 1;
kan også udføres som en mulitplikation med 2:
$_SESSION['progress'] *= 2;
Simplere, men midre læsevenligt.
Man kan udføre det samme med et hidden-field i formene. Man skal så
bare bruge den læste værdi i stedet for $_SESSION, og man skal sætte
værdien, når formen skal vises.
Strengt taget behøver man heller ikke bruge et egentligt flag, men kan
bruge "almindelig" talrækkefølge. Man skal så lægge een til i stedet
for shift left (eller gange med 2) - det er så bare ikke det der
forstås (jeg forstår) ved et flag; hvilket for så vidt og for opgaven,
vel er ligegyldigt. :-Z