Gegevens in een database zetten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Steef

Steef

04/10/2008 14:51:00
Quote Anchor link
Hallo PHPhulp,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
                }

                ?>

Als er dan gepost wordt moet die in een database gezet worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
mysqli_query($mysqli, "
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)
PHP script in nieuw venster Selecteer het PHP script
1
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');


(niet letten op de verkeerde databasestructuur, dit moet ik nog wel verbeteren)
Gewijzigd op 01/01/1970 01:00:00 door Steef
 
PHP hulp

PHP hulp

05/11/2024 12:33:59
 
Eddy E

Eddy E

04/10/2008 16:57:00
Quote Anchor link
Je vraagt dus eigelijk dit:

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)
PHP script in nieuw venster Selecteer het PHP script
1
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());
?>


Maar ik mis nog de opzet van forum_roles.
Want ik zie het user_id nergens terug.
 
Steef

Steef

04/10/2008 18:09:00
Quote Anchor link
Het is niet hoe koppel ik die aan elkaar (dat weet ik wel) maar als ik alle roles onder elkaar zet (uit de database gehaald) en hierbij kan ik bij elke rol een permissie opgeven.
(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.
 
Frank -

Frank -

04/10/2008 18:31:00
Quote Anchor link
Tja, dit is niet een datamodel zoals ik het zou maken, nu moet je ook bijhouden welke rechten iemand niet heeft. En dat gaat altijd fouten opleveren.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.