Indeling cursis database
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?
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
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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');
}
}
?>
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)
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
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>
?>
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
Dus ik zou het concept wat je nu hebt loslaten en dat van Bas volgen.
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)
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
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;
?>
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;
?>
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
In welke tabel moet ik dan zetten: crs_id/crs_naam is klaar met die en die boek en toets?
dit topic heb ik een voorbeeld gegeven met gelezen/ongelezen. Dit werkt bij jouw ongeveer op dezelfde manier.
Als een cursist klaar is met een bepaalde toets staat dat in de koppeltabel, in 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 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.
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
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 ;-)
dus met deze tabellen in de database kan ik doen wat ik wil doen?
Code (php)
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
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;
?>
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;
?>
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).