Avatar billede patrickreck Nybegynder
03. november 2011 - 10:47 Der er 4 kommentarer og
1 løsning

Opdatere mange checkbokse og rollefunktioner

Hejsa.
Jeg sidder og skal have lavet en måde at opdatere en række brugerrollers funktioner ved hjælp af en tabel og checkbokse, men jeg kan ikke helt gennemskue hvordan jeg skal gøre det.
Sådan ser det ud lige nu:
http://patrickreck.dk/web3/

Databaseopbygningen:
http://patrickreck.dk/web3/tabel.gif

Her er min foreløbige kode:


<?php
include("connect.php");

$taelroller_query = mysql_query("SELECT COUNT(*) AS antalroller FROM roller");
$taelroller = mysql_fetch_array($taelroller_query);

echo "
<table>
    <tr>
        <td></td>";
       
$query = "SELECT * FROM roller";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
echo "
        <td>".$row['navn']."</td>";
}
echo "</tr>";

$query2 = "SELECT * FROM funktioner ORDER BY fk_rolleid ASC";
$result2 = mysql_query($query2);
while ($row = mysql_fetch_array($result2)) {
   
$antalroller = $taelroller['antalroller'];

echo "
    <tr>
        <td>".$row['beskrivelse']."</td>";
    while ($antalroller > 0) {
        echo "
        <td align=\"center\"><input type=\"checkbox\" /></td>
        ";
        $antalroller --;
    }
    echo "</tr>";
}
echo "
</table>";
?>


Håber i kan hjælpe! :-)
03. november 2011 - 13:12 #1
Du har fire roller og otte funktioner.  Er det nu således, at hver rolle kan udføre nul, en, eller flere funktioner, og at du i tabellen rolle-funktioner bevarer oplysninger om hvilke funktioner der er tildelt hvilke roller?  Og du vil så have en kode der udskriver rolletildelingen på en sådan måde, at du kan ændre rolletildelingen og bevare den ændrede rolletildeling i tabellen.  Er det korrekt forstået?

I så fald er der adskillige problemer du må løse.  For at jeg skal kunne foreslå for eksempel løsninger til at gemme værdierne i databasen må jeg først forstå databasen.  Det gør jeg ikke.  Lad mig til at begynde med give de følgende kommentarer/spørgsmål og så se hvad du svarer derpå. 

Jeg har ingen spørgsmål til tabellen roller.  Men i tabellen funktioner forstår jeg ikke formålet med kolonnen fk_rolleid.  Og jeg har et spørgsmålstegn ved kolonnen titel.  Fra de titler du har valgt kunne det se ud til, gæst funktion1, o.s.v., kunne det se ud til, at du på forhånd har tildelt funktioner til de enkelte roller.  Yderligeer, i tabellen rolle_funktion viser du, tror jeg, alle kombinationer af roller og funktioner og så i kolonnen valgt viser et 1 for de rolle-funktion kombinationer der er tildelt og 0 for resten. 

Jeg ville have troet, at den følgende tabelstruktur ikke alene er enklere, men også mere fleksibel og, med et teknisk udtryk, normaliseret, og derfor mere egnet til at søge og bevare oplysinger:

roller
id, navn, beskrivelse

funktioner
id, beskrivelse

rolle_funktioner
id, rolle_id, funktion_id

Hvis så gæstebrugere kan søge om oprettelse og tilmelde sig nyhedsbreve og brugere kan tilmelde sig nyhedsbreve, oprette artikler, og rette egne artikler og, så vil de rolle_funktioner indeholde de følgende værdier:

rolle_funktioner
id rolle_id funktion_id
1        1          1
2        1          2
3        2          2
3        2          3
4        2          4

Hvis så det besluttes at brugere ikke længere må redigere egne artikler, så slettes den sidste linie i rolle_funktioner o.s.v.
Avatar billede patrickreck Nybegynder
03. november 2011 - 13:56 #2
at du i tabellen rolle-funktioner bevarer oplysninger om hvilke funktioner der er tildelt hvilke roller?
Det er korrekt

Og du vil så have en kode der udskriver rolletildelingen på en sådan måde, at du kan ændre rolletildelingen og bevare den ændrede rolletildeling i tabellen.
Det er rigtigt, den tabel der er skrevet i html som det første link henviser til er oversigten over hvilke funktioner der er, og hvilke roller der har adgang til hver funktion

i tabellen funktioner forstår jeg ikke formålet med kolonnen fk_rolleid
Den er også overflødig, den skulle have været fjernet inden jeg lagde det op

Fra de titler du har valgt kunne det se ud til, gæst funktion1, o.s.v., kunne det se ud til, at du på forhånd har tildelt funktioner til de enkelte roller.
Det er rigtigt, men de funktioner er bare eksempler - de kunne sagtens have haft andre navne

Yderligeer, i tabellen rolle_funktion viser du, tror jeg, alle kombinationer af roller og funktioner og så i kolonnen valgt viser et 1 for de rolle-funktion kombinationer der er tildelt og 0 for resten.
Det er også korrekt, jeg har bare kun oprettet felter til Gæsterollen indtil videre

funktioner
id, beskrivelse

Det kan jeg godt se meningen i, og er nu rettet :-)

rolle_funktioner
id, rolle_id, funktion_id

Hvis så gæstebrugere kan søge om oprettelse og tilmelde sig nyhedsbreve og brugere kan tilmelde sig nyhedsbreve, oprette artikler, og rette egne artikler og, så vil de rolle_funktioner indeholde de følgende værdier:

rolle_funktioner
id rolle_id funktion_id
1        1          1
2        1          2
3        2          2
3        2          3
4        2          4


Jeg kan godt se det vil virke, men hvordan skulle jeg tjekke om en rolle har funktionen så?

Et af de ting jeg heller ikke kan gennemskue er, hvordan jeg får opdateret samtlige felter (http://patrickreck.dk/web3/) på én gang.

Jeg vil iøvrigt gerne sige tak for du tager dig tid til at hjælpe mig. :-)

Mvh. Patrick
03. november 2011 - 14:36 #3
Dit oprindelige spørgsmål var, i princippet, hvordan du får database tabellerne opdateret efter at du har valgt nye funktioner for rollerne.  Det afhænger, blandt andet, af hvordan database tabellerne er indrettet, og det er derfor jeg diskuterer det med dig først.  Du synes at være modtagelig for mine forslag, med reservationer overfor om du nu kan få de rigtige oplysninger ud, så som hvilke roller en funktion har.  Det skal jeg svare på nu, men resten må jeg komme tilbage til senere (hvis der ikke er andre der kommer med løsninger forinden) fordi jeg er ret hængt op lige nu.

Hvis du vil have en liste over hvilke roller der har en bestemt funktion, for eksempel 'Opret artikel', så får du det, med min foreslåede tabelstruktur, med denne query:

SELECT f.beskrivelse, r.navn FROM funktioner f JOIN rolle_funktioner rf ON f.id = rf.funktion_id JOIN roller r ON rf.rolle_id = r.id WHERE f.beskrivelse = 'Opret artikel'

Hvis du vil have en liste over hvilke funktioner der er knyttet til en bestemt rolle, lad os sige 'Bruger' så skal du, så at sige, vende queryen om:

SELECT r.navn, f.beskrivelse FROM roller r JOIN rolle_funktioner rf ON r.id = rf.rolle_id JOIN funktioner f ON rf.funktion_id = f.id WHERE r. = 'Bruger'

Jeg har ikke testet koden men skrevet den hurtigt ned som en illustration der, forhåbenligt, er syntaktisk korrekt, men måske skal den pusles på plads.
04. november 2011 - 12:20 #4
patrickreck, jeg venter på en eller anden tilkendegivelse fra din side før jeg investerer tid i at gå videre.
08. november 2011 - 11:16 #5
patrickreck, hvis denne tråd ikke længere er aktuel (hvis du enten løste det selv eller det nu er lige meget,) så vil du uden tvivl gerne lukke den igen, så der er rent bord for fremtidige spørgsmål.  Jeg opretter et svar, idet jeg mener at have bidraget til at løse problemet ved at foreslå en bedre struktur i din database.
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