Checkboxen serialisieren und wieder zurück = Problem mit der Ausgabe.

cofter

Erfahrenes Mitglied
Hallo Tutorials.de :)

Ich arbeite derzeit an einer Seite wo der User verschiedene Daten im Profil angeben kann.
Die meisten Daten sind in Form von checkboxen im Formular.
Die Daten werden serialisiert und in einer SQL Datenbank gespeichert.
Soweit so gut.

Ich lese nun die Daten aus der SQL-Datenbank und mache unserialize.
Danach möchte ich die ausgewählten Checkboxen mit "checked" belegen.
Leider habe ich nun das Problem das wenn mehrere angewählt wurden das Formular auch dementsprechen oft wiederholt wird was so nicht gewollt ist. :-/

Nun hoffe ich ihr könnte mir einen Schups in die richtige Richtung geben. :)

Zur erkärung hier der Code:


PHP:
<?php
// das Array 
$piercingValuesArr = array("keine" => 10869,"Brustwarze/n" => 10867,"Bauchnabel" => 10866,"Intim" => 10865,"Ohr" => 10864,"Nase" => 10863,"Lippe / Zunge"=> 10862,"Sonstige / Andere" => 11134);

// $profileArr['profilePiercing'] <= enthält die Daten aus der Datenbank welche mit unserialize wieder in ein Array umwandelt.
$unserialize = unserialize($profileArr['profilePiercing']);
											
foreach ($piercingValuesArr as $piercingArr => $value) {
    foreach ($unserialize as $serialValue) {
        ?>
	<label>
		<input name="profilePiercing[]" value="<?php echo $value; ?>" type="checkbox" <?php if($serialValue == "$value"){ echo "checked"; }?>><?php echo $piercingArr;?>
        </label><br>
	<?php
	}
}
?>

Die Ausgabe ist bis jetzt das wenn 3 Checkboxen ausgewählt sind wird auch jede Checkbox 3 mal ausgegeben.

Ich komme einfach nicht auf die Lösung und hoffe auf Eure Hilfe. :)

mfg
Cofter
 
Bei 2 ausgewählten Checkboxen enthält..

PHP:
$unserialize => array(2) { [0]=>  string(5) "10866" [1]=>  string(5) "10864" }

..die Values der Checkboxen
 
Der HTML-Code sieht dann wie folgt aus.. ich hoffe man sieht das Problem was ich habe. :)
PHP:
<label>
<input name="profilePiercing[]" value="10869" type="checkbox">keine												</label><br>
																	<label>
<input name="profilePiercing[]" value="10869" type="checkbox">keine												</label><br>

																	<label>
<input name="profilePiercing[]" value="10867" type="checkbox">Brustwarze/n											</label><br>
																	<label>
<input name="profilePiercing[]" value="10867" type="checkbox">Brustwarze/n												</label><br>
<label>
<input name="profilePiercing[]" value="10866" checked="checked" type="checkbox">Bauchnabel												</label><br>
																	<label>
<input name="profilePiercing[]" value="10866" type="checkbox">Bauchnabel												</label><br>
																	<label>
<input name="profilePiercing[]" value="10865" type="checkbox">Intim												</label><br>
																	<label>
<input name="profilePiercing[]" value="10865" type="checkbox">Intim												</label><br>
																	<label>
<input name="profilePiercing[]" value="10864" type="checkbox">Ohr												</label><br>

																	<label>
<input name="profilePiercing[]" value="10864" checked="checked" type="checkbox">Ohr												</label><br>
																	<label>
<input name="profilePiercing[]" value="10863" type="checkbox">Nase												</label><br>
																	<label>
<input name="profilePiercing[]" value="10863" type="checkbox">Nase												</label><br>
																	<label>
<input name="profilePiercing[]" value="10862" type="checkbox">Lippe / Zunge												</label><br>
																	<label>
<input name="profilePiercing[]" value="10862" type="checkbox">Lippe / Zunge												</label><br>
																	<label>
<input name="profilePiercing[]" value="11134" type="checkbox">Sonstige / Andere												</label><br>
																	<label>
<input name="profilePiercing[]" value="11134" type="checkbox">Sonstige / Andere												</label><br>
 
Dein fehler sind die Schleife innerhalb der Schleife Somit hast du count($unserialize)*count($piercingValuesArr) Ausgaben.
Die innere Schleife solltest ud ersetzen

PHP:
<?php

foreach ($piercingValuesArr as $piercingArr => $value) {
	$checked = in_array($value, $unserialize) ? 'checked="checked"' : '';
	echo "
    <label>
        <input name='profilePiercing[]' value='{$value}' type='checkbox' {$checked} />{$piercingArr}
    </label><br>
";
    }
}
?>
 
Zuletzt bearbeitet:
Zurück