aktuelle.kurse/m133/4_Modulinhalte_und_Uebungen/00-Anwendungen-Beispiele-Uebungen/PHP_Referenz/tipps_tricks/formulare/checkboxen_binaer.html
Harald G. Mueller cdff097ef7 muh
2022-03-17 11:19:26 +01:00

471 lines
31 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Komfortable Checkboxen-Verwaltung mittels Binärwerte</title>
<link rel="stylesheet" type="text/css" href="../../src/self.css">
<meta name="description" content="Erzeugt aus gegebenen Werten ein Array">
<meta name="keywords" content="SELFPHP, PHP, Array-Funktionen, array">
<meta name="author" content="Damir Enseleit, mail@selfphp3.de">
<meta name="DC.Contributer" content="Matthias Hupp, m.hupp@selfphp3.de">
<meta name="DC.Publisher" content="Damir Enseleit, mail@selfphp3.de">
<meta name="DC.Date" content="2001-08-06T12:18+01:00">
<meta name="DC.Identifier" content="http://www.selfphp3.de/funktionsreferenz/array_funktionen/array.php">
<meta name="DC.Language" content="de">
<meta name="DC.Rights" content="../../editorial/index.php">
<meta name="SELF.Firstdate" content="2001-08-06T12:18+01:00">
<meta name="SELF.Version" content="1">
<meta name="SELF.Pagetype" content="Information">
<meta name="SELF.Path" content="SELFPHP == ../../index.php // Funktionsreferenz == ../index.php // Array-Funktionen == index.php">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#AA5522" vlink="#772200" alink="#000000">
<table cellpadding="4" cellspacing="0" border="0" width="100%">
<tr>
<td bgcolor="#FFEEDD" class="nav"><a class="an" name="top"><img src="../../src/refkap.gif" width="16" height="13" border="0" alt="Teil von"></a>
<a href="../../index.html"><b>SELFPHP</b></a>/<a href="../../navigation/index.html">Navigationshilfen</a>
<img src="../../src/refkap.gif" width="16" height="13" border="0" alt="Teil von">
<a href="../index.html"><b>Tipps &amp; Tricks</b></a> <img src="../../src/refkap.gif" width="16" height="13" border="0" alt="Teil von">
<a href="index.html"><b>Formulare</b></a></td>
</tr>
</table>
<table cellpadding="4" cellspacing="0" border="0" width="100%">
<tr>
<td bgcolor="#EEEEEE" class="doc" width="110"><img src="../../src/logo.gif" width="106" height="109" border="0" alt="SELFPHP"></td>
<td bgcolor="#EEEEEE" class="doc" valign="bottom" width="50%">
<h2>Komfortable Checkboxen-Verwaltung
mittels Bin&auml;rwerte</h2>
<td bgcolor="#EEEEEE" class="doc" valign="bottom" width="50%">&nbsp;
<tr>
<td bgcolor="#EEEEEE" class="doc" valign="top" align="center"> <img src="../../src/dokx.gif" width="30" height="20" vspace="6" border="0" alt="Informationsseite">
</td>
<td bgcolor="#FFFFFF" valign="top" nowrap colspan="2">
<p> <img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten">&nbsp;<a href="#autor"><b>Autor</b></a><br>
<img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten">&nbsp;<a href="#beispiel"><b>Beispiel</b></a><br>
<img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten">&nbsp;<a href="#beschreibung"><b>Beschreibung</b></a><br>
<img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten">&nbsp;<a href="#fazit"><b>Fazit</b></a><br>
<img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten">&nbsp;<a href="#download"><b>Download</b></a><br>
</p>
</td>
</tr>
<tr>
<td colspan=3 bgcolor="#EEEEEE" class="doc"><a href="#bottom"><img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a>&#160;</td>
</tr>
</table>
<h2 class="Sh2"><a class="an" name="autor">Autor</a></h2>
<table width="100%" cellpadding=10><tr>
<td class="xmpcode" bgcolor="#E4EEFF"><b>Name:</b> Damir Enseleit<br>
<b>Email:</b> <a href="mailto:mail@selfphp3.de">mail@selfphp3.de</a><br>
<b>Website:</b> <a href="http://www.selfphp.info" target="_blank">http://www.selfphp.info</a></td>
</tr></table>
<p>&nbsp;</p>
<table bgcolor="#EEEEEE" class="doc" width="100%"><tr><td>
<a href="#top"><img src="../../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a>&#160;
</td></tr></table>
<h2 class="Sh2"><a class="an" name="beispiel">Beispiel</a></h2>
<img src="../../src/serverdok.gif" width="15" height="10"> <a href="http://www.selfphp.com/tipps_tricks/formulare/checkboxen_binaer_beispiel.php" target="_blank"><b>Anzeigebeispiel:
So sieht's aus (Online)</b></a> <br>
<br>
<table width="100%" cellpadding=10 height="66">
<tr>
<td class="xmpcode" bgcolor="#E4EEFF" valign="top">
<code><font color="#000000">
<font color="#0000BB">&lt;?PHP
<br />
<br /></font><font color="#007700">function&nbsp;</font><font color="#0000BB">setBit</font><font color="#007700">(&amp;</font><font color="#0000BB">$bitField</font><font color="#007700">,</font><font color="#0000BB">$n</font><font color="#007700">)&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Ueberprueft, ob der Wert zwischen 0-33 liegt
<br />&nbsp;&nbsp;&nbsp;&nbsp;// $n ist hier der Wert der aktivierten Checkbox, z.B. 15
<br />&nbsp;&nbsp;&nbsp;&nbsp;// Somit waere hier die 15. Checkbox aktiviert
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if((</font><font color="#0000BB">$n&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">0</font><font color="#007700">)&nbsp;or&nbsp;(</font><font color="#0000BB">$n&nbsp;</font><font color="#007700">&gt;&nbsp;</font><font color="#0000BB">32</font><font color="#007700">))&nbsp;return&nbsp;</font><font color="#0000BB">false</font><font color="#007700">;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Bit Shifting
<br />&nbsp;&nbsp;&nbsp;&nbsp;// Hier wird nun der Binaerwert fuer die aktuelle Checkbox gesetzt.
<br />&nbsp;&nbsp;&nbsp;&nbsp;// In unserem Beispiel wird hier nun die 15. Stelle von rechts auf 1 gesetzt
<br />&nbsp;&nbsp;&nbsp;&nbsp;// 100000000000000 &lt;-- Dieses entspricht der Zahl 16384
<br />&nbsp;&nbsp;&nbsp;&nbsp;// | ist nicht das logische ODER sondern das BIT-oder
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$bitField&nbsp;</font><font color="#007700">|=&nbsp;(</font><font color="#0000BB">0x01&nbsp;</font><font color="#007700">&lt;&lt;&nbsp;(</font><font color="#0000BB">$n</font><font color="#007700">-</font><font color="#0000BB">1</font><font color="#007700">));
<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000BB">true</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />}
<br />
<br />function&nbsp;</font><font color="#0000BB">clearBit</font><font color="#007700">(&amp;</font><font color="#0000BB">$bitField</font><font color="#007700">,</font><font color="#0000BB">$n</font><font color="#007700">)&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Loescht ein Bit oder ein Bitfeld
<br />&nbsp;&nbsp;&nbsp;&nbsp;// &amp; ist nicht das logische UND sondern das BIT-and
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$bitField&nbsp;</font><font color="#007700">&amp;=&nbsp;~(</font><font color="#0000BB">0x01&nbsp;</font><font color="#007700">&lt;&lt;&nbsp;(</font><font color="#0000BB">$n</font><font color="#007700">-</font><font color="#0000BB">1</font><font color="#007700">));
<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000BB">true</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />}
<br />
<br />function&nbsp;</font><font color="#0000BB">isBit</font><font color="#007700">(</font><font color="#0000BB">$bitField</font><font color="#007700">,</font><font color="#0000BB">$n</font><font color="#007700">)&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Ist die x-te Stelle eine 1?
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">return&nbsp;((</font><font color="#0000BB">$bitField&nbsp;</font><font color="#007700">&amp;&nbsp;(</font><font color="#0000BB">0x01&nbsp;</font><font color="#007700">&lt;&lt;&nbsp;(</font><font color="#0000BB">$n</font><font color="#007700">-</font><font color="#0000BB">1</font><font color="#007700">))));
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />}
<br />
<br /></font><font color="#FF8000">/*
<br /> * Die Menge der Checkboxen sollten hier angegeben werden
<br /> */
<br /></font><font color="#007700">if(&nbsp;</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"checkboxen"</font><font color="#007700">]&nbsp;&lt;&nbsp;</font><font color="#0000BB">1&nbsp;</font><font color="#007700">||&nbsp;</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"checkboxen"</font><font color="#007700">]&nbsp;&gt;&nbsp;</font><font color="#0000BB">32</font><font color="#007700">)
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$checkboxen&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">32</font><font color="#007700">;
<br />else
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$checkboxen&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"checkboxen"</font><font color="#007700">];
<br />
<br />
<br /></font><font color="#FF8000">/*
<br /> * Hier sollte der Wert aus einer Datenbank geholt werden
<br /> * Dies sollte aber nur beim ersten Aufruf geschehen
<br /> */
<br />
<br /></font><font color="#007700">if(&nbsp;!isset(</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"checkbox_name"</font><font color="#007700">])&nbsp;&amp;&amp;&nbsp;!</font><font color="#0000BB">is_array</font><font color="#007700">(</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"checkbox_name"</font><font color="#007700">])&nbsp;&amp;&amp;&nbsp;!isset(</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"CheckboxenBinaer"</font><font color="#007700">])&nbsp;){
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Select der Datenbankabfrage hier einfuegen und den Wert
<br />&nbsp;&nbsp;&nbsp;&nbsp;// in $wertAbfrage speichern
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$wertAbfrage&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">0</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Ueberpruefung ob ein Wert vorhanden ist
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(&nbsp;!empty(</font><font color="#0000BB">$wertAbfrage</font><font color="#007700">)&nbsp;)
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$bitmask&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$wertAbfrage</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;else
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$bitmask&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">0x0</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Durchlaeuft schrittweise alle Elemente von $bitmask.
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">foreach(</font><font color="#0000BB">range</font><font color="#007700">(</font><font color="#0000BB">1</font><font color="#007700">,</font><font color="#0000BB">$checkboxen</font><font color="#007700">)&nbsp;as&nbsp;</font><font color="#0000BB">$position</font><font color="#007700">){
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Ueberprueft, ob die x-te Stelle eine 1 ist und speichert bei Erfolg
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ein "checked" in das Arrayelement fuer die x-te Position.
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Beispiel: $position ist 6. Nun wird die 6.Stelle von rechts innerhalb
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// der Variablen $bitmask auf eine 1 hin ueberprueft. Steht an dieser Stelle
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// eine 1, so wird in $formCheck[6] ein "checked" gespeichert.
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Somit wird die sechste Checkbox aktiviert.
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(</font><font color="#0000BB">isBit</font><font color="#007700">(</font><font color="#0000BB">$bitmask</font><font color="#007700">,</font><font color="#0000BB">$position</font><font color="#007700">))&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$formCheck</font><font color="#007700">[</font><font color="#0000BB">$position</font><font color="#007700">]&nbsp;=&nbsp;</font><font color="#DD0000">" checked"</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />}
<br />else{
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Das Formular wurde versendet und die Checkboxen muessen
<br />&nbsp;&nbsp;&nbsp;&nbsp;// nun konvertiert werden.
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;// Wurde ueberhaupt eine Checkbox aktiviert?
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">If(&nbsp;isset(</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"checkbox_name"</font><font color="#007700">])&nbsp;){&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach(</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"checkbox_name"</font><font color="#007700">]&nbsp;as&nbsp;</font><font color="#0000BB">$position</font><font color="#007700">){&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Setzen der einzelnen Checkboxen in der Binaerstruktur
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">setBit</font><font color="#007700">(</font><font color="#0000BB">$bitmask</font><font color="#007700">,</font><font color="#0000BB">$position</font><font color="#007700">);
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Ist die Checkbox aktiviert?
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(</font><font color="#0000BB">isBit</font><font color="#007700">(</font><font color="#0000BB">$bitmask</font><font color="#007700">,</font><font color="#0000BB">$position</font><font color="#007700">))&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$formCheck</font><font color="#007700">[</font><font color="#0000BB">$position</font><font color="#007700">]&nbsp;=&nbsp;</font><font color="#DD0000">" checked"</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Hier kann nun auch der Wert wieder in die Datenbank geschrieben werden
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$neuerWert&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$bitmask</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />}
<br />
<br /></font><font color="#0000BB">?&gt;
<br /></font>
<br />&lt;form name="form" method="post" action="<font color="#0000BB">&lt;?PHP&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#0000BB">$PHP_SELF</font><font color="#007700">;&nbsp;</font><font color="#0000BB">?&gt;</font>"&gt;
<br /><font color="#0000BB">&lt;?PHP
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#DD0000">'Der Dezimalwert für diese Anordnung ist: &lt;b&gt;'&nbsp;</font><font color="#007700">.&nbsp;</font><font color="#0000BB">$bitmask&nbsp;</font><font color="#007700">.&nbsp;</font><font color="#DD0000">'&lt;/b&gt;&lt;br&gt;'</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">'Der Binärwert für diese Anordnung ist: &lt;b&gt;'&nbsp;</font><font color="#007700">.&nbsp;</font><font color="#0000BB">decbin</font><font color="#007700">(</font><font color="#0000BB">$bitmask</font><font color="#007700">)&nbsp;.&nbsp;</font><font color="#DD0000">'&lt;/b&gt;&lt;br&gt;'</font><font color="#007700">;
<br />&nbsp;&nbsp;&nbsp;&nbsp;for(</font><font color="#0000BB">$x</font><font color="#007700">=</font><font color="#0000BB">1</font><font color="#007700">;</font><font color="#0000BB">$x</font><font color="#007700">&lt;=</font><font color="#0000BB">$checkboxen</font><font color="#007700">;</font><font color="#0000BB">$x</font><font color="#007700">++){
<br /></font><font color="#0000BB">?&gt;
<br /></font>
<br />&lt;input type="checkbox" name="checkbox_name[]" value="<font color="#0000BB">&lt;?PHP&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#0000BB">$x</font><font color="#007700">;&nbsp;</font><font color="#0000BB">?&gt;</font>"&nbsp;<font color="#0000BB">&lt;?PHP&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#0000BB">$formCheck</font><font color="#007700">[</font><font color="#0000BB">$x</font><font color="#007700">];&nbsp;</font><font color="#0000BB">?&gt;</font>&gt;
<br />
<br /><font color="#0000BB">&lt;?PHP
<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">}
<br /></font><font color="#0000BB">?&gt;
<br /></font>&nbsp;&nbsp;&lt;br&gt;Menge der Checkboxen &lt;input type="text" name="checkboxen" value="<font color="#0000BB">&lt;?PHP&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"checkboxen"</font><font color="#007700">];&nbsp;</font><font color="#0000BB">?&gt;</font>"&gt;
<br />&nbsp;&nbsp;&lt;br&gt;&lt;input type="submit" name="CheckboxenBinaer" value="Send"&gt;&lt;br&gt;
<br />&lt;/form&gt;</font>
</code> </td>
</tr>
</table>
<p>&nbsp;</p>
<table bgcolor="#EEEEEE" class="doc" width="100%"><tr><td>
<a href="#top"><img src="../../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a>&#160;
</td></tr></table>
<h2 class="Sh2"><a class="an" name="beschreibung">Beschreibung</a></h2>
<table width="100%" cellpadding=10 height="156">
<tr>
<td class="xmpcode" bgcolor="#E4EEFF" height="57" valign="top">
<p>Wie speichert man z.B. 32 Checkboxen in einer Datenbank?<br>
Diese Frage stellt sich sehr oft bei der Programmierung und sicherlich
gibt es da <br>
verschiedene Ansatzm&ouml;glichkeiten. So k&ouml;nnte die Tabelle, in
der die Werte f&uuml;r die <br>
Checkboxen ( 1 oder 0, bzw. TRUE oder FALSE ) gespeichert werden, in 32
Spalten<br>
aufgeteilt werden. Dieses Technik ist aber eher die schlechteste Wahl,
da die Tabelle<br>
sehr schnell zu einem Giganten anwachsen w&uuml;rde.<br>
W&auml;re es nicht sch&ouml;n, wenn alle Checkboxenwerte in einer Spalte
gespeichert werden<br>
k&ouml;nnte?<br>
<br>
Dieses Beispiel zeigt wie es geht.<br>
Checkboxen k&ouml;nnen nur zwei Zust&auml;nde annehmen und sind daher
entweder <br>
aktiviert( TRUE bzw. 1 ) oder deaktiviert( FALSE bzw. 0 ). Dieses Merkmal
findet<br>
man auch in der Bin&auml;rdarstellung wieder und kann daher zur Verwendung
f&uuml;r diese<br>
Technik herangezogen werden. Bin&auml;rwerte werden nur durch die zwei
Zahlen 1 und 0<br>
dargestellt. <br>
Hat man z.B. 5 Checkboxen, von denen die erste, die zweite und die f&uuml;nfte
Checkbox <br>
aktiviert ist, so kann man dies auch mit folgender Schreibweise darstellen
- <b>11001</b>.<br>
Diese Darstellung sieht genau wie ein Bin&auml;rwert aus und w&uuml;rde
bei der Konvertierung<br>
in eine Dezimalzahl auch ein Ergebnis liefern.<br>
Um aber die Checkboxen auch in eine bin&auml;re Art zu bekommen, ist ein
kleiner <br>
Umstrukturierungsvorgang von N&ouml;ten. Bin&auml;rwerte werden grunds&auml;tzlich
von rechts her<br>
aufgebaut (was auch Sinn macht, da man f&uuml;r 0000000000001 auch direkt
1 schreiben k&ouml;nnte),<br>
die Checkboxen aber von links bzw. von oben.<br>
Daher muss man den Bin&auml;rwert einfach umdrehen und genau das erledigt
das Skript von selbst,<br>
da die Werte bereits von rechts her best&uuml;ckt werden. In unserem kleinen
Beispiel w&auml;re nun der<br>
Bin&auml;rwert <b>10011</b>. Diesen Bin&auml;rwert in eine Dezimalzahl
konvertiert, ergibt 19.<br>
Die Zahl 19 ist jetzt der Wert, der auch in die Datenbank gespeichert
wird. Er enth&auml;lt alle<br>
Informationen &uuml;ber die Aktivierungsart aller Checkboxen, da beim
Aufbau der Checkboxen die<br>
Zahl 19 wieder in ein Bin&auml;rwert konvertiert wird ( 10011 ).<br>
<br>
Allerdings m&uuml;ssen im Vorfeld die Checkboxen ein wenig angepasst werden.<br>
<b><br>
1.)</b> Die Checkboxen erhalten alle den gleichen Namen und werden somit
als Array<br>
&uuml;bermittelt. In unserem Fall heissen die Checkboxen alle <b>checkbox_name[]</b>
(wichtig<br>
sind hier die eckigen Klammern, da nur so ein Array aufgebaut wird).<br>
Somit kann man hier auch von einer Gruppe sprechen.<br>
<br>
<b>2.)</b> Alle Checkboxen werden im Value-Wert durchnummeriert (1- max.32).
Dieses ist<br>
ein wichtiger Punkt, da nur so die richtigen Checkboxen aktiviert oder
deaktiviert werden<br>
k&ouml;nnen. Zur Erinnerung, <b>nichtaktivierte</b> Checkboxen werden
nicht &uuml;bermittelt. Auch wenn<br>
Sie 32 Checkboxen haben und nur 16 aktivieren, so erhalten wir beim Absenden
auch nur<br>
ein Array mit 16 Elementen. Da wir aber als Value-Wert die &quot;Position&quot;
gespeichert haben, <br>
ist es ein leichtes die n&ouml;tigen Felder zu initialisieren.<br>
<br>
<b>3.)</b> Die Spalte f&uuml;r die Speicherung des Wertes in der Datenbank
muss auf Integer<br>
eingestellt werden.<br>
<br>
</p>
<p>Beispiel:<br>
Bei der Initialisierung unserer Variablen, setzen wir den Startwert auf
0. Wird nun das<br>
untenstehende Beispiel abgeschickt, so passiert folgendes. Bitte beachten
Sie aber,<br>
das bei den Durchl&auml;ufen die Checkboxen von links, w&auml;hrend die
Bin&auml;rwerte von rechts <br>
gelesen werden.<br>
<br>
</p>
<table width="606" border="0" cellspacing="3" cellpadding="0">
<tr>
<td width="97">
<div align="center"><b>0 </b></div>
</td>
<td width="98">
<div align="center"><b>1</b></div>
</td>
<td width="97">
<div align="center"><b>1</b></div>
</td>
<td width="99">
<div align="center"><b>0</b></div>
</td>
<td width="97">
<div align="center"><b>0</b></div>
</td>
<td width="97">
<div align="center"><b>1</b></div>
</td>
</tr>
<tr>
<td width="97"> Checkbox1
<input type="checkbox" name="checkbox2" value="checkbox">
</td>
<td width="98"> Checkbox2
<input type="checkbox" name="checkbox3" value="checkbox" checked>
</td>
<td width="97"> Checkbox3
<input type="checkbox" name="checkbox4" value="checkbox" checked>
</td>
<td width="99"> Checkbox4
<input type="checkbox" name="checkbox5" value="checkbox">
</td>
<td width="97"> Checkbox5
<input type="checkbox" name="checkbox6" value="checkbox">
</td>
<td width="97"> Checkbox6
<input type="checkbox" name="checkbox7" value="checkbox" checked>
</td>
</tr>
</table>
<p><u><br>
1.Durchlauf:</u> <br>
Checkbox1 ist deaktiviert und somit 0.<br>
In diesem Fall bleibt unser Wert bei 0, da der Startwert ja schon 0 war
und ein Bin&auml;rwert<br>
mit der Anordnung 00 auch als Dezimalzahl 0 ergeben w&uuml;rde.<br>
<u><br>
2.Durchlauf:</u> <br>
Checkbox2 ist aktiviert und somit 1.<br>
Unser Bin&auml;rwert wird nun von der rechten Seite her ver&auml;ndert.<br>
Die 2.Stelle des Bin&auml;rwertes wird auf 1 gesetzt.<br>
Der Wert ist nun 10<br>
<u><br>
3.Durchlauf:</u> <br>
Checkbox3 ist aktiviert und somit 1.<br>
Unser Bin&auml;rwert wird nun von der rechten Seite her ver&auml;ndert.<br>
Die 3.Stelle des Bin&auml;rwertes wird auf 1 gesetzt.<br>
Der Wert ist nun 110<br>
<u><br>
4.Durchlauf:</u> <br>
Checkbox4 ist deaktiviert und somit 0.<br>
In diesem Fall bleibt unser Wert bei 110. <br>
<u><br>
5.Durchlauf:</u> <br>
Checkbox5 ist deaktiviert und somit 0.<br>
In diesem Fall bleibt unser Wert bei 110. <br>
<u><br>
6.Durchlauf:</u> <br>
Checkbox6 ist aktiviert und somit 1.<br>
Unser Bin&auml;rwert wird nun von der rechten Seite her ver&auml;ndert.<br>
Die 6.Stelle des Bin&auml;rwertes wird auf 1 gesetzt. Somit erh&auml;lt<br>
auch nun die 4. und 5.Stelle Ihren Wert, jeweils die 0.<br>
Der Wert ist nun 100110<br>
<br>
Den Wert 100110 lassen wir uns nun mit der Funktion <a href="../../funktionsreferenz/mathematische_funktionen/bindec.html">bindec()</a>
als Dezimalzahl ausgeben <br>
und erhalten als Ergebnis die Zahl 38. Diese Zahl speichern wir nun in
unsere Tabelle ab. <br>
Das war es schon! <br>
Wir haben nun eine schlanke L&ouml;sung f&uuml;r ein grosses Problem.
In Zukunft<br>
wird unser Skript nur noch mit der einzelnen dezimalen Zahl arbeiten um
die Checkboxen<br>
zu best&uuml;cken.<br>
<br>
<b>Achtung!<br>
</b>Einen kleinen Haken gibt es aber. Wir k&ouml;nnen mit dieser Methode
nur max. 32 Checkboxen<br>
verwalten, da wir bei dieser Zahl an die Grenze eines Integer-Wert gehen.<br>
Gruppen k&ouml;nnen aber in rauhen Mengen erstellt werden.<br>
<br>
<br>
</p>
<br>
</td>
</tr>
</table>
<p>&nbsp;</p>
<table bgcolor="#EEEEEE" class="doc" width="100%"><tr><td>
<a href="#top"><img src="../../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a>&#160;
</td></tr></table>
<h2 class="Sh2"><a class="an" name="fazit">Fazit</a></h2>
<table width="100%" cellpadding=10 height="42">
<tr>
<td class="xmpcode" bgcolor="#E4EEFF" height="57">
<p>Das vorgestellte Beispiel soll nur als Denkanstoss dienen und aufzeigen,
welche M&ouml;glichkeiten<br>
die Arbeit mit Bin&auml;rwerten bereitstellt. Sie k&ouml;nnen das Beispiel
erweitern oder modifizieren um<br>
die Technik f&uuml;r sich zu verfeinern und an Ihre Bed&uuml;rfnisse anzupassen.</p>
</td>
</tr></table>
<p>&nbsp;</p>
<table bgcolor="#EEEEEE" class="doc" width="100%"><tr><td>
<a href="#top"><img src="../../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a><a href="#bottom"><img src="../../src/down.gif" width="14" height="10" border="0" alt="nach unten"></a>&#160;
</td></tr></table>
<h2 class="Sh2"><a class="an" name="download">Download</a></h2>
<table width="100%" cellpadding=10 height="66">
<tr>
<td class="xmpcode" bgcolor="#E4EEFF" valign="top"> Der Download beeinhaltet
folgende Dateien:
<ul>
<li> checkboxen_binaer_beispiel.php</li>
<li>checkboxen_binaer_erklaerung.txt</li>
<li>README.TXT</li>
</ul>
<a href="checkboxen_binaer_beispiel.zip">Download starten</a></td>
</tr></table>
<p>&nbsp;</p>
<table cellpadding="4" cellspacing="0" border="0" width="100%">
<tr><td colspan=2 bgcolor="#EEEEEE" class="doc">
<a href="#top"><img src="../../src/up.gif" width="14" height="10" border="0" alt="nach oben"></a>
</td></tr>
<tr>
<td bgcolor="#EEEEEE" class="doc" align="right" width="110">weiter:<img src="../../src/next.gif" width="10" height="10" border="0" hspace="10" alt="weiter"></td>
<td bgcolor="#FFFFFF"><img src="../../src/dok.gif" width="15" height="10" border="0" alt="Seite">
</td>
</tr>
<tr>
<td bgcolor="#EEEEEE" class="doc" align="right" width="110">zur&uuml;ck:<a href="index.php"><img src="../../src/prev.gif" width="10" height="10" border="0" hspace="10" alt="zur&uuml;ck"></a></td>
<td bgcolor="#FFFFFF" width="100%"><img src="../../src/dok.gif" width="15" height="10" border="0" alt="Seite">
<a href="index.html"><b>Formulare</b></a> </td>
</tr>
<tr><td colspan=2 bgcolor="#EEEEEE" class="doc">&#160;</td></tr>
</table><table cellpadding="4" cellspacing="0" border="0" width="100%">
<tr>
<td bgcolor="#FFEEDD" class="nav"><a class="an" name="bottom"><img src="../../src/refkap.gif" width="16" height="13" border="0" alt="Teil von"></a>
<a href="../../index.html"><b>SELFPHP</b></a>/<a href="../../navigation/index.html">Navigationshilfen</a>
<img src="../../src/refkap.gif" width="16" height="13" border="0" alt="Teil von">
<a href="../index.html"><b>Tipps &amp; Tricks</b></a> <img src="../../src/refkap.gif" width="16" height="13" border="0" alt="Teil von">
<a href="index.html"><b>Formulare</b></a></td>
</tr>
</table>
<p><a class="an" name="bottom">&copy; 2001, 2002, 2003</a> <img src="../../src/mail.gif" width="15" height="10" border="0" alt="E-Mail">&nbsp;<a href="mailto:mail@selfphp.info">Damir
Enseleit, mail@selfphp.info</a></p>
</body>
</html>