Checkboxen dynamisch darstellen

chill0r55555

Mitglied
Hallo Miteinander,

ich habe ein Problem, an dem Ich mir gerade ein bisschen die zähne ausbeiße. Undzwar möchte
ich folgendes realisieren....

Ich habe einen Integerwert den ich mit einer PHP Abfrage aus einer Datenbank hole,
und in die Variable $dbwert speichere. Also sagen wir als Beispiel "130". Nun
wandle ich die Dezimalzahl in einer Binärzahl um. Danach drehe ich den String um (strrev).

Int=130
Binär=10000010
Ungekehrt Binär=01000001

Dann habe ich die Variable $boxes. Mit dieser lege ich fest wieviele Checkboxen ich
darstellen möchte. Im Code unten sind das z.B. "15". Das darstellen ist kein Problem.

Mit der for-Schleife habe ich dann 15 Checkboxen die alle NICHT angeklickt sind.

Ich möchte nun anhand von dem umgekehrten Binärwert sagen welche Boxen angeklickt sind und welche
nicht.

Hier ein BSP:

1-2-3-4-5-6-7-8-9-10-11-12-13-14-15 //checkboxen
--X-------X------------------------ // 01000001
X-X-X------------------------------ // 111

Es sollen also immer alle Checkboxen angehakt sein, wenn der ungekehrte Binärstring eine 1 enthält.
Nun ist es aber auch so, dass der String unterschiedlich lang sein kann wie Ihr im Beispiel seht.


Nun muss wenn man eine Box anklickt ein neuer Wert genertiert und in die Datenbank geschrieben werden.

Bsp.:

- Nur die erste Box wird angeklickt. // 1
- 1.Box und 5. Box geklickt // 10001



PHP:
.....
$boxes=15;


$eingabe = decbin($dbwert); //$dbwert ist eine Integer Zahl, zb. 130 oder 8192
$eingabe = strrev($eingabe);
$laenge=strlen($eingabe);

for ($c=0;$c<$boxes;$c++){
  echo "<input type='Checkbox' name='box'".$c.">";

}



Ich wäre euch sehr dankbar wenn ihr mir dabei helfen könntet. Ich hoffe das meine Beschreibung verständlich
war.



MfG






EDIT:
Also das die Checkboxen angehakt sind wenn eine 1 in $eingabe vorhanden ist, habe ich hinbekommen:

PHP:
.....
$boxes=15;


$eingabe = decbin($dbwert); //$dbwert ist eine Integer Zahl, zb. 130 oder 8192
$eingabe = strrev($eingabe);
$laenge=strlen($eingabe);

for ($c=0;$c<$boxes;$c++){
  if ($eingabe[$c]==1){
    echo "<input type='Checkbox' name='box'".$c." checked>";
  }
  else{
    echo "<input type='Checkbox' name='box'".$c.">";
  }

}
 
Zuletzt bearbeitet:
Hey,
so sollte es gehen:
PHP:
$boxes  = 15;
$dbwert = 130;

$eingabe = decbin($dbwert); //$dbwert ist eine Integer Zahl, zb. 130 oder 8192
$eingabe = strrev($eingabe);
$laenge  = strlen($eingabe)-1;

for($c = 0; $c < $boxes; $c++)
{
  if(($c <= $laenge) && ($eingabe{$c} == 1))
  {
    echo '<input type="checkbox" name="box['.$c.']" checked="checked" />';
  }
  else
  {
    echo '<input type="checkbox" name="box['.$c.']" />';
  }
}
 
Hi,

danke für deine Hilfe und dein Skript ;-). Ist glaub ich die saubere Lösung wie meins.
So nun habe ich natürlich noch bisschen dran gebastelt. Es funktioniert alles. Nur eins noch nicht. Undzwar schreibt er mir in das Feld "wertbin" den binärwert rein. Ich habe dann hinten lauter Nullen anhängen, die würde ich gerne abschneiden.

Bsp:

"100010000000" steht in Textfeld "wertbin". Da hinter der zweiten 1 keine 1 mehr kommt sollen also die Nullen abgeschnitten werden. Dann würde ich "10001" erhalten. Nur mir fällt nichts ein wie ich das realisieren kann:confused:


PHP:
<script LANGUAGE="JavaScript">
	function getValue(laenge)
	{
	  var name="box";
	  sum = "";
	  for (var i=0; i < laenge; i++) {
		 if (document.getElementById(name + i).checked == true){
			sum = sum + "1";
		 } 
		 else{
			sum = sum + "0";
		 } 
	  }
	document.formular.wertbin.value=sum;
	}
	function bin2dec (feld)
	{
		var bin = feld + '';
		var digits = bin.split('');
		digits.reverse();
		var dec = 0;
		for (var i = 0; i < digits.length; i++)
		{
			var result = digits[i] * Math.pow(2, i);
			dec += result;
		}
		document.formular.wertdez.value=dec;
	}	
</script>

<?php
	$boxes  = 15;
	echo "boxes: ".$boxes."<br>";
	$dbwert = 130;
	echo "dbwert: ".$dbwert."<br>";

	$eingabe = decbin($dbwert); //$dbwert ist eine Integer Zahl, zb. 130 oder 8192
	echo "dbwert binär: ".$eingabe."<br>";
	$eingabe = strrev($eingabe);
	echo "dbwert binär rev: ".$eingabe."<br>";
	$laenge  = strlen($eingabe)-1;
	echo "länge von dbwert binär: ".$laenge."<br>";
	echo "<form name=formular>";
	for($c = 0; $c < $boxes; $c++)
	{
	  if(($c <= $laenge) && ($eingabe{$c} == 1))
	  {
	    echo "<input type='checkbox' name='box[".$c."]' id='box".$c."' onchange='getValue(\"".$boxes."\"),bin2dec(document.formular.wertbin.value);' checked='checked' />";
	  }
	  else
	  {
	    echo "<input type='checkbox' name='box[".$c."]' id='box".$c."' onchange='getValue(\"".$boxes."\"),bin2dec(document.formular.wertbin.value);' />";
	  }
	}
	echo "<br><input type=text name=wertbin><br><input type=text name=wertdez>";
	echo "</form>";
?>
 
Hi,
sorry das ich mich jetzt erst melde aber mein PC war kaputt. Ist die HDD gecrasht:-(

Ich hab das Skript jetzt fertig bekommen. Danke für deine Hilfe.
 
Zurück