Meerdere gebruikers laten werken in één CRUD applicatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohamed nvt

Mohamed nvt

19/06/2016 23:37:19
Quote Anchor link
Hallo allemaal,

Momenteel ben ik bezig met een CRUD applicatie.
Hiermee wil ik gebruikers de mogelijkheid geven om enkele gegevens in te voeren. Het betreft meestal dezelfde info/data.

Voor één gebruiker is het geen probleem om info op te slaan in een DB, maar wanneer het twee of meer gebruikers zijn?
Hierover heb ik de volgende vragen en ik hoop dat iemand het e.e.e.a kan toelichten:

1. Is het mogelijk dat meerdere gebruikers hun (dezelfde)informatie kunnen invoegen in crud applicatie in dezelfde DB?
2. Moet elke gebruiker een eigen tabel krijgen of kunnen verschillende gebruikers dezelfde info in dezelfde tabel opslaan?
3. Voor mij is het van belang dat elke gebruiker zijn eigen data kan wijzigen/verwijderen en niet bij de data van één andere gebruiker kan komen.
4. Hoe zorg ik ervoor dat hun data gescheiden blijft in de DB?
5. Of moet ik voor elke gebruiker een aparte DB aanmaken?
6. Wanneer het mogelijk is dat twee of meerdere gebruikers dezelfde informatie kunnen invoeren in dezelfde db, moet ik dan denken aan een concept als een forum/gastenboek?
7. gebruikersrechten moeten ingesteld worden in PhpMyAdmin of juist via PHP zelf?


Alvast bedankt!
Gewijzigd op 19/06/2016 23:39:56 door Mohamed nvt
 
PHP hulp

PHP hulp

12/12/2024 14:23:15
 
- Ariën  -
Beheerder

- Ariën -

19/06/2016 23:47:49
Quote Anchor link
Heb je al ervaring met Databasenormalisatie?
Misschien wordt de opzet van een database een stuk helderder dan. Een hoofdregel is dat je nooit velden, tabellen of databases voor aantallen gaat gebruiken.
Gewijzigd op 19/06/2016 23:49:01 door - Ariën -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/06/2016 23:52:09
Quote Anchor link
1. Ja
2. 1 tabel voor ieder 'ding'. Bijvoorbeeld users, artiesten, liedjes.
3. De beveiliging hiervoor moet je in PHP regelen.
4. Door aan ieder record het id van de gebruiker (of iets anders) toe te voegen. Je kunt dan later gewoon "WHERE user_id=?" toepassen in je query.
5. Neeeeeeeeeeeeee
6. Dezelfde data voor verschillende gebruikers is gewoon mogelijk.
7. Deze rechten regel je binnen je PHP applicatie

Toevoeging op 20/06/2016 00:00:32:

Voorbeeld punt 2:

users:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
id | name
-------------
1  | Frank
2  | Mohamed


artiesten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
id | name
-------------
1  | Bon Jovi
2  | Rihanna


Liedjes:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
id | artiest_id | titel
-----------------------
1  | 2          | Work
2  | 1          | Livin' on a Prayer


Playlist:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
user_id | liedjes_id
---------------------
1       | 1  
1       | 2  
2       | 1  
 
Thomas van den Heuvel

Thomas van den Heuvel

20/06/2016 16:58:42
Quote Anchor link
Wat @Frank zei, en:

1. bedoel je hiermee dubbele informatie, of eenzelfde soort informatie? er bestaat natuurlijk altijd een zeker gevaar voor het invoeren van dubbele informatie; zo/ook zou je bijvoorbeeld een typefout kunnen maken in de invoer (Rihana); dit zul je moeten zien te voorkomen door onderlinge afstemming, moderatie of een ander controlemechanisme

2. eenzelfde soort informatie staat idealiter op dezelfde plek; dit maakt het ook makkelijker om alle informatie in 1x bij elkaar te rapen; stel je voor dat dezelfde soort informatie verspreid zou zijn over verschillende tabellen (of databases), dan wordt het veel lastiger om te zoeken, te sorteren en te filteren

3. in dat geval is de data dus persoonlijk en dient dan ook als zodanig gemarkeerd te worden, bijvoorbeeld door (inderdaad) het opslaan van een user id bij de "resource" in kwestie

4. door het markeren als zijnde van persoon X (zie punt 3) en hier dan ook op te controleren "is de eigenaar van deze informatie persoon X (= het user id uit je sessie of wat dan ook)"?

5. zie punt 2

6. dit hangt helemaal af van wat je applicatie doet; hier is geen generieke opzet voor; indien meerdere gebruikers eenzelfde soort informatie kunnen invoeren en informatie van elkaar kunnen inzien zou ik eerder denken aan een soort van rechtensysteem die vastlegt wat gebruikers mogen, "CRUD" is hier zelf ook een voorbeeld van; uiteraard markeer je in geval van een forum/gastenboek nog steeds van wie de informatie afkomstig is, maar gebruikersrechten bepalen dan wat je allemaal mag zien, in plaats van de controle of de informatie echt van jou is, het zou nogal saai zijn als je alleen je eigen topics en reacties zou kunnen lezen

7. dit lijkt mij per applicatie specifiek, dus dit zal ook in de applicatie zelf (PHP + database) geregeld moeten worden; hierbij zou ik wel waken voor "hardcoding" van je rechtenmanagement. Dit hoeft trouwens niet per se een bezwaar te zijn, maar als je de volgende code hebt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if ($currentUser->hasRights(3)) {
    // access granted, do stuff
    // ...

} else {
    // access denied, complain, redirect, die
    // ...

}
?>

Dan is dit een hardcoded check, in die zin dat als je de benodigde rechten voor deze actie wilt wijzigen, je hiervoor de broncode moet aanpassen. Er is iets voor te zeggen -als dit gewenst/nodig is is- om dit soort rechtenchecks generiek te houden.
 
- Ariën  -
Beheerder

- Ariën -

20/06/2016 17:06:19
Quote Anchor link
Over puntje 1:
Voor een tiental waardes maximaal zou een select-box een mogelijkheid zijn. Anders zou ik me vasthouden aan een auto-completesysteem die aan de hand van de eerste ingevoerde beginletters de juiste namen erbij pakt.

Puntje 7:
De rechtencontrole kan je prima laten baseren op het recht wat iemand heeft. Ik weet niet wat Thomas precies bedoeld met 3 in hasRights. Maar ik zou dan bijv. eerder dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if ($currentUser->hasRights('news','add')) {
    // access granted, do stuff
    // ...

} else {
    // access denied, complain, redirect, die
    // ...

}
?>
 
Mohamed nvt

Mohamed nvt

20/06/2016 22:46:40
Quote Anchor link
Hallo allemaal,

Bedankt voor jullie reacties tot nu toe en voor het meedenken.
De reden van mijn bovenstaande vragen hebben te maken met het doel van de CRUD applicatie.
Hieronder zal ik toelichten wat de applicatie in eerste instantie moet kunnen:

Ik wil een basic inventory systeem bouwen dat winkels/of andere kleine ondernemingen in staat staat om hun voorraad bij te houden. Maandelijks zal men per product invoeren wat bijv zijn productiedatum en over datum is.
En, wanneer meerdere winkeliers gebruik willen maken van deze inventory systeem, dan zullen zij dezelfde data invoeren. Vandaar ook mijn vraag of het mogelijk is dat gebruikers dezelfde data kunnen opslaan in dezelfde tabel "bijv. produten_tabel", maar dat de data toch gescheiden blijft.

Daarnaast wil ik dat de applicatie de winkeliers in staat stelt om maandelijks te kunnen zien hoeveel producten zijn ingevoerd. En dat winkeliers zelf een datum kunnen kiezen om vervolgens te kunnen zien welke producten bijv over 2 a 3 maanden over datum zijn.

Ik ben reeds begonnen met een aantal basic PHP cursussen, want ik wil het stap voor stap doen en heel belangrijk voor mij om het proces te kunnen begrijpen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/06/2016 23:04:48
Quote Anchor link
Misschien nog voor alle duidelijkheid..

Je kunt in een database-tabel meerdere dezelfde records hebben. zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016

Dit is alleen wel een super bad practice omdat je niet meer slechts één van de vier dezelfde records kunt aanwijzen.
Om dit te voorkomen wordt er vaak van het autoincrement primary key (id) gebruik gemaakt waardoor je tabel er zo uit komt te zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
1 | Magere yoghurt | 12-8-2016
2 | Magere yoghurt | 12-8-2016
3 | Magere yoghurt | 12-8-2016
4 | Magere yoghurt | 12-8-2016

Nu heb je een good practice omdat je altijd nog WHERE id=2 kunt gebruiken om een record aan te wijzen. Je hebt nu vier dezelfde pakken yoghurt in je database maar wel met een eigen id voor ieder pak.

Nu kun je ook nog een user_id aan ieder artikel toevoegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
id| user_id |
----------------------------------------
1 | 1       | Magere yoghurt | 12-8-2016
2 | 1       | Magere yoghurt | 12-8-2016
3 | 4       | Magere yoghurt | 12-8-2016
4 | 15      | Magere yoghurt | 12-8-2016

User 1 heeft nu twee identieke pakken Yoghurt maar nog steeds wel ieder met een eigen id (dus niet uniek :p)

Ik hoop dat het zo een beetje duidelijk wordt

Toevoeging op 20/06/2016 23:10:16:

p.s De meeste applicaties tonen het id niet in het overzicht dat voor de eindgebruiker bedoeld is maar gebruiken het wel in de URL's:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
/edit_article.php?id=3
 
Mohamed nvt

Mohamed nvt

22/06/2016 22:59:38
Quote Anchor link
Hoi Frank,

Bedankt voor je uitleg tot zover.
Het is nu wel duidelijk voor me.
Ik wil nu eerste nog het e.e.a. toevoegen aan de test_crud, voordat ik aan de database design ga werken.
En wanneer het klaar is, zal ik het hier posten voor feedback :)
Gewijzigd op 22/06/2016 22:59:57 door Mohamed nvt
 



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.