logo   Mellemtabel - vedligehold.

 Baseret på "tabel / $_GET".




brugerrollerMellemtabeller anvendes til at etablere dynamisk afhængighed mellem to andre tabeller placeret på 'hver sin side' af mellemtabellen. De anvendes typisk til at tildele rettigheder til indehavere af specifikke roller.


I eksemplet nedenfor er "rolle_og_rettighed" mellemtabel, mens "rolle" og "rettighed" er sidetabeller.


Koden til vedligehold af en melllemtabel kan opdeles i 3 moduler.

  • Udtræk fra den ene sidetabel.
  • Opbygning af liste med aktive <-atags.
  • $_GET-rutiner til opdatering af "roller_og_rettigheder"-tabellen i databasen.


Programmet "kører en omgang" hver gang der trykkes på en <a-tag.


De tre kodedele nedenfor kan sættes sammen til et program.


Udtræk fra den ene sidetabel.
Visning af alle data fra den mindste / mest stabile sidetabel og selektion af den ident, der aktuelt skal bruges til vedligehold af mellemtabellen. (Her fra tabel "rolle"). Kan også gøres med dropdown menu (update versionen) og POST.
<table><tr><td style = "width: 350px; border:2px solid black; ">
<ul >
<li><a href='?rolle_id=1'>Admin</a></li>
<li><a href='?rolle_id=2'>Moderator</a></li>
<li><a href='?rolle_id=3'>Medlem</a></li>
<li><a href='?rolle_id=4'>Gæst</a></li>
</ul>

<?php
$rolle_id ="";
$rolle_navn ="";
$fk_rettighed_id = "";
$tekstfarve = "";
   if (isset($_GET['rolle_id']))
   {
   $rolle_id = $_GET['rolle_id'];

      $query_rolle = "SELECT * FROM rolle WHERE rolle_id = $rolle_id";
      $result_rolle = mysqli_query($db_link, $query_rolle) or die(mysqli_error($db_link));
      $row_rolle = mysqli_fetch_assoc ($result_rolle);
      $rolle_navn =$row_rolle['rolle_navn'];

   echo "Aktuel rolle: ". $rolle_navn . "<br /><br />";
   }
   else
   {
   echo "Rolle er ikke valgt<br /><br />";
   }
?>
Opbygning af liste med aktive <a-tags.
Udtrækker aktuelle rettigheder for rollen til $akt_rettigheder.
Udtrækker alle rettigheder fra "rettighed" til $row_ret.
Anvender "$row_ret" til at opbygge tabel med 3 kolonner: "Tilføj", "Fjern" og Rettighedsnavn.


Tilføj opbygges som:
Når rettighed findes i "rettighed"-tabellen, men ikke i "rolle_og_rettighed"-tabellen indsættes <a-tag med URL-parametre ($_GET['rettighed_id']) til at tilføje rettigheden til "rolle_og_rettighed"-tabellen med kode i modul 3.
Når rettighed allerede findes i "rolle_og_rettighed"-tabellen indsættes en passiv tekst.


Fjern op bygges som:
Når rettigheden findes i "rolle_og_rettighed"-tabellen indsættes <a-tag med URL-parametre ($_GET['delete']) til at slette rettigheden i "rolle_og_rettighed"-tabellen med kode i modul 3.
Når rettighed kun findes i "rolle"-tabellen indsættes en passiv tekst.
Alle data fra "rettigheder" skal vises og have en aktiv "Tilføj" eller "Fjern".


mellemtabel
<!-- Tilføj / fjern -->

<?php
// hent rettigheder for aktuel rolle til array
if($rolle_id != "")
{

// Udtrækker aktuelle rettigheder for rollen til $akt_rettigheder.
   $query_akt = "SELECT * FROM rolle_og_rettighed
   inner join rettighed on rolle_og_rettighed.fk_rettighed_id = rettighed.rettighed_id
   WHERE fk_rolle_id = $rolle_id
   order by rettighed.rettighed_id asc ";
   $result_akt = mysqli_query($db_link, $query_akt) or die(mysqli_error($db_link));
      while ($row_akt = mysqli_fetch_assoc ($result_akt))
      {
      $akt_rettigheder[$row_akt['rettighed_id']] = $row_akt['rettighed_kodenavn'];
      }
      else
      {
      $akt_rettigheder = [];
      }

// Udtrækker alle rettigheder fra "rettighed" til $row_ret.

   $query_ret = "SELECT * FROM rettighed
   order by rettighed_navn asc ";
   $result_ret = mysqli_query($db_link, $query_ret) or die(mysqli_error($db_link));

// Anvender "$row_ret" til at opbygge tabel med 3 kolonner: "Tilføj", "Fjern" og Rettighedsnavn

   echo "<table>";
   while ($row_ret = mysqli_fetch_assoc ($result_ret))
   {
   echo "<tr>";

   // Tilføj (insert)
   echo "<td>";
       if (!in_array($row_ret['rettighed_kodenavn'] , $akt_rettigheder ))
      {
       $rettighed_id = $row_ret['rettighed_id'];
       echo "<a class='blue' href='?insert=insert&rolle_id=$rolle_id&rettighed_id=$rettighed_id'>Tilføj</a>";
       $tekstfarve ="red";
       }
       else
       {
       echo "<span class='grey'>Tilføj</span>";
       }
   echo "</td>";

   //Fjern (delete)
   echo "<td>";
       if (in_array($row_ret['rettighed_kodenavn'] , $akt_rettigheder ))
       {
       $rettighed_id = $row_ret['rettighed_id'];
       echo "<a class='blue' href='?delete=delete&rolle_id=$rolle_id&rettighed_id=$rettighed_id'>Fjern</a>";
       $tekstfarve ="green";
       }
       else
       {
       echo "<span class='grey'>Fjern</span>";
       }
   echo "</td>";
   echo "<td class='$tekstfarve'>" . $row_ret['rettighed_navn'] . "</td></tr>";
   }// while slut
   echo "</table>";

} // Tilføj / fjern slut

?>
</td></tr></table>
$_GET-rutiner til opdatering af "roller_og_rettigheder"-tabellen i databasen.
Modulet består af to dele der begge vedligeholder "rolle_og_rettighed"-tabellen:

$_GET['insert'], der modtager URL-parameter fra "Tilføj". Den DELETEr først den aktuelle rolle / rettighed kombination for at undgå doubletter. Derefter INSERTes den samme kombination.

$_GET['delete'], der modtager URL-parameter fra "Fjern". Den DELETEr den aktuelle rolle / rettighed kombination.
<?php

// Indsæt rolle / rettighed
if (isset($_GET['insert']))
{
$rolle_id = $_GET['rolle_id'];
$rettighed_id = $_GET['rettighed_id'];
// Slet før indsæt
$query_delete = "DELETE FROM rolle_og_rettighed WHERE fk_rolle_id = $rolle_id and fk_rettighed_id=$rettighed_id ";
$result_delete = mysqli_query ($db_link, $query_delete) or die (mysqli_error() );
// Indsæt
   $query_insert = "
   INSERT INTO rolle_og_rettighed
   ( fk_rolle_id, fk_rettighed_id ) VALUES
   ('$rolle_id', '$rettighed_id')
   ";
   $result_insert = mysqli_query ($db_link, $query_insert) or die (mysqli_error ($db_link));
header ("Location: ?rolle_id=$rolle_id");
exit;
}

// slet rolle / rettighed
if (isset($_GET['delete']))
{
$rolle_id = $_GET['rolle_id'];
$rettighed_id = $_GET['rettighed_id'];

   $query_delete = "DELETE FROM rolle_og_rettighed WHERE fk_rolle_id = $rolle_id and fk_rettighed_id=$rettighed_id ";
   $result_delete = mysqli_query ($db_link, $query_delete) or die (mysqli_error() );
header ("Location: ?&rolle_id=$rolle_id");
exit;
}
?>




















x
x