(fra opgavesæt af Martin Elsman)
I denne øvelse skal du igen benytte sproget SQL (Structured Query Language) til at oprette tabeller i MySQL-databasen som er blevet oprettet til dig på ITCs netværk.
Opret en funktion executeSQL() som har argumentet $strSQL
og som kan
1) oprette forbindelse til din database
2) udskrive en fejlmeddelse hvis forbindelse ikke opnås
3) sende en SQL-kommando $strSQL til databasen.
4) udskrive en fejlmeddelse hvis SQL-kommando ikke afvikles.
5) lukke forbindelsen igen efter brug.
Gem funktionen i w2/functions_db.inc og husk at inkludere den
i de næste opgavers scripts.
I de næste opgaver skal du skrive scripts med hver en SQL-kommando til at skabe tabeller indeholdende et udpluk af en gymnastikforenings aktiviteter. Du skal anvende funktionen fra opgave A.
gf_kursergf_kurser ved brug af SQL-kommandoen create
table. Tabellen skal have to kolonner:
kursus_id -- kursusnummer
kursusnavn -- højest 100 tegn
Du skal konstruere tabellen således at databasen sikrer
(1) at et af felterne sættes til at være primærnøgle,
(2) at felterne kursus_id og kursusnavn ikke er tomme.
Indsæt mindst fem kurser i tabellen med SQL-kommandoen insert.
Du skal selv finde på kursus_id'er for kurserne du indsætter. Undersøg
hvad der sker hvis du prøver at indsætte to kurser med samme kursus_id
i tabellen.
Gem scriptet i oevelse7/gf_kurser.php
gf_personergf_personer med fire kolonner:
person_id -- integer
email -- email-adresse; højest 100 tegn
navn -- højest 100 tegn
tilknytning -- 'kursist', 'træner', 'bestyrelsesmedlem';
højest 20 tegn
person_id og navn
er ikke-tomme (not null). Yderligere skal kolonnen person_id være
en primær-nøgle (primary key). Indsæt nu med SQL-kommandoen insert
trænerne knyttet til kurserne i tabellen gf_kurser; find selv
på nogle navne,m.m. og person_id's for personerne.
Gem scriptet i oevelse7/gf_personer.php
gf_kursusansvarkursus_id -- reference til tabel gf_kurser
person_id -- reference til tabel gf_personer
periode -- fem tegn (f.eks., F2003 for forår
2003)
Find selv en passende datatype til hver af felterne.
Du skal konstruere tabellen således at periode-kolonnen kræver
at data indsættes.
Indsæt data i tabellen med SQL-kommandoen insert for et udpluk
af gymnastikforeningens kurser i denne og den næste periode.
Gem scriptet i oevelse7/gf_kursusansvar.php
Følgende select-kommando kan bruges til at skabe et overblik over gymnastikforeningens kurser i en givet periode (i eksemplet er anvendt 'F2003'):
select gf_kurser.kursus_id, gf_kurser.kursusnavn,
gf_personer.navn as ansvarlig
from gf_kurser, gf_personer, gf_kursusansvar
where (gf_kurser.kursus_id = gf_kursusansvar.kursus_id
and gf_personer.person_id = gf_kursusansvar.person_id
and periode = 'F2003');
Vis resultatet fra denne select-kommando i en fil oevelse7/kurser_F2003.php.
kurser_F2003.php skal generere det relevante HTML for visning
af oplysningerne.
Anvend erfaringerne fra de tidligere opgavesæt: anvendelse af writeHTMLHeader
m.fl og læs - igen? - om mysql_fetch_row på www.php.net.
Prøv evt at finde ud af hvordan du kan få MySQL til at medsende
feltnavne (- dette er en ekstraopgave)
I denne opgave skal du konstruere tabeller til registrering af publikationer fra IT-højskolen.
itu_personDu skal kontruere en tabel itu_personer (svarende til gf_personer
i ovenstående opgave):
person_id -- integer
email -- email-adresse; højest 100 tegn
navn -- højest 100 tegn
tilknytning -- 'studerende', 'underviser', 'forsker'; højest
20 tegn.
Gem scriptet der udfører jobbet i oevelse7/personer.php
itu_publikationeritu_publikationer med følgende kolonner:
publ_id -- integer
titel -- højest 100 tegn
publ_aar -- integer
publ_maaned -- integer
note -- højest 100 tegn
publ_id som en primær-nøgle (primary
key) og med "NOT NULL AUTO_INCREMENT" føjet efter angivelsen
af datatype. MySQL vil da sikre at et publikationsnummer bliver tilknyttet hver
publikation og at forskellige publikationer får tildelt hver deres publikationsnummer.
Gem scriptet der udfører jobbet i oevelse7/publikationer.php
itu_forfattereitu_publikationer ikke er knyttet nogen
forfatterkolonne. I stedet skal du konstruere en tabel itu_forfattere,
som knytter itu_personer til publikationer. Grunden til at datastrukturen
ønskes konstrueret således er at der kan være flere forfattere knyttet til hver
publikation og at der til hver person kan være knyttet flere publikationer (der
er tale om en mange-til-mange-relation.) Tabellen itu_forfattere
skal indeholde følgende kolonner:
publ_id -- reference til tabel itu_publikationer
person_id -- reference til tabel itu_personer.
Indsæt tre eller flere publikationer i
databasen og knyt dem til nogle personer i tabellen
itu_personer.
Gem scriptet til oprettelse af tabellen og indsættelse af data i itu_forfattere
i en fil oevelse7/forfattere.php
Endelig skal du opskrive en select-kommando til at hente publikationer
fra en given måned ud af databasen. Gem dette script i en fil oevelse7/select.php