Gegevens in een database zetten
Ik probeer nu op een manier gegevens in een database te zetten (hoe ik het moet uitleggen weet ik ook niet maar ik probeer het zo goed mogelijk te zeggen)
ik heb deze code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$qForumRoles = mysqli_query($mysqli, "
SELECT role_id,
role_name
FROM forum_roles
") or die(mysqli_error());
while($rForumRoles = mysqli_fetch_assoc($qForumRoles)){
echo '<div class="row">';
echo '<label for="' .$rForumRoles['role_name']. '">' .$rForumRoles['role_name']. '</label>';
echo '<input type="hidden" name="role_id" id="role_id" value="' .$rForumRoles['role_id']. '" />';
echo '<select name="categorie_permissions" id="categorie_permissions" style="width: 310px;">';
$qForumPermissions = mysqli_query($mysqli, "
SELECT *
FROM forum_permissions
") or die(mysqli_error());
while($rForumPermissions = mysqli_fetch_assoc($qForumPermissions)){
echo '<option value="' .$rForumPermissions['permission_id']. '">' .$rForumPermissions['permission_id']. '</option>';
}
echo '</select>';
echo '</div>';
}
?>
$qForumRoles = mysqli_query($mysqli, "
SELECT role_id,
role_name
FROM forum_roles
") or die(mysqli_error());
while($rForumRoles = mysqli_fetch_assoc($qForumRoles)){
echo '<div class="row">';
echo '<label for="' .$rForumRoles['role_name']. '">' .$rForumRoles['role_name']. '</label>';
echo '<input type="hidden" name="role_id" id="role_id" value="' .$rForumRoles['role_id']. '" />';
echo '<select name="categorie_permissions" id="categorie_permissions" style="width: 310px;">';
$qForumPermissions = mysqli_query($mysqli, "
SELECT *
FROM forum_permissions
") or die(mysqli_error());
while($rForumPermissions = mysqli_fetch_assoc($qForumPermissions)){
echo '<option value="' .$rForumPermissions['permission_id']. '">' .$rForumPermissions['permission_id']. '</option>';
}
echo '</select>';
echo '</div>';
}
?>
Als er dan gepost wordt moet die in een database gezet worden:
Code (php)
1
2
3
4
5
2
3
4
5
mysqli_query($mysqli, "
INSERT INTO forum
(permission_id, role_id, categorie_id)
VALUES ('', '', '" .$_GET['categorie']. "')
") or die(mysqli_error());
INSERT INTO forum
(permission_id, role_id, categorie_id)
VALUES ('', '', '" .$_GET['categorie']. "')
") or die(mysqli_error());
Alleen hoe zorg ik dat de juiste permissie_id bij de juiste role_id komt te staan uit het geposte formulier.
De permissies die in het eerste stukje code uit de database worden gehaald zijn vast (5 soorten permissies)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `forum_permissions` (
`permission_id` int(11) NOT NULL auto_increment,
`permission_read` enum('0','1') NOT NULL,
`permission_add` enum('0','1') NOT NULL,
`permission_edit` enum('0','1') NOT NULL,
`permission_del` enum('0','1') NOT NULL,
PRIMARY KEY (`permission_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Gegevens worden uitgevoerd voor tabel `forum_permissions`
--
INSERT INTO `forum_permissions` VALUES(1, '1', '1', '1', '1');
INSERT INTO `forum_permissions` VALUES(2, '1', '1', '1', '0');
INSERT INTO `forum_permissions` VALUES(3, '1', '1', '0', '0');
INSERT INTO `forum_permissions` VALUES(4, '1', '0', '0', '0');
INSERT INTO `forum_permissions` VALUES(5, '0', '0', '0', '0');
`permission_id` int(11) NOT NULL auto_increment,
`permission_read` enum('0','1') NOT NULL,
`permission_add` enum('0','1') NOT NULL,
`permission_edit` enum('0','1') NOT NULL,
`permission_del` enum('0','1') NOT NULL,
PRIMARY KEY (`permission_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Gegevens worden uitgevoerd voor tabel `forum_permissions`
--
INSERT INTO `forum_permissions` VALUES(1, '1', '1', '1', '1');
INSERT INTO `forum_permissions` VALUES(2, '1', '1', '1', '0');
INSERT INTO `forum_permissions` VALUES(3, '1', '1', '0', '0');
INSERT INTO `forum_permissions` VALUES(4, '1', '0', '0', '0');
INSERT INTO `forum_permissions` VALUES(5, '0', '0', '0', '0');
(niet letten op de verkeerde databasestructuur, dit moet ik nog wel verbeteren)
Gewijzigd op 01/01/1970 01:00:00 door Steef
Hoe koppel ik permissie_id en role_id aan elkaar?.
Wellicht is het daarvoor handig als je ons verteld hoe je database in elkaar zit.
Ik vermoed iets als dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$qForumRoles = mysqli_query($mysqli,
"
SELECT p.permission_read, p.permission_add, p.permission_edit, p.permission_del, r.role_name
FROM forum_permissions AS p
INNER JOIN forum_roles AS r
ON r.permission_id = r.role_id
WHERE r.role_id = '$user_id'
") or die(mysqli_error());
?>
$qForumRoles = mysqli_query($mysqli,
"
SELECT p.permission_read, p.permission_add, p.permission_edit, p.permission_del, r.role_name
FROM forum_permissions AS p
INNER JOIN forum_roles AS r
ON r.permission_id = r.role_id
WHERE r.role_id = '$user_id'
") or die(mysqli_error());
?>
Maar ik mis nog de opzet van forum_roles.
Want ik zie het user_id nergens terug.
(dit is een formulier)
Als ik het formulier post dan moet ie per rol een permissie in de database zetten samen met de categorie_id.
Het uitgangspunt moet zijn dat je uitsluitend die rechten opslaat, die iemand ook heeft. De rechten die niet bij een rol horen, staan ook niet bij de rol vermeld.
rollen:
- id
- naam
rol_recht
- id_rol
- id_recht
rechten:
- id
- naam
En dat je dan een recht 'aanmaken topic' hebt, is heel leuk, maar wanneer je deze niet koppelt via de tabel rol_recht aan de rol X, zal rol X nooit en te nimmer over dit recht kunnen beschikken.
In jouw datamodel sla je 1 soort data (rechten) op in 4 kolommen. Op zich valt er wel wat voor te zeggen om het zo te doen, een leesrecht is tenslotte geen schrijfrecht, maar je slaat nu ontbrekende data op. Geen recht moet nu wel worden opgeslagen. En dat is niet handig.
Komt bij dat een enum redelijk eval is, in MySQL kun je daar de gekste dingen mee doen. Gebruik liever de fake BOOL als datatype, dan heb je een 0 voor false en iedere andere waarde voor true. (als ik het goed heb) Daar kan veel minder fout mee gaan dan met een ENUM.
Tip: Ga je datamodel aanpassen.