mirror of
https://gitlab.com/harald.mueller/aktuelle.kurse.git
synced 2024-10-19 18:05:02 +02:00
120 lines
3.2 KiB
PHP
120 lines
3.2 KiB
PHP
|
<?PHP
|
|||
|
|
|||
|
function setBit(&$bitField,$n) {
|
|||
|
|
|||
|
// Ueberprueft, ob der Wert zwischen 0-33 liegt
|
|||
|
// $n ist hier der Wert der aktivierten Checkbox, z.B. 15
|
|||
|
// Somit waere hier die 15. Checkbox aktiviert
|
|||
|
if(($n < 0) or ($n > 32)) return false;
|
|||
|
|
|||
|
|
|||
|
// Bit Shifting
|
|||
|
// Hier wird nun der Binaerwert fuer die aktuelle Checkbox gesetzt.
|
|||
|
// In unserem Beispiel wird hier nun die 15. Stelle von rechts auf 1 gesetzt
|
|||
|
// 100000000000000 <-- Dieses entspricht der Zahl 16384
|
|||
|
// | ist nicht das logische ODER sondern das BIT-oder
|
|||
|
$bitField |= (0x01 << ($n-1));
|
|||
|
return true;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
function clearBit(&$bitField,$n) {
|
|||
|
|
|||
|
// Loescht ein Bit oder ein Bitfeld
|
|||
|
// & ist nicht das logische UND sondern das BIT-and
|
|||
|
$bitField &= ~(0x01 << ($n-1));
|
|||
|
return true;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
function isBit($bitField,$n) {
|
|||
|
|
|||
|
return (($bitField & (0x01 << ($n-1))));
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Die Menge der Checkboxen sollten hier angegeben werden
|
|||
|
*/
|
|||
|
if( $_POST["checkboxen"] < 1 || $_POST["checkboxen"] > 32)
|
|||
|
$checkboxen = 32;
|
|||
|
else
|
|||
|
$checkboxen = $_POST["checkboxen"];
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Hier sollte der Wert aus einer Datenbank geholt werden
|
|||
|
* Dies sollte aber nur beim ersten Aufruf geschehen
|
|||
|
*/
|
|||
|
|
|||
|
if( !isset($_POST["checkbox_name"]) && !is_array($_POST["checkbox_name"]) && !isset($_POST["CheckboxenBinaer"]) ){
|
|||
|
// Select der Datenbankabfrage hier einfuegen und den Wert
|
|||
|
// in $wertAbfrage speichern
|
|||
|
$wertAbfrage = 0;
|
|||
|
|
|||
|
// Ueberpruefung ob ein Wert vorhanden ist
|
|||
|
if( !empty($wertAbfrage) )
|
|||
|
$bitmask = $wertAbfrage;
|
|||
|
else
|
|||
|
$bitmask = 0x0;
|
|||
|
|
|||
|
// Durchlaeuft schrittweise alle Elemente von $bitmask.
|
|||
|
foreach(range(1,$checkboxen) as $position){
|
|||
|
|
|||
|
// Ueberprueft, ob die x-te Stelle eine 1 ist und speichert bei Erfolg
|
|||
|
// ein "checked" in das Arrayelement fuer die x-te Position.
|
|||
|
// Beispiel: $position ist 6. Nun wird die 6.Stelle von rechts innerhalb
|
|||
|
// der Variablen $bitmask auf eine 1 hin ueberprueft. Steht an dieser Stelle
|
|||
|
// eine 1, so wird in $formCheck[6] ein "checked" gespeichert.
|
|||
|
// Somit wird die sechste Checkbox aktiviert.
|
|||
|
if(isBit($bitmask,$position)) {
|
|||
|
$formCheck[$position] = " checked";
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else{
|
|||
|
|
|||
|
// Das Formular wurde versendet und die Checkboxen muessen
|
|||
|
// nun konvertiert werden.
|
|||
|
|
|||
|
// Wurde ueberhaupt eine Checkbox aktiviert?
|
|||
|
If( isset($_POST["checkbox_name"]) ){
|
|||
|
|
|||
|
foreach($_POST["checkbox_name"] as $position){
|
|||
|
|
|||
|
// Setzen der einzelnen Checkboxen in der Binaerstruktur
|
|||
|
setBit($bitmask,$position);
|
|||
|
|
|||
|
// Ist die Checkbox aktiviert?
|
|||
|
if(isBit($bitmask,$position)) {
|
|||
|
$formCheck[$position] = " checked";
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
// Hier kann nun auch der Wert wieder in die Datenbank geschrieben werden
|
|||
|
$neuerWert = $bitmask;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
?>
|
|||
|
|
|||
|
<form name="form" method="post" action="<?PHP echo $PHP_SELF; ?>">
|
|||
|
<?PHP
|
|||
|
echo 'Der Dezimalwert f<>r diese Anordnung ist: <b>' . $bitmask . '</b><br>';
|
|||
|
echo 'Der Bin<69>rwert f<>r diese Anordnung ist: <b>' . decbin($bitmask) . '</b><br>';
|
|||
|
for($x=1;$x<=$checkboxen;$x++){
|
|||
|
?>
|
|||
|
|
|||
|
<input type="checkbox" name="checkbox_name[]" value="<?PHP echo $x; ?>" <?PHP echo $formCheck[$x]; ?>>
|
|||
|
|
|||
|
<?PHP
|
|||
|
}
|
|||
|
?>
|
|||
|
<br>Menge der Checkboxen <input type="text" name="checkboxen" value="<?PHP echo $_POST["checkboxen"]; ?>">
|
|||
|
<br><input type="submit" name="CheckboxenBinaer" value="Send"><br>
|
|||
|
</form>
|