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:
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'. |
|
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=" 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=" 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>
|
|