Avatar billede Slettet bruger
13. juli 2017 - 22:47 Der er 31 kommentarer

Mini-system til håndtering af medlemmer

Hej eksperter,

Jeg søger lidt PHP-programmeringshjælp.
1. Jeg skal have en dropdown-boks med alle "Hold", så man kan vælge det ønskede hold - Gerne som AJAX-kald.
2. Ud fra ovenstående valg skal der fremkomme et komplet liste (tabelvisning) med alle de "Medlemmer" der er tilknyttet det valgte hold. I visningen skal man kunne se følgende informationer i nævnt rækkefølge; # (nummer), Navn på medlem, Alder, Aldersgruppe, "Tre træninger" og antal træninger.
3. Punktet "tre træninger" skal indeholde nogle select-muligheder, så man kan lave en afkrydsning af hvem der deltager i de enkelte træninger - og samtidig gemme det i databasen.

Min nuværende databasestruktur ser ud som følgende;
CREATE TABLE `tbl_hold` (
  `id` int(11) NOT NULL,
  `Navn` varchar(255) CHARACTER SET latin1 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `tbl_hold` (`id`, `Navn`) VALUES
(1, 'delfin'),
(2, 'søløver'),
(3, 'vandhunde'),
(4, 'motion')

CREATE TABLE `tbl_map_medlem_hold_traeninger` (
  `id` int(11) NOT NULL,
  `hold_id` int(11) NOT NULL,
  `medlem_id` int(11) NOT NULL,
  `training_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `tbl_map_medlem_hold_traeninger` (`id`, `hold_id`, `medlem_id`, `training_id`) VALUES
(1, 1, 1, 1),
(2, 1, 2, 1),
(3, 2, 2, 2),
(4, 1, 3, 1);

CREATE TABLE `tbl_medlem` (
  `id` int(11) NOT NULL,
  `fornavn` varchar(50) COLLATE utf8_danish_ci NOT NULL,
  `efternavn` varchar(50) COLLATE utf8_danish_ci NOT NULL,
  `dob` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `tbl_medlem` (`id`, `fornavn`, `efternavn`, `dob`) VALUES
(1, 'anders', 'and', '2010-06-01 00:00:00'),
(2, 'palle ', 'gulvballe', '2010-07-09 00:00:00');

CREATE TABLE `tbl_traeninger` (
  `id` int(11) NOT NULL,
  `Dato` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `tbl_traeninger` (`id`, `Dato`) VALUES
(1, '2017-07-02'),
(2, '2017-07-18');

ALTER TABLE `tbl_hold`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tbl_map_medlem_hold_traeninger`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tbl_medlem`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tbl_traeninger`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tbl_hold`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

ALTER TABLE `tbl_map_medlem_hold_traeninger`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

ALTER TABLE `tbl_medlem`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

ALTER TABLE `tbl_traeninger`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

Er der en venlig sjæl der kan hjælpe mig med ovenstående opgave? :-)
Avatar billede jakobdo Ekspert
13. juli 2017 - 23:20 #1
Vil du "bare" have noget kode der gør alt hvad du ønsker eller ønsker du hjælp til selv at nå i mål ?
Jeg kan sagtens være behjælpelig på begge punkter, vil bare gerne vide hvad du vil og ønsker. :)
Avatar billede Slettet bruger
13. juli 2017 - 23:24 #2
Hej jakobdo,

Jeg vil rigtigt gerne lære det, men for at det kan give mening for mig, så har jeg brug for at se noget fungerende kode :-) Så hvis du kan være "bare" kan være behjælpelig med noget kode der fungerer, så vil jeg blive RIGTIG glad :-)
Avatar billede jakobdo Ekspert
13. juli 2017 - 23:33 #3
Hvis jeg var dig, ville jeg starte med at loade dine holde i en dropdown liste.
Når den er klar, så kan du kigge på noget javascript, der skyder et "ajax" kald af og loader medlemmer.
Hvis du ønsker det lidt mere sejt og moderne, kunne du kigge på angularjs, men ellers lad os starte på den "nemme" måde.
Avatar billede Slettet bruger
13. juli 2017 - 23:35 #4
Jeps. Jeg er helt enig med dig (tror jeg) ;-) Det lyder rigtigt fint, men problemet er at jeg ikke kan få det skrevet, da jeg ikke er så programmeringskyndig endnu :-)
Avatar billede olsensweb.dk Ekspert
14. juli 2017 - 09:16 #5
du skal starte med at lave en tabel mere der definerer dine aldersgrupper
CREATE TABLE `tbl_age_interval` (
  `id` int(11) NOT NULL,
  `name` varchar(50) COLLATE utf8_danish_ci NOT NULL,
  `age_from` int(11) NOT NULL,
  `age_to` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `tbl_age_interval` (`id`, `name`, `age_from`, `age_to`) VALUES
(1, 'U5', 0, 4),
(2, 'bt 05 - 10', 5, 9),
(3, 'bt 10 - 14', 10, 14);

ALTER TABLE `tbl_age_interval`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tbl_age_interval`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;



så er dette fra #3
>ville jeg starte med at loade dine holde i en dropdown liste.
Når den er klar, så kan du kigge på noget javascript, der skyder et "ajax" kald af og loader medlemmer.<

til at have med at gøre

connect.php
<?php
$hostname = 'localhost';
$username = 'root';
$password = '';
$db = "test";
$conn = new mysqli($hostname, $username, $password, $db);
// check connection
if (!$conn) {
    echo 'Der opstod en fejl.';
    exit();
}
$conn->set_charset("utf8");
?>


request_medlemmer.php
<?php
require("connect.php");
$arr = array();
$id = $_GET['hold'];

$sql = "SELECT tbl_medlem.id, tbl_medlem.fornavn, tbl_medlem.efternavn, tbl_medlem.dob FROM tbl_map_medlem_hold_traeninger JOIN tbl_medlem ON tbl_medlem.id = tbl_map_medlem_hold_traeninger.medlem_id WHERE tbl_map_medlem_hold_traeninger.hold_id =" . $id;
$rs = $conn->query($sql);
while ($row = $rs->fetch_assoc()) {
    $ar = array();
   
    $ar['id'] = $row['id'];
    $ar['fornavn'] = $row['fornavn'];
    $ar['efternavn'] = $row['efternavn'];

    $from = new DateTime($row['dob']);
    $to  = new DateTime('today');
    $ar['age'] = $from->diff($to)->y;
   
   
    $sql1 = "SELECT name FROM tbl_age_interval WHERE ".$ar['age']." BETWEEN age_from AND age_to";
    $rs1 = $conn->query($sql1);
    if($rs1){
        $row1 = $rs1->fetch_assoc();   
        $ar['age_group'] = $row1['name'];
    }
    else{
        $ar['age_group'] = "unknown";
    }

   
    $arr[]=$ar;
}
echo json_encode($arr);
?>


index.php
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
        <title>demo</title>
        <style type="text/css">

        </style>
        <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $("#hold").change(function () {                   
                    var js_ar = new Array();
                    var url = "request_medlemmer.php";
                    var params = "hold=" + $("#hold").val();
                    $.ajax({
                        type: "GET",
                        url: url,
                        data: params,
                        success: function (data) {     
                            console.log(data);
                            js_ar = $.parseJSON(data);                               
                            var table = '<table>';
                            $.each(js_ar, function (index, item) {                           
                                table += '<tr>';
                                table += '<td>' + item.id + '</td>';
                                table += '<td>' + item.fornavn + '</td>';
                                table += '<td>' + item.efternavn + '</td>';
                                table += '<td>' + item.age + '</td>';
                                table += '<td>' + item.age_group + '</td>';                   
                                table += '</tr>';
                            });
                            table += '</table>';
                            $("#myTable").html(table);
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <?php
        require('connect.php');
        $sql = "SELECT * FROM tbl_hold";
        $rs = $conn->query($sql);
        echo '<select name="hold" id="hold">';
        echo "<option value='0'>vælg hold</option>";
        while ($row = $rs->fetch_assoc()) {
            echo "<option value='" . $row['id'] . "'>" . $row['Navn'] . "</option>";
        }
        echo "</select>";
        ?>
        <div id="myTable"> <!-- indhold kommer via AJAX --> </div>
    </body>
</html>


dette > "Tre træninger" og antal træninger. < må du definerer nærmere
prøv at smide nogle data ind i tbl_map_medlem_hold_traeninger og kom med forvendtet output
Avatar billede Slettet bruger
14. juli 2017 - 11:52 #6
Hej olsensweb.dk,

Først og fremmest - Tusind tak :-)

I forhold til det med de enkelte træninger, så kan jeg prøve at beskrive det lidt anderledes - Se følgende billede: https://www.dropbox.com/s/rqwi0a5r4f175ko/Eksempel.png?dl=0

Man skal kunne se tre træninger. De to træninger længest til venstre skal være de seneste to træninger (altså træninger hvor der er krydset af - disse skal være disabled, så man bare kan se dem), og den træning længest til højre skal være dagens træning. Det kunne være dejligt hvis de enkelte markeringer kunne blive gemt i databasen ved hjælp af AJAX, så man slipper for pageload ved gem.

Derudover skal systemet gerne automatisk tælle sammen, hvor mange træninger det enkelte medlem har deltaget i.

Jeg håber at det giver mening?
Avatar billede jakobdo Ekspert
14. juli 2017 - 12:44 #7
Jamen alt giver fint mening.
Spørgsmålet er nok bare om "opgaven" hører til i denne tråd eller bør flyttes til OPGAVER og du blot ønsker en færdig løsning.
Avatar billede Slettet bruger
14. juli 2017 - 12:52 #8
Hej igen jakobdo,

Jeg troede jeg havde placeret det i opgaver :-) Jeg ønsker egentligt en kombination af noget færdigt og fungerende kode, samt at lære det ved at tilpasse det til det jeg allerede har lavet.

olsensweb.dk har hjulpet mig tidligere i forhold til at skabe en god database-struktur, hvilket har været en stor hjælp.
Avatar billede jakobdo Ekspert
14. juli 2017 - 13:33 #9
Vega87: Min fejl.. Sorry. Det overså jeg. Jeg sidder bare her og spiller smart. :)
Avatar billede jakobdo Ekspert
14. juli 2017 - 13:34 #10
Jeg lader Olsen kører videre, han er allerede godt inde i din kode, kan jeg se og forstå. ;)
Avatar billede Slettet bruger
14. juli 2017 - 13:59 #11
Det gør skam ingenting ;-) Du er altid velkommen til at byde ind med idéer. Jeg håber at olsensweb.dk kan hjælpe mig videre - det har han i hvert fald været rigtig god til indtil videre :-)
Avatar billede jakobdo Ekspert
14. juli 2017 - 14:40 #12
Hvis olsen ikke melder retur, skal jeg nok kigge på noget i aften eller senere. :)
Avatar billede olsensweb.dk Ekspert
14. juli 2017 - 17:42 #13
jeg tror jeg ligge den fra mig nu, her er hvad jeg har nået indtil vidre

request_medlemmer.php
<?php

require("connect.php");
$arr = array();
$id = (int) $_GET['hold'];



$sql = "SELECT DISTINCT tbl_medlem.id, tbl_medlem.fornavn, tbl_medlem.efternavn, tbl_medlem.dob FROM tbl_map_medlem_hold_traeninger JOIN tbl_medlem ON tbl_medlem.id = tbl_map_medlem_hold_traeninger.medlem_id WHERE tbl_map_medlem_hold_traeninger.hold_id =" . $id;
$rs = $conn->query($sql);
while ($row = $rs->fetch_assoc()) {
    $ar = array();

    $ar['id'] = $row['id'];
    $ar['fornavn'] = $row['fornavn'];
    $ar['efternavn'] = $row['efternavn'];
   
   
    $from = new DateTime($row['dob']);
    $to = new DateTime('today');
    $ar['age'] = $from->diff($to)->y;


    $sql1 = "SELECT name FROM tbl_age_interval WHERE " . $ar['age'] . " BETWEEN age_from AND age_to";
    $rs1 = $conn->query($sql1);
    if ($rs1) {
        $row1 = $rs1->fetch_assoc();
        $ar['age_group'] = $row1['name'];
    } else {
        $ar['age_group'] = "unknown";
    }

    // bør nok joine tbl_traeninger så det kun er træninger i år / inden for de sidste 12 måneder
    $sql2 = "SELECT count(id) AS antal FROM tbl_map_medlem_hold_traeninger where hold_id = ".$id." and medlem_id = ".$ar['id'];
    $rs2 = $conn->query($sql2);
    $row2 = $rs2->fetch_assoc();
    $ar['antal'] = $row2['antal'];   
   
    $arr[] = $ar;
}
echo json_encode($arr);
?>


index.php
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
        <title>demo</title>
        <style type="text/css">
            table, th, td {
                border: 1px solid black;
            }
        </style>
        <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $("#hold").change(function () {
                    var js_ar = new Array();
                    var url = "request_medlemmer.php";
                    var params = "hold=" + $("#hold").val();
                    $.ajax({
                        type: "GET",
                        url: url,
                        data: params,
                        success: function (data) {
                            // console.log(data);
                            js_ar = $.parseJSON(data);
                            var table = '';
                            $.each(js_ar, function (index, item) {
                                table += '<tr>';
                                table += '<td>' + item.id + '</td>';
                                table += '<td>' + item.fornavn + ' ' + item.efternavn + '</td>';
                                table += '<td>' + item.age + '</td>';
                                table += '<td>' + item.age_group + '</td>';
                                table += '<td> <input type="checkbox" name="dates" value=""></td>';
                                table += '<td> <input type="checkbox" name="dates" value=""></td>';
                                table += '<td> <input type="checkbox" name="dates" value=""></td>';
                                table += '<td>' + item.antal + '</td>';
                                table += '</tr>';
                            });
                            $("#myTable").find("tr:gt(1)").remove();
                            $('#myTable tr:last').after(table);
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <?php
        require('connect.php');
        $sql = "SELECT * FROM tbl_hold";
        $rs = $conn->query($sql);
        echo '<select name="hold" id="hold">';
        echo "<option value='0'>vælg hold</option>";
        while ($row = $rs->fetch_assoc()) {
            echo "<option value='" . $row['id'] . "'>" . $row['Navn'] . "</option>";
        }
        echo "</select>";
        ?>
        <table id="myTable">
            <tr>
                <td>id</td>
                <td>Navn</td>
                <td>Alder</td>
                <td>Aldersgruppe</td>
                <td colspan="3">træninger</td>
                <td>Antal træninger</td>
            </tr>

            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <?php
                $sql = "SELECT * FROM `tbl_traeninger` ORDER BY Dato DESC LIMIT 3";
                $rs = $conn->query($sql);
                while ($row = $rs->fetch_assoc()) {
                    echo "<td>" . $row['Dato'] . "</td>";
                }
                ?>
                <td></td>
            </tr>
            <!-- indhold kommer via AJAX -->
        </table>
    </body>
</html>



#12
god fornøjelse :), ser frem til at se din vertion.
Avatar billede Slettet bruger
14. juli 2017 - 18:39 #14
Mange tak for det, olsensweb.dk :-)

@jakobdo: Jeg kunne helt bestemt bruge din hjælp nu ;-) Nu skal man kunne gemme nogle valg i databasen (MEGET gerne med AJAX) - altså hvilke medlemmer der deltager i hvilke træninger. Jeg tænker vel at der i den forbindelse også skal være en forbindelse til hvilket hold medlemmet er tilknyttet?
Avatar billede jakobdo Ekspert
14. juli 2017 - 21:38 #15
Som jeg forstår din struktur, så har du nu:

medlem
hold
træning

Og du skal så bruge en tabel til at koble:

medlem til et hold
og
medlem til træning
Spørgsmålet er vel om træning altid er koblet til et hold?
Eller om træning sagtens kan gå på tværs af hold?

At gemme data via ajax, er "nemt".
Avatar billede Slettet bruger
14. juli 2017 - 21:47 #16
Jeg har på nuværende tidspunkt følgende struktur;
https://www.dropbox.com/s/fpy0lyqwr3lx852/database.pdf?dl=0

På nuværende tidspunkt har jeg en kobling mellem "Medlem", "Hold" og "Træning".

- Et medlem kan være på flere hold.
- Et hold har mange forskellige træninger.
- Træningerne/datoer kan passe på flere forskellige hold, da flere hold godt kan træne samme dage.

Giver det mening?
Avatar billede Slettet bruger
14. juli 2017 - 21:54 #17
Har du brug for at se filerne?
Avatar billede jakobdo Ekspert
14. juli 2017 - 21:56 #18
Forstået.
Men er der er der ikke begrænset pladser på de forskellige hold ?
Hvis jo, så bliver du jo nød til at vide om bruger 1, tilmelder sig hold 1 eller hold 2 / træning en given dag.
Eller misforstår jeg ?
Avatar billede Slettet bruger
14. juli 2017 - 22:04 #19
Der er som udgangspunkt ikke nogen begrænsning på hvor mange medlemmer der kan være på de enkelte hold, og et enkelt medlem kan sagtens være tilknyttet flere forskellige hold.

Jeg kommer lige med et eksempel:
Hans Hansen er medlem i Testklub.
I Testklub har de to hold der henholdsvis har træninger tirsdage og torsdage.
Hans Hansen er tilmeldt to forskellige hold. Hold A der har træning tirsdage (fra september til maj), og Hold B der har træning torsdage (fra september til maj).

Så det skal være muligt for Testklub at kunne registrere hvilke træninger Hans Hansen har deltaget i efter man har valgt det hold Hans Hansen deltager på.
Avatar billede Slettet bruger
14. juli 2017 - 22:07 #20
Tanken er derfor følgende;
Et "Medlem" er på et eller flere "Hold", og et "Hold" har mange "Træninger".
Avatar billede jakobdo Ekspert
14. juli 2017 - 22:24 #21
Så vi har følgende:

medlem

hold

medlem_hold tabel

træning

træning_hold tabel

Og så mangler der en:

træning_hold_medlem tabel, er det ikke korrekt forstået ?
Avatar billede Slettet bruger
14. juli 2017 - 22:28 #22
Nu tror jeg at jeg er lidt på bar bund. Jeg mener da at jeg har en tabel der forbinder træning, medlem og hold. Men har du en anden model for det, så er jeg åben for at høre om det :-)
Avatar billede Slettet bruger
14. juli 2017 - 22:28 #23
Men jo det lyder korrekt det du skriver!
Avatar billede jakobdo Ekspert
14. juli 2017 - 22:35 #24
Hvis jeg har forstået dig korrekt, ville jeg lave:

medlem:
id, navn
1, Hans Hansen

hold:
id, navn
1, søløve

træning:
id, dato
1, 2017-07-15 20:00
2, 2017-07-16 19:00

medlem_hold:
medlem_id, hold_id
1, 1 (Hans Hansen er tilmeldt hold Søløve)

hold_træning:
id, hold_id, træning_id
1, 1, 1 (hold Søløve har træning 2017-07-15 20:00)
2, 1, 2 (hold Søløve har træning 2017-07-16 19:00)

medlem_hold_træning:
hold_træning, medlem_id, status
1, 1, 0 (Hans Hansen tilmeldte sig ikke i træningen, derfor 0)
2, 1, 1 (Hans Hansen tilmeldte sig i træningen, derfor 1)

Jeg tænker noget i den stil der.
Men måske jeg overser noget, som Olsenweb har indsigt i.
Avatar billede jakobdo Ekspert
14. juli 2017 - 22:36 #25
PS: Jeg har udeladt data som alder, U12 osv.. for at gøre det "nemmere" i første omgang.
Avatar billede Slettet bruger
14. juli 2017 - 22:37 #26
Der er korrekt :-)
Avatar billede Slettet bruger
14. juli 2017 - 22:39 #27
Ja, det er også ok i første omgang, men tænker du at det vil være muligt at tilføje det på et senere tidspunkt?
Avatar billede jakobdo Ekspert
14. juli 2017 - 22:41 #28
selvfølgelig.. Har du intet kode nu, så det skal laves helt fra bunden?
Avatar billede Slettet bruger
14. juli 2017 - 22:47 #29
Jo jeg har noget kode - Jeg har hele grundstrukturen designmæssigt, og en smule fungerende kode.
Avatar billede jakobdo Ekspert
14. juli 2017 - 22:50 #30
Så vi snakker om dit nuværende system skal udbygges / omstruktureres?
Avatar billede Slettet bruger
14. juli 2017 - 22:55 #31
Jeg har følgende kode pt.

--- Index.php ---
<?php
require ('connection.php');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
<!DOCTYPE html>
<html lang="da">

<head>

    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <meta charset="UTF-8">
       
    <title>Test</title>
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link href="css/scrolling-nav.css" rel="stylesheet">
</head>

<body id="page-top" data-spy="scroll" data-target=".navbar-fixed-top">

    <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
        <div class="container">
            <div class="navbar-header page-scroll">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
            </div>

            <div class="collapse navbar-collapse navbar-ex1-collapse">
                <ul class="nav navbar-nav">
                    <li>
                        <a class="page-scroll" href="#page-top">Velkommen</a>
                    </li>
                    <li>
                        <a class="page-scroll" href="#about">Afkrydsningsliste</a>
                    </li>
                    <li>
                        <a class="page-scroll" href="#services">Tilføj ny spiller</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>

    <section id="intro" class="intro-section">
        <div class="container">
            <div class="row">
                <div class="col-lg-12">
                  <div class="page-header">
                    <h2>VELKOMMEN<br><small>Oversigt over alle klubbens træninger</small></h2>
                  </div>
                      <?php
                        $sql = "SELECT hold_id, count(tbl_map_medlem_hold_traeninger.id) AS antal, tbl_hold.Navn FROM tbl_map_medlem_hold_traeninger JOIN tbl_hold ON tbl_hold.id = tbl_map_medlem_hold_traeninger.hold_id GROUP BY Navn";
                        $result = $conn->query($sql);
                        while ($row = $result->fetch_assoc()) {
                          echo "<div class='well well-sm'>";
                          echo "<b>"; echo $row['Navn']; echo "</b>";               
                          echo " ("; if($row['antal'] > 1) { echo $row['antal']; echo " tilmeldte spillere)"; } else { echo $row['antal']; echo " tilmeldt spiller)"; } 
                          echo "</div>";
                        }   
                      ?>
                </div>
            </div>
        </div>
    </section>
   
    <section id="about" class="about-section">
        <div class="container">
            <div class="row">
                <div class="col-lg-12">
                    <div class="page-header">
                      <h2>AFKRYDSNINGSLISTE<br><small>Vælg træning - Sørg for afkrydsning af alle spillere</small></h2>
                    </div>
                    <?php
                    $sql = "SELECT * FROM tbl_hold";
                    $rs = $conn->query($sql);
                    echo '<select class="form-control" name="hold" id="hold">';
                    echo "<option value='0'>Vælg træning</option>";
                    while ($row = $rs->fetch_assoc()) {
                        echo "<option value='" . $row['id'] . "'>" . $row['Navn'] . "</option>";
                    }
                    echo "</select>";
                    ?>
                    <br><br>
                    <table class="table" style="width:100%" id="myTable">
                      <thead class="thead-inverse">
                      <tr>
                          <th>#</th>
                          <th>Navn</th>
                          <th>Alder</th>
                          <th>Aldersgruppe</th>
                          <?php
                          $sql = "SELECT * FROM `tbl_traeninger` ORDER BY Dato DESC LIMIT 2";
                          $rs = $conn->query($sql);
                          while ($row = $rs->fetch_assoc()) {
                              echo "<th>" . date('d-m-Y', strtotime($row['Dato'])) . "</th>";
                          }
                          ?>
                          <th>Antal</th>
                      </tr>
                      </thead>
                      <tbody>
                        <!-- indhold kommer via AJAX -->
                      </tbody>
                    </table>
                </div>
            </div>
        </div>
    </section>
   
    <div class="noprint" style="height:100%"><!-- Services Section -->
    <section id="services" class="services-section">
        <div class="container">
            <div class="row">
                <div class="col-lg-12">
                    <div class="page-header">
                      <h2>TILFØJ NY SPILLER<br><small>Udfyld alle informationer for at tilføje en ny spiller</small></h2>
                    </div>
                    <br><br>
                    <form class="form-horizontal" action="" method="POST">
                      <div class="form-group">
                        <label class="col-sm-2 control-label">Navn</label>
                        <div class="col-sm-10">
                          <input class="form-control" />
                        </div>
                      </div>
                      <div class="form-group">
                        <label class="col-sm-2 control-label">Fødselsdato</label>
                        <div class="col-sm-10">
                          <input class="form-control" />
                        </div>
                      </div>
                      <div class="form-group">
                        <label class="col-sm-2 control-label">Træninger</label>
                        <div class="col-sm-10">
                        <select id="dates-field2" class="multiselect-ui form-control" multiple="multiple">
                        </select>
                        </div>
                      </div>
                        <div style="float:right;"><button type="submit" id="submit" name="submit" class="btn btn-primary">Tilføj ny spiller</button></div>
                    </form>
                </div>
            </div>
        </div>
    </section></div>
   
   
    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
    <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
    <script type="text/javascript">
      $(document).ready(function () {
        $("#hold").change(function () {                   
          var js_ar = new Array();
          var url = "request_medlemmer.php";
          var params = "hold=" + $("#hold").val();
          $.ajax({
            type: "GET",
            url: url,
            data: params,
            success: function (data) {     
                //console.log(data);
                js_ar = $.parseJSON(data);         
                var table = '';
                $.each(js_ar, function (index, item) {                           
                    table += '<tr>';
                    table += '<td align="left">' + item.id + '</td>';
                    table += '<td align="left">' + item.fornavn + ' ' + item.efternavn + '</td>';
                    table += '<td align="left">' + item.age + '</td>';
                    table += '<td align="left">' + item.age_group + '</td>';
                    table += '<td align="left"> <input type="checkbox" name="dates" value=""></td>';
                    table += '<td align="left"> <input type="checkbox" name="dates" value=""></td>';
                    table += '<td align="left">' + item.antal + '</td>';
                    table += '</tr>';
                });
                $('#myTable tr').slice(1).remove();
                $('#myTable tr:last').after(table);
            }
          });
        });
      });
    </script>
    <!-- jQuery -->
    <script src="js/jquery.js"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="js/bootstrap.min.js"></script>

    <!-- Scrolling Nav JavaScript -->
    <script src="js/jquery.easing.min.js"></script>
    <script src="js/scrolling-nav.js"></script>
   
    <script type="text/javascript">
    $(function() {
        $('.multiselect-ui').multiselect({
            includeSelectAllOption: true
        });
    });
    </script>
</body>

</html>

--- Request_medlemmer.php ---
<?php

require("connection.php");
$arr = array();
$id = (int) $_GET['hold'];



$sql = "SELECT DISTINCT tbl_medlem.id, tbl_medlem.fornavn, tbl_medlem.efternavn, tbl_medlem.dob FROM tbl_map_medlem_hold_traeninger JOIN tbl_medlem ON tbl_medlem.id = tbl_map_medlem_hold_traeninger.medlem_id WHERE tbl_map_medlem_hold_traeninger.hold_id =" . $id;
$rs = $conn->query($sql);
while ($row = $rs->fetch_assoc()) {
    $ar = array();

    $ar['id'] = $row['id'];
    $ar['fornavn'] = $row['fornavn'];
    $ar['efternavn'] = $row['efternavn'];
   
   
    $from = new DateTime($row['dob']);
    $to = new DateTime('today');
    $ar['age'] = $from->diff($to)->y;


    $sql1 = "SELECT name FROM tbl_age_interval WHERE " . $ar['age'] . " BETWEEN age_from AND age_to";
    $rs1 = $conn->query($sql1);
    if ($rs1) {
        $row1 = $rs1->fetch_assoc();
        $ar['age_group'] = $row1['name'];
    } else {
        $ar['age_group'] = "unknown";
    }

    $sql2 = "SELECT count(id) AS antal FROM tbl_map_medlem_hold_traeninger where hold_id = ".$id." and medlem_id = ".$ar['id'];
    $rs2 = $conn->query($sql2);
    $row2 = $rs2->fetch_assoc();
    $ar['antal'] = $row2['antal'];   
   
    $arr[] = $ar;
}
echo json_encode($arr);
?>

Jeg ved ikke hvad der vil være bedst/nemmest?
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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