Indeling cursis database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Francoi gckx

Francoi gckx

13/05/2013 23:09:03
Quote Anchor link
Ik heb een tabel gemaakt met een id en cursistnaam,
die tabel haal ik op en zet ik in een lijst,
klik ik op een naam open een ander pagina,
voor zover geen probleem.

Nu wil ik in die pagina dit:

er zijn 6 boeken en x aantal toetsen.
Ik wil bijvoorbeeld dit hebben op mij pagina

titel | checkbox af ja/nee | klein-textarea toets
Boek 1 | af ja of nee | goed gemaakt
Boek 2 | af ja of nee | onvoldoende
Boek 3 | af ja of nee | zat met de volgende problemen..
Boek 4 | af ja of nee | herkansen
enz

Kan iemand mij hiermee helpen?
 
PHP hulp

PHP hulp

17/11/2024 20:25:22
 
Bas IJzelendoorn

Bas IJzelendoorn

13/05/2013 23:34:35
Quote Anchor link
Aan het voorbeeld van de 2e tabel zou je een veld met het id van de cursist kunnen toevoegen. Vervolgens maak je een query met alle toetsen die wel of niet behaald zijn. Het id van de cursist is dan het koppel_id. Je kan eventueel het ook nog anders doen, dan koppel je verschillende onderdelen en maakt het niet uit of je een boek/toets of cursist extra toevoegd:

Cursisten
cursist_id
cursistnaam

Boeken
boek_id
boeknaam (boek 1, 2, etc.)

toetsen
toets_id
toetsdatum (altijd handig)
afgemaakt (<- checkbox af ja/nee)
toetsresultaat (<- behaald/niet behaald/etc.)


Koppeltabel
Koppel_id
cursist_id
boek_id
toets_id
 
Francoi gckx

Francoi gckx

13/05/2013 23:52:25
Quote Anchor link
Hoi Bas reuze bedankt, het is nu te laat voor mij om jou database "uit te proberen"
morgen zal ik dat zeker met grote zin doen.

Maar wat denk je hiervan.

Eerste tabel zo:
crs_id crs_naam

Tweede tabel zo:
crs_naam | boek_1 | boek_2 | boek_3 | boek_4 | boek_5 | boek_6

Dan geef ik elke boek_1 | boek_2 enz.. de standaardwaarde: niet af

Zo voeg ik dan de cursist toe:
(Ik heb de formulier eruit gelaten)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    if (isset($_POST['addCrs']))
        {

            include_once('config/db-connect.php');
            $stmt = $dbo->prepare("INSERT INTO tbl_crs_records (crs_naam)
                    VALUES (:naam)"
);
            $stmt->bindParam(':naam', $_POST['naam'], PDO::PARAM_STR);
            $stmt1 = $dbo->prepare("INSERT INTO tbl_crs_boeken (crs_naam)
                    VALUES (:naam)"
);
            $stmt1->bindParam(':naam', $_POST['naam'], PDO::PARAM_STR);
        if ($stmt->execute() && $stmt1->execute())
            {
    
                $error['success'] = 'Cursist toegevoegd...';
                $_GET['page'] = 'curs';
                include_once('index.php');
            }
        }

?>


En dan naar de individuele cursist pagina dit:
<table>
<tr>
<th>Deel 1</th>
<th>Deel 2</th>
<th>Deel 3</th>
<th>Deel 4</th>
<th>Deel 5</th>
<th>Deel 6</th>
</tr>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php  
include_once('config/db-connect.php');
$show = $dbo->query("SELECT
                            crs_naam,
                            boek_1,
                            boek_2,

                                FROM tbl_crs_autocad
                                WHERE crs_naam = '"
.$_SESSION['crs_naam'][$_GET['id']]."'");                    
    if ($show->rowCount() != 0)
        {

            foreach ($show as $row)
                {

                    <
tr>
                        <
td>
                        <
select>
                        <
option value="<?php echo $row['boek_1'];?>">niet af</option>
                        <
option value="afgerond">afgerond</option>
                        <
/select>
                        <
/td>
                        <
td>
                        <
select>
                        <
option value="<?php echo $row['boek_2'];?>">niet af</option>
                        <
option value="afgerond">afgerond</option>
                        <
/select>
                        <
/td>
?>


Ohja en dan ergens een submit knop om de select option te veranderen naar afgerond of wat dan ook

Hoe denk jij over dit concept? ik zei checkbox met wel of niet afgemaakt maar een select list kan natuurlijk denk ik ook
Het is maar even snel gedaan dit concept, zodat ik wat beeldvorming heb hoe ik het ga aanpakken (nadat ik jou post ook heb uitgeprobeerd) maar wat denk je?
Gewijzigd op 13/05/2013 23:53:40 door Francoi gckx
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/05/2013 08:57:17
Quote Anchor link
Het eerste vereiste in een goed database model is dat je geen repeterende kolommen hebt.
Dus ik zou het concept wat je nu hebt loslaten en dat van Bas volgen.
 
Francoi gckx

Francoi gckx

14/05/2013 13:39:39
Quote Anchor link
Nu heb ik de database gemaakt maar kom er even niet uit nog
Ik wou:
Pagina 1: Cursist toevoegen resultaat: lijst van cursisten met links.
Ik klik op een cursist
Pagina 2: Een tabel met gegevens met waar de cursist is (in welke boek)
Wijzigen als een cursist met een boek/toets klaar is

Hier mijn tabellen volgens Bas
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
CREATE TABLE IF NOT EXISTS `tbl_crs_boeken` (
  `boek_id` int(11) NOT NULL AUTO_INCREMENT,
  `boek_naam` varchar(255) NOT NULL,
  PRIMARY KEY (`boek_id`)
)
ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
--
Gegevens worden uitgevoerd voor tabel `tbl_crs_boeken`
--

INSERT INTO `tbl_crs_boeken` (`boek_id`, `boek_naam`) VALUES
(1, 'autocad deel 1'),
(
2, 'autocad deel 2'),
(
3, 'autocad deel 3'),
(
4, 'autocad deel 4'),
(
5, 'autocad deel 5'),
(
6, 'autocad deel 6');

-- --------------------------------------------------------

--
--
Tabelstructuur voor tabel `tbl_crs_koppel`
--

CREATE TABLE IF NOT EXISTS `tbl_crs_koppel` (
  `koppel_id` int(11) NOT NULL AUTO_INCREMENT,
  `crs_id` int(11) NOT NULL,
  `boek_id` int(11) NOT NULL,
  `toets_id` int(11) NOT NULL,
  PRIMARY KEY (`koppel_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
--
Tabelstructuur voor tabel `tbl_crs_records`
--

CREATE TABLE IF NOT EXISTS `tbl_crs_records` (
  `crs_id` int(11) NOT NULL AUTO_INCREMENT,
  `crs_naam` varchar(255) NOT NULL,
  PRIMARY KEY (`crs_id`)
)
ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

--
--
Gegevens worden uitgevoerd voor tabel `tbl_crs_records`
--

INSERT INTO `tbl_crs_records` (`crs_id`, `crs_naam`) VALUES
(10, 'sooy'),
(
11, 'danny');

-- --------------------------------------------------------

--
--
Tabelstructuur voor tabel `tbl_crs_toetsen`
--

CREATE TABLE IF NOT EXISTS `tbl_crs_toetsen` (
  `toets_id` int(11) NOT NULL,
  `toets_startdatum` datetime NOT NULL,
  `toets_result` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/05/2013 14:00:46
Quote Anchor link
Bas zijn opzet is meer gericht op meerdere toetsen per boek, in BCNF zou je dan de volgende tabellen hebben

cursisten:
- cursist_id
- cursist_naam

boeken:
- boek_id
- boek_naam

toetsen
- toets_id
- boek_id
- toets_naam

cursisten_toetsen
- cursist_id
- toets_id
- toets_datum
- toets_resultaat

Omdat een toets bij een bepaald boek hoort, is het niet nodig om het boek_id in de koppeltabel op te nemen.
Pas als een cursist een toets af heeft insert je de gegevens in de koppeltabel
 
Francoi gckx

Francoi gckx

14/05/2013 14:10:22
Quote Anchor link
In welke tabel moet ik dan zetten: crs_id/crs_naam is klaar met die en die boek en toets?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/05/2013 14:51:41
Quote Anchor link
Als een cursist klaar is met een bepaalde toets staat dat in de koppeltabel, in dit topic heb ik een voorbeeld gegeven met gelezen/ongelezen. Dit werkt bij jouw ongeveer op dezelfde manier.
 
Francoi gckx

Francoi gckx

14/05/2013 15:02:29
Quote Anchor link
Ik mis alleen nog klaar met boek ja of nee
cursisten_toetsen
- cursist_id
- toets_id
- toets_datum
- toets_resultaat
- boek_klaar <- moet dat hier?

Misschien ga je nu denken dat ik het niet zelf wil doen
maar ik ben nog niet zo goed met normaliseren vooral als het gaat om koppelen
en ik heb al een aantal dingen er over gelezen maar in de praktijk vind ik het best wel moeilijk

Kan je een voorbeeld geven hoe ik dat in php doet welke query gebruik ik in wat voor tabel (met als voorbeeld de status veranderen van boek nog niet af tot af, in php)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/05/2013 15:26:53
Quote Anchor link
Ger van Steenderen op 14/05/2013 14:00:46:
Bas zijn opzet is meer gericht op meerdere toetsen per boek, in BCNF zou je dan de volgende tabellen hebben

....

Het is geen probleem als je dingen niet begrijpt, maar je moet wel goed lezen.
Heb je per boek maar één toets kan de tabel toetsen vervallen, en maak je in de koppeltabel van toets_id het boek_id.

En ik mijn vorige reactie een link geplaatst naar een query, waarvan je alleen maar de veld- en tabelnamen hoeft te veranderen. Of het nu een mededeling is die gelezen of een boek is dat af is maakt niet uit.
 
Francoi gckx

Francoi gckx

14/05/2013 15:38:03
Quote Anchor link
Ik wil niet alleen de toetsen bijhouden maar vooral of er een boek afgemaakt is
dus dat moet los staan van eventueel een toets
Dus daarom vroeg ik:
cursisten_status
- cursist_id
- toets_id
- toets_datum
- toets_resultaat
- boek_klaar <- moet dat hier?


Jij zegt "Of het nu een mededeling is die gelezen of een boek is dat af is maakt niet uit"

Maar ik zie de kolom boek af de ja of de nee niet
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/05/2013 15:58:40
Quote Anchor link
Maar als dat van elkaar los moet staan, dan moet je dat ook in de database gescheiden houden.
En dat wil zeggen dat je daar ook een aparte (koppel)tabel voor krijgt bv de tabel volgens_het_boekje
met daarin alleen de kolommen cursist_id en het boek_id.
Het feit dat de combinatie cursist_id en boek_id in de koppeltabel voorkomt bepaalt dat een boek afgemaakt is.
En dan is het weer net zo als met medelingen ;-)
 
Francoi gckx

Francoi gckx

14/05/2013 16:10:50
Quote Anchor link
Ok ik wil graag een laatste check
dus met deze tabellen in de database kan ik doen wat ik wil doen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
CREATE TABLE IF NOT EXISTS `tbl_crs_boeken` (
  `boek_id` int(11) NOT NULL AUTO_INCREMENT,
  `boek_naam` varchar(255) NOT NULL,
  PRIMARY KEY (`boek_id`)
)
ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
--
Gegevens worden uitgevoerd voor tabel `tbl_crs_boeken`
--

INSERT INTO `tbl_crs_boeken` (`boek_id`, `boek_naam`) VALUES
(1, 'autocad deel 1'),
(
2, 'autocad deel 2'),
(
3, 'autocad deel 3'),
(
4, 'autocad deel 4'),
(
5, 'autocad deel 5'),
(
6, 'autocad deel 6');

-- --------------------------------------------------------

--
--
Tabelstructuur voor tabel `tbl_crs_koppel_boeken`
--

CREATE TABLE IF NOT EXISTS `tbl_crs_koppel_boeken` (
  `crs_id` int(11) NOT NULL,
  `boek_id` int(11) NOT NULL,
  `boek_datum` datetime NOT NULL,
  `boek_isaf` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
--
Tabelstructuur voor tabel `tbl_crs_koppel_toetsen`
--

CREATE TABLE IF NOT EXISTS `tbl_crs_koppel_toetsen` (
  `crs_id` int(11) NOT NULL,
  `toets_id` int(11) NOT NULL,
  `toets_datum` datetime NOT NULL,
  `toets_resultaat` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
--
Tabelstructuur voor tabel `tbl_crs_records`
--

CREATE TABLE IF NOT EXISTS `tbl_crs_records` (
  `crs_id` int(11) NOT NULL AUTO_INCREMENT,
  `crs_naam` varchar(255) NOT NULL,
  PRIMARY KEY (`crs_id`)
)
ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

--
--
Gegevens worden uitgevoerd voor tabel `tbl_crs_records`
--

INSERT INTO `tbl_crs_records` (`crs_id`, `crs_naam`) VALUES
(10, 'sooy'),
(
11, 'danny');

-- --------------------------------------------------------

--
--
Tabelstructuur voor tabel `tbl_crs_toetsen`
--

CREATE TABLE IF NOT EXISTS `tbl_crs_toetsen` (
  `toets_id` int(11) NOT NULL,
  `boek_id` int(11) NOT NULL,
  ` toets_naam` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/05/2013 16:47:17
Quote Anchor link
De kolom boek_isaf kolom heb je in principe niet nodig, mag wel maar dan moet je in het geval van een nieuwe cursist ook de koppeltabel vullen. Maak er dan in ieder geval een tinyint(1) met default 0 (af=1).
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.