Avatar billede kasper_aaroe Nybegynder
12. januar 2010 - 20:42 Der er 21 kommentarer og
1 løsning

Svendeprøve! Søg og slet fra mssql_fetch_array ??

Hey,

Sidder her og skriver svendeprøve, og sidder fast i noget jeg virkeligt ikke ved hvordan jeg skal løse..

Det kræver lidt af en intro, så hold lige fast en gang!
_____________________________________

Jeg koder et sags stystem og på sagerne har jeg et rettigheds felt som indeholder brugere/grupper tilladt adgang til de enkle sager - adskilt af komma (f.eks. Gruppe1,Gruppe2,Bruger1).


Så, nu vil jeg gerne lave en tabel som viser de sager og KUN de sager som den bruger der er logget ind har lov at se.


Nu er bruger1, som ligger i gruppe1, logget ind, og det her er sagerne der er oprettet:

id-tag-beskrivelse-tilgængeligfor
10-010-første sag!-Bruger1,Gruppe1
11-011-Anden  sag!-Bruger2


Nu vil jeg så gerne have at bruger1 KUN får vist den første sag.
______________________________________


Min første tanke er at hente alle sager ind i et mssql_fetch_array og så søge tilgængeligfor feltet igennem for steder hvor Bruger1 eller Gruppe1 IKKE optræder - og så slette den linje fra mssql_fetch_array'et.

Men en ting er at tænke det, en anden er at kode det - er helt blank lige nu.. :S


Hilfe!
Avatar billede repox Seniormester
12. januar 2010 - 20:49 #1
Det lyder til at være et dårligt database design. Det er ufleksibelt og besværligt at anvende praktisk.

Du bør overvejer at dele det op i flere tabeller og anvende mere komplicerede SQL statements for at opnå en bedre fleksibilitet - så vil du også undgå at skulle hente mere data ud end du skal anvende.
Avatar billede kasper_aaroe Nybegynder
12. januar 2010 - 20:51 #2
nogle forslag - havde jeg kendt til en løsning, sad jeg ikke her :)
Avatar billede repox Seniormester
12. januar 2010 - 20:59 #3
Lav en overordnet sagstabel.
Disse skal naturligvis have unikke ID'er (sagsakter, numre, hvad du nu vil have).

Derefter laver du en tabel der kan kæde dine sager op mod de forskellige brugergrupper (her antages det at du allerede har noget der kæder en bruger op mod en gruppe?)

Sidst, så laver en en tabel der kan give den enkelte bruger adgang til en specifik sag.
Avatar billede kasper_aaroe Nybegynder
12. januar 2010 - 21:00 #4
eneste id jeg selv kan komme på,


users table
u_id | u_username | u_password | osv.

cases table
c_id | c_tag | c_desc | osv.

rights table
r_id | u_id | c_id

Hvor u_id og c_id i rights tabellen er FK fra henholdsvis users og cases tabellerne.


Men vil det ikke blive meget langsomt med mange sager og 'rights'?
Avatar billede repox Seniormester
12. januar 2010 - 21:00 #5
Du kan starte med det (hvis den struktur giver mening for dig) og så kan vi fortsætte derfra.
Avatar billede kasper_aaroe Nybegynder
12. januar 2010 - 21:05 #6
er der en smartere måde at gøre det på? skal jeg til at lave min database om - så laver jeg den kun om en gang - og så skal det jo gøre orden ligt :)
Avatar billede repox Seniormester
12. januar 2010 - 21:15 #7
Jeg ville mene du skal redesigne databasen. Det vil gøre systemet mere fleksibelt.
Avatar billede kasper_aaroe Nybegynder
12. januar 2010 - 21:19 #8
Så langt er jeg med, men er der en smartere måde at gøre det på end jeg forslog - siden du skrev:

"hvis den struktur giver mening for dig" - som jeg forstår det menes det som at der er en smartere måde at gøre det på.


Skal bare vide, er der der?
Avatar billede repox Seniormester
12. januar 2010 - 21:26 #9
Ja, det mener jeg bestemt der er. Som den jeg foreslog. Hvilket også var derfor jeg skrev 'hvis det giver mening for dig'.
Avatar billede kasper_aaroe Nybegynder
12. januar 2010 - 21:28 #10
Kan du ikke lave et udkast til et script? for jeg har altså meget svært ved at gætte mig til hvad du mener.
Avatar billede repox Seniormester
12. januar 2010 - 21:32 #11
For at lave det ordentligt skal der lidt mere end et enkelt eller to scripts til :)

Prøv at lave dit database udkast og vis det her; så skal jeg nok kommentere på det :)
Avatar billede DGudiksen Nybegynder
12. januar 2010 - 21:35 #12
Nu har jeg aldrig nogensinde brugt en mssql database, men den fungere vel lidt på samme måde som en mysql database. (Det er jo stadig samme måde det skal kodes sammen på).

Users tabel:
- ID
- Username
- Password
osv osv.

Sags tabel:
- ID
- Beskrivelse
- Adgang (Eller hvad du syntes den skal hedde). (Denne lister grupper/personer som må se sagen adskilt med komma).
osv osv.

Gruppe tabel:
- ID
- Gruppenavn
- Personer (Denne lister personer som er tilmeldt gruppen, adskilt med komma).
osv osv.

Det er den måde jeg ville vælge at sætte min database op på, dette kan selfølgelig gøres på mange forskellige måder og faconer. Det er op til en selv.

Jeg håber du kunne bruge det, ellers må du enlig sige til.
Avatar billede kasper_aaroe Nybegynder
12. januar 2010 - 21:36 #13
giver det et forsøg, give mig lige lidt tid
Avatar billede repox Seniormester
12. januar 2010 - 22:12 #14
Det database setup vil du aldrig kunne få til at fungere uden at få skrevet noget slamkode og det vil blive et helvede for dig at vedligeholde dine SQL forespørgsler.

Dit tabel setup bør afspejle noget ala:

users:
  userId,
  uUsername,
  uPassword

userGroups:
  groupId,
  gName

usersInGroups:
  userId,
  groupid

cases:
  caseId
  cName,
  cContent

casesInGroups:
  caseId,
  groupId

casesInUsers:
  caseId,
  userId




På den måde kan du let med nogle SQL forespørgsler få linket sager, brugere og brugergrupperne sammen hurtigt og effektivt - endda med pænt kode og kode som er nem at refaktorere og strukturere. Pæn og overskuelig kode er vejen til success.
Avatar billede kasper_aaroe Nybegynder
13. januar 2010 - 12:36 #15
Hej igen,
Fik lige et lille 'melt-down' igår. Tog ud forbi min bror som er begyndt på ITU, og skræmmende nok, så har han på et ½ år lært mere om database design - end jeg har på 4 år som datatekniker.

Vi fik strikket lidt sammen her, både ud fra det du skrev, og hvad min bror forslog:
http://yfrog.com/5cdatabaseudkastp


Konstruktiv kritik?

Hurtigt spørgsmål - har ikke arbejdet meget med FK(pinligt) så skal lige være med her, når jeg vil give en gruppe adgang til en case - hvordan gør jeg så det? min "Right" tabel har jo kun FK'er.
Avatar billede repox Seniormester
13. januar 2010 - 13:20 #16
Det er et fint udgangspunkt - det ser dog ikke ud til at der er taget højde for at en enkelt bruger kan få adgang til en case uden at være medlem af en gruppe som ellers normalt ville have adgang til en case. Men det ved jeg ikke om er et problem.

Har du ikke - med din bror - gennemgået tabeldesignet, således du fik forståelse for det design der er lagt op til?
Avatar billede kasper_aaroe Nybegynder
13. januar 2010 - 14:01 #17
Vi (brormand og jeg) blev enige om at lave det så man kun giver grupper adgang til sager i første omgang, for at holde det relativt simpelt.

Vi sluttede af kl 02 i nat, forstod det hele - var først her til morgen da jeg skulle lave scriptet der opretter databasen at jeg lige kom til at tænke på det.


Når jeg skal give gruppen 'g_Id=1' adgang til sagen'c_id=3' skriver jeg bare følgende ned i doc_Right
g_Id = 1
c_Id = 3

Så burde det spille, hvis jeg har forstået konceptet rigtigt
Avatar billede repox Seniormester
13. januar 2010 - 14:21 #18
uhm... doc_Right er ikke på det udkast du har givet mig, så jeg ved ikke hvad den skal bruges til?
Avatar billede kasper_aaroe Nybegynder
13. januar 2010 - 14:24 #19
Arg min fejl, ændrede navnet på den i sidste øjeblink, den hedder 'doc_RuleForGroup'
Avatar billede repox Seniormester
13. januar 2010 - 15:01 #20
Ja, jamen, så har du forstået det rigtigt....
doc_RuleForGroup skulle gerne afspejle den adgang som den enkelte gruppe har til den enkelte case. For hver case en gruppe har adgang til, skal der optræde en linie i den tabel.
Avatar billede kasper_aaroe Nybegynder
13. januar 2010 - 15:18 #21
super - så er jeg med :)

du smider bare en svar hvis du vil have lidt points
Avatar billede repox Seniormester
13. januar 2010 - 15:22 #22
Det fik du her.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester