Mehrfachauswahl mit besonderer Option
devian
- php
0 EKKi
Guten Tag alle miteinander!
Ich habe ein wbblite Forum, welches auf PHP und HTML basiert. Für jedes Forum ist es möglich die Lese-, Schreib und Bearbeitungsrechte der einzelnen Usergruppen festzulegen. Dafür hat man eine Mehrfachauswahl in der man die Benutzergruppen makiert, die die jeweiligen Rechte haben sollen. Das ganze sieht so aus:
<select name="boardpermission[]" size=5 multiple>
<option value="*"$bp_selected>#ALLE GRUPPEN#</option>
$bp_options
</select><br>
Die Auswahl die getroffen wird, wird in der Datenbank gespeichert. Ich glaube, dass es dieser PHP-Code ist:
$result = $db->query("SELECT groupid FROM bb".$n."_groups");
while($row=$db->fetch_array($result)) $db->query("REPLACE INTO bb".$n."_permissions VALUES ('$insertid','$row[groupid]','".ifelse($boardpermission[0]=='*',"1",$tempbp[$row[groupid]])."','".ifelse($startpermission[0]=='*',"1",$tempsp[$row[groupid]])."','".ifelse($replypermission[0]=='*',"1",$temprp[$row[groupid]])."')");
Wie ihr seht besteht in der Mehrfachauswahl die Möglichkeit alle Benutzergruppen auszuwählen, was den Vorteil hat, dass man nicht alle markieren muss. Mein Vorhaben ist es nun, eine zusätzliche Option mit #Alle Gruppen außer Gruppe 3 und 2# zu erstellen. Allerdings weiß ich nicht wie man den Code oben dafür verändern muss. Daher würde ich es cool finden, wenn mir jemand den Code erklären könnte oder mir sogar den richtigen Code posten können (aber dann bitte auch mit Erklärung). Ich will ja was lernen.
Könnt ihr mir da vl. helfen? Ich bin damit mit meinen gegenwärtigen Kenntnissen leider noch überfordert.
Mahlzeit devian,
Die Auswahl die getroffen wird, wird in der Datenbank gespeichert. Ich glaube, dass es dieser PHP-Code ist:
Ja, das ist er.
$result = $db->query("SELECT groupid FROM bb".$n."_groups");
while($row=$db->fetch_array($result)) $db->query("REPLACE INTO bb".$n."_permissions VALUES ('$insertid','$row[groupid]','".ifelse($boardpermission[0]=='*',"1",$tempbp[$row[groupid]])."','".ifelse($startpermission[0]=='*',"1",$tempsp[$row[groupid]])."','".ifelse($replypermission[0]=='*',"1",$temprp[$row[groupid]])."')");
Mal wieder ein herrliches Beispiel für unsauberen und unleserlichen Code und was zu diesem geführt hat: unterschiedliche Anwendung und inkonsequente Mischung von einfachen und doppelten Anführungszeichen, die Nichtnutzung von bordeigenen Mitteln zur Strukturierung von Strings sowie keine vernünftige Nutzung von Leerzeichen zur Trennung. Ich fände folgendes erheblich leserlicher:
$result = $db->query("SELECT groupid FROM bb$n_groups");
$sql = sprintf("REPLACE INTO bb%s_permissions VALUES ('%s','%s','%s','%s','%s')",
$n,
$insertid,
$row[groupid],
ifelse($boardpermission[0]=='*', '1', $tempbp[$row[groupid]]),
ifelse($startpermission[0]=='*', '1', $tempsp[$row[groupid]]),
ifelse($replypermission[0]=='*', '1', $temprp[$row[groupid]])
);
/* Wobei es ein Unding ist, etwas in die Datenbank kippen zu wollen, aber nicht anzugeben, in welche Spalten man den Inhalt haben will ... Achja, und die Funktion "ifelse()" macht vermutlich das, wonach sie aussieht (wenn der erste Parameter wahr ist, den zweiten, ansonsten den dritten als Rückgabe liefern)? Dokumentiert ist sie nämlich nirgendwo ... */
while($row=$db->fetch_array($result)) $db->query($sql);
Wie ihr seht besteht in der Mehrfachauswahl die Möglichkeit alle Benutzergruppen auszuwählen, was den Vorteil hat, dass man nicht alle markieren muss. Mein Vorhaben ist es nun, eine zusätzliche Option mit #Alle Gruppen außer Gruppe 3 und 2# zu erstellen. Allerdings weiß ich nicht wie man den Code oben dafür verändern muss.
Du musst einerseits in den HTML-Code der <select>-Box eine zusätzliche Option einfügen, die einen von Dir gewählten Wert besitzt, der sinnvollerweise in keiner anderen Option vorkommt.
Dann kannst Du beim Zusammenbau der SQL-Anweisung überprüfen, ob in $boardpermission[0]
genau dieser Wert enthalten ist und wenn ja, musst Du halt die entsprechenden Berechtigungen in die Tabelle eintragen.
Daher würde ich es cool finden, wenn mir jemand den Code erklären könnte oder mir sogar den richtigen Code posten können (aber dann bitte auch mit Erklärung). Ich will ja was lernen.
"Den richtigen Code"? Wenn noch nicht mal klar ist, in welche Spalten der Tabelle überhaupt irgendwas hineingeschrieben wird? Sportlich, sportlich ...
Könnt ihr mir da vl. helfen? Ich bin damit mit meinen gegenwärtigen Kenntnissen leider noch überfordert.
Vielleicht kennt sich ja jemand mit wbblite besonders gut aus, und kann Dir bei den technischen Details weiterhelfen - ansonsten bleibt Dir nichts anderes übrig, als Dich an den Hersteller zu wenden oder alternativ den Code und die Tabellenstruktur weiter zu erforschen.
MfG,
EKKi