logo   2-tabels multiple select




2-tabels multiple select anvendes til at administrere tilladte forekomster af kombinationer af data fra tabel 1 og tabel 1. De tilladte kombinationer opsamles i en treide mange-til-mange tabel. Indeholder tabel1 og tabel 2 hhr. 9 og 10 records kan mange-til-mange tabellen indeholde 0 - 90 records.


Indledningsvis selekteres den del af tabel 1, der skal arbejdes med. Indenfor denne afgrænsning arbejdes der derefter i 'multi-slect' med hvilke tabel02-data, der skal være aktive / passive. I 'multi-select' lister kasn der selekteres to eller flere samtidige valg ved at holde CTRL ned under selekteringen.




Tabeller


En simpel struktur for tabeller til 'til / fra' kan se sådan ud:


mangemange


Der kan evt. være knyttet flere felter til tabel01 og tabel02.




Interface



Viser styring af 'hvem kan hvad'.
Ved at vende felt- og tabelnavne kan stort set samme kode anvendes til 'hvad kan hvem'.
mangemange




Kode


Koden, der skal bruges til at bygge en 2-tabels multiple select, skønnes at være så ens fra gang til gang, at det næsten vil være nok at lave 'søg-og-erstat' på de enkelte variabler, databasefelter etc.


Koden kan se sådan ud:


<h2><i class="fa fa-html5"></i> Redaktør Administration</h2>
<div class="panel panel-info">
   <div class="panel-body">

      <div id="catvalg">
<!-- udtræk data fra tabel 1 og indsæt i drop down menu -->
         <?php
         $category_title = "";
         $category_id = "";

         if (isset ($_POST['category_id'])) //start POST
            {
            $category_id = $_POST['category_id'];
// Data til drop-down menu
            $sek2_query = "SELECT * FROM categories where category_id = $category_id";
            $sek2_result = mysqli_query($database_link, $sek2_query) or die(mysqli_error($database_link));
            $sek2_antal = mysqli_num_rows ($sek2_result);
            if($sek2_antal == 1)
            $sek2_row = mysqli_fetch_assoc ($sek2_result);
            $category_title = $sek2_row['category_title'];
            }
            ?>

            <?php
// Data til drop-down menu
            $sek_query = "SELECT * FROM categories";
            $sek_result = mysqli_query($database_link, $sek_query) or die(mysqli_error($database_link));
            $sek_antal = mysqli_num_rows ($sek_result);
            ?>

<!-- form til valg fra tabel 1 -->
            <form method='post' action='index.php?page=editors#'>
            <table>
            <?php
            if ($category_id != "")
            {
            echo '<tr><td>';
            echo '<select name="$category_id">';
            echo '<option value="'. $category_id . ' " > '. $category_title . ' </option> ' ;
            }
            else
            {
            echo '<tr><td><select class="hei35 borderrad04" name="category_id"><option value="0">Vælg fra menuen</option>';
            }
            //Drop-down menu
            while ($sek_row = mysqli_fetch_assoc ($sek_result))
            { echo '<option value=" '. $sek_row['category_id'] .' "> '. $sek_row['category_title'] .' </option>';}
            echo '</select></td>';
            echo "<td>   </td><td><input class='btn btn-default' type='submit' name='category' value='Vælg' /></td><td></td></tr>";
            ?>
            </table>
            </form>
<!-- tabel-1 form slut -->
         </div>
<!-- udtræk af data fra tabel-1slut-->

         <?php
// vedligehold mange-til-mange tabel start

// tilføj records til mange-til-mange tabel fra 'not'
         if (isset($_POST['not_editor']) && is_array($_POST['not_editor']))
         {
            foreach ($_POST['not_editor'] as $user)
            {
            $user = ($user * 1); // quick int convertion
            $query = "INSERT INTO category_editors VALUES($user, $category_id )";
            mysqli_query($database_link, $query) or die(mysqli_error($database_link));
            }
         }

// slet records i mange-til-mange tabel fra 'is'
         if (isset($_POST['is_editor']) && is_array($_POST['is_editor']))
         {
            foreach ($_POST['is_editor'] as $user)
            {
            $user = ($user * 1); // quick int convertion
            $query = " DELETE FROM category_editors
            WHERE fk_users_id = $user
            AND fk_categories_id = $category_id";
            mysqli_query($database_link, $query) or die(mysqli_error($database_link));
            }
         }
// vedligehold mange-til-mange tabel slut

         if (isset($category_id) && $category_id!="")
         {
         ?>

<!-- Start forms til 'tabel-2' -->
         <form method='post' name="not_editor" multiple="multiple" action='index.php?page=editors#' >
         <form method='post' name="is_editor" multiple="multiple" action='index.php?page=editors#' >

<!-- venstre skærmdel med indsættelse og valg af data fra tabel2 i venstre multiple-felt. Knyttet til form 'not -->
         <div id="redaktorer">
            <div id="redaktorer-left">
               <h3>Ikke Redaktører</h3>

               <select class="form-control" name="not_editor[]" multiple="multiple" size="20">
               <?php
               $query = "
               SELECT user_id, user_name
               FROM users
               WHERE user_id NOT IN (
               SELECT fk_users_id
               FROM category_editors
               WHERE fk_categories_id = $category_id
               )
               AND fk_roles_id = 3";// 3 == redaktør
               $result = mysqli_query($database_link, $query) or die(mysqli_error($database_link));
                  while ($row = mysqli_fetch_assoc($result))
                  {
                  echo '<option value="'.$row['user_id'].'">'.$row['user_name'].'</option>';
               }
               ?>
               </select>
            </div> <!-- redaktorer-left slut -->

<!-- højre skærmdel med indsættelse og valg af data fratabel2 i hæjre multiple-felt. Knyttet til form 'is -->

            <div id="redaktorer-right">
               <h3>Redaktører</h3>
               <select class="form-control" name="is_editor[]" multiple="multiple" size="20">
               <?php
               $query = "
               SELECT user_id, user_name
               FROM users
               INNER JOIN category_editors ON fk_users_id = user_id
               WHERE fk_categories_id = $category_id
               AND fk_roles_id = 3";// 3 == redaktør
               $result = mysqli_query($database_link, $query) or die(mysqli_error($database_link));
                  while ($row = mysqli_fetch_assoc($result))
                  {
                  echo '<option value="'.$row['user_id'].'">'.$row['user_name'].'</option>';
                  }
               ?>
               </select>
            </div> <!-- redaktorer-right slut -->

<!-- midterste skærmdel med knapper til 'not' og 'is' -->

            <div id="redaktorer-center">
               <style> .btn-success {
               font-family: FontAwesome, verdana;
               }
               </style>
               <div class="mar01">
               <table><tr><td>
                  <input type="hidden" name="category_id" value="<?php echo $category_id ?>">
                  <input class="btn btn-success" type="submit" name="is_editor" value="&#xf061; Vælg til  "/>
                  </form>
               </td></tr><tr><td>
                  <input type="hidden" name="category_id" value="<?php echo $category_id ?>">
                  <input class="btn btn-success" type="submit" name="not_editor" value="&#xf060; Vælg fra" />
                  </form>
<!-- Slut forms til 'tabel-2' -->
               </td></tr></table>
               </div>

            </div> <!-- redaktorer-center slut -->

            <div class="clearboth"></div>

         </div> <!-- redaktorer slut -->
         <?php
         } // isset category slut
         ?>
   </div> <!-- panel-body slut -->
</div>




















x
x