Checkboxen

Wolfsbein

Erfahrenes Mitglied
Hallo
ich habe hier ein Problem mit Checkboxen. Die Suchfunktion habe ich natürlich schon bemüht,
leider ohne Erfolg.
Code:
&nbsp;<input type="checkbox" name="check[]" /> <b>Halbpension</b><br />
    &nbsp;<input type="checkbox" name="check[]" /> <b>Vollpension</b><br />
    &nbsp;<input type="checkbox" name="check[]" /> <b>Fr&uuml;hst&uuml;ck
    </b><br />
PHP:
// überprüfung ist wahrscheinlich falsch?
if(!empty($_POST['check'][0]))
{
    $hp = 1;
}
else {$hp = 0;}
if(!empty($_POST['check'][1]))
{
    $vp = 1;
}
else {$hp = 0;}
if(!empty($_POST['check'][2]))
{
    $break = 1;
}
else {$break = 0;}
// neue zuweisung
echo '...
&nbsp;<input type="checkbox" name="check[]" value="hp" ';
    if($hp==1) {echo 'checked="checked" readonly="readonly"';}
    else {echo 'readonly="readonly"';}
    echo ' /> <b>Halbpension</b><br />
    &nbsp;<input type="checkbox" name="check[]" value="vp" ';
    if($vp==1) {echo 'checked="checked" readonly="readonly"';}
    else {echo 'readonly="readonly"';}
    echo ' /> <b>Vollpension</b><br />
    &nbsp;<input type="checkbox" name="check[]" value="break" ';
    if($break==1) {echo 'checked="checked" readonly="readonly"';}
    else {echo 'readonly="readonly"';}
    echo ' /> <b>Fr&uuml;hst&uuml;ck
    </b><br />';
Das seltsame daran ist, dass es korrekt funktioniert wenn ich alle drei anklicke, oder keines anklicke.
Wenn ich nur die ersten beiden anklicke, dann geht es auch. Bei den letzten beiden werden aber dann
auf der zweiten Seite die ersten beiden Boxen mit einem Häckchen versehen. Wenn ich nur eines anklicke,
dann ist im zweiten Schritt gar nichts markiert.
Ich weiß jetzt wirklich nicht mehr wo mein Fehler liegen könnte. Danke für Hilfe.
 
So hab ich es jetzt mal auf ein vernünftiges Ergebnis gebracht:
PHP:
<form action="<?=$PHP_SELF;?>" method="post">
	<input type="checkbox" name="check[]" value="hp" />
	<input type="checkbox" name="check[]" value="vp" />
	<input type="checkbox" name="check[]" value="break" />
	<input type="submit" name="submit" value="Submit" />
</form>
<?
// überprüfung ist wahrscheinlich falsch?
if($_POST['submit']) {
	print_r($_POST['check']);
	print "<br />\n";
	for($i = 0; $i < count($_POST['check']); $i++) {
		print $_POST['check'][$i]."<br />\n";
		
		if($_POST['check'][$i] == "hp") {
			$hp = 1;
		} elseif($_POST['check'][$i] == "vp") {
			$vp = 1;
		} elseif($_POST['check'][$i] == "break") {
			$break = 1;
		} else {
			$$_POST['check'][$i] = 0;
		}
	}

	print $hp."<br />\n".$vp."<br />\n".$break."<br />\n";

// neue zuweisung
print '&nbsp;<input type="checkbox" name="check[]" value="hp" ';
    if($hp == 1) {
    	echo 'checked="checked" readonly="readonly""';
    } else {
    	echo 'readonly="readonly"';
    }
    
    echo ' /> <b>Halbpension</b><br />
    &nbsp;<input type="checkbox" name="check[]" value="vp" ';
    
    if($vp == 1) {
    	echo 'checked="checked" readonly="readonly"';
    } else {
    	echo 'readonly="readonly"';
    }
    
    echo ' /> <b>Vollpension</b><br />
    &nbsp;<input type="checkbox" name="check[]" value="break" ';
    
    if($break == 1) {
    	echo 'checked="checked" readonly="readonly"';
    } else {
    	echo 'readonly="readonly"';
    }
    
    echo ' /> <b>Fr&uuml;hst&uuml;ck
    </b><br />';
}
?>
 
Danke das hat mir weitergeholfen. Der Vergleich mit dem Wert ist natürlich einleuchtend. Ich möchte noch wissen, ob mein Weg grundsätzlich falsch war, oder ob nur das empty() falsch ist.
 
janz einfach :-)
Bei Checkboxen kann man nicht nach dem Index gehen.

Der Grund liegt darin wie die Arrayvar gefüllt wird:

Nur Angaben die angekreutzt sind werden in die Var gefüllt die anderen nicht. Dadurch verschiebt sich immer der index nur der Inhalt darf bewertet werden.

Wenn also nur vp angekreutz wird dann haste ein array mit einem eintrag.
check[0] ist denn vp

wenn vp und hp angekreuzt sind
ist der Inhalt der:

check[0] ist hp
check[1] ist vp

oder anders ausgedrückt: der erste Check landet im index 0 der nächste angekreutzte im index 1 usw ...
und die nicht angekreutzren werden einfach nicht übertragen

sogesehen war die abfrage nach emty falsch
 
Zurück