DSDS - ps, Opgavesæt 9

Sidst opdateret 10-04-2008

DSDS

Opgavesæt 9: Webbaseret Projektbørs

I denne øvelse skal du konstruere en webbaseret projektbørs med PHP og MySQL. Hovedsiden for projektbørsen skal liste alle projekterne i databasen (tag dig ikke af at projektemnerne i skærmbillederne omhandler et andet programmeringssprog end PHP...):

Det skal være muligt for en person at oprette et projekt med en dertil hørende projekttekst:

Ved at brugeren oplyser et password skal det tillige være muligt for brugeren at opdatere projektteksten:

Øvelsen er opdelt i fire opgaver:

  1. konstruktion af datamodel
  2. opstilling af legale transaktioner
  3. web-planlægning og tilknytning af transaktioner til web-forms
  4. konstruktion af kode til at processere ovenstående web-forms (PHP-scripts)

Opgave A (20 procent) - Datamodel

Som det første led i konstruktionen af en webbaseret projektbørs skal du konstruere en datamodel for systemet i form af en tabel. Tabellen skal kunne indeholde information om projekttitel, projekttekst og information om projektadministratoren i form af navn, email og password. Ydermere skal hvert projekt være identificeret med et unikt tal (brug primary key og auto_increment). Det skal sikres (ved brug af unique) at alle projekter har forskellig titel.

Gem din datamodel i filen ps9/project.sql i dit web-bibliotek på ITU's netværk. Skriv også SQL kode i filen for indsættelse af to projekter.

Opgave B (20 procent) - Transaktioner

I denne opgave skal du opskrive tre SQL kommandoer der udfører følgende:

  1. listning af alle projekter i databasen
  2. indsættelse af nyt projekt (givet projekttitel, projekttekst og information om administrator)
  3. opdatering af projekttekst for eksisterende projekt (givet en projekttitel)

Gem SQL-kommandoerne i en fil ps9/transactions.sql i dit web-bibliotek på ITU's netværk.

Opgave C (10 procent) - Webstrukturen

Du skal nu planlægge strukturen for den webbaserede projektbørs. Her er en skitse af hvordan systemet ønskes opbygget:

Kasserne i diagrammet repræsenterer den webbaserede projektbørs' tilstande for hvilke HTML-kode vises i en brugers browser. Unavngivne pile repræsenterer links til en ny tilstand og navngivne pile repræsenterer transaktioner for hvilke databasen opdateres (se opgave B) og brugeren ser en ændring i sin browser ved at blive sendt til en ny tilstand.

Hovedsiden for den webbaserede projektbørs er vist som en kasse øverst i diagrammet. Hovedsiden og siden for opdatering af et projekt skal implementeres som PHP-scripts, da hvad der vises i disse sider afhænger af indholdet i databasen og af eventuelle formargumenter. Kassen for oprettelse af et nyt projekt kan implementeres som en HTML-fil.

Din opgave er at navngive HTML-filen og PHP-filerne for de dynamiske sider og for transaktionerne (de navngivne pile). For at gøre det lettere at finde din besvarelse skal hovedsiden implementeres som en fil ps9/projects.php i dit web-bibliotek på ITU's netværk.

Formålet med denne opgave er altså ikke at konstruere PHP-scripts for servicen, men at planlægge navngivningen af filerne som indgår og afgøre hvilke formvariabler der skal overføres fra en side til en anden.

Til denne opgave skal du konstruere en beskrivelse af din web-struktur, som indeholder navne på de PHP-scripts projektbørsen anvender samt, for hver PHP-script de formvariabler som filen forventer. Beskrivelsen skal enten gives som en tekstfil ps9/struktur.txt, eller som en tegning ps9/struktur.gif (formattet er ligegyldigt, .pdf, .png etc).

Uanset hvordan du afleverer skal der for hvert PHP-script påføres både navn på scriptet og hvilke formvariabler scriptet forventer.

Opgave D (40 procent) - Konstruktion

I denne opgave skal du konstruere HTML-filen og PHP-filerne for de dynamiske sider og for database-transaktionerne. Start med at konstruere HTML-filen og PHP-filerne for kasserne i diagrammet.

Ved implementation af PHP-filen for opdatering af et projekt skal du huske at skrive kode til at sammenligne det indtastede password med password'et i databasen - det skal jo kun være muligt for administratoren at ændre projektteksten!

Husk at checke formvariablerne.

Yderligere bemærkninger:

Opgave E (10 procent) - 5 hurtige

  1. Hvad skal man være særligt opmærksom på ved brug af funktionen header?
    Se evt php.net/header
  2. Hvorfor er det vigtigt at checke formvariablerne som sendes mellem forskellige scripts, selv om der ikke har været direkte brugerinteraktion?
    (Altså selv om der ikke har været givet et form til en bruger som kan have tastet noget forkert?)
  3. Når man skal teste de samme formvariabler flere gange i forskellige scripts - hvad kan man gøre for at teste disse så nemt som muligt?
  4. Angiv de $_REQUEST's der skal til for at hente alle formvariablerne i følgende url:
    http://www.google.dk/search?q=super+duper&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:official&client=firefox-a
  5. Hvad er forskellen på følgende to kode-stumper (vi forestiller os at $result er sat og i øvrigt gyldig):

while ($row = mysql_fetch_array($result)){
  echo $row[0];//......
}

og

$row = mysql_fetch_array($result);
echo $row[0];//....

Ekstraopgaver for de flittige studerende (0 procent)

Implementer en eller flere af følgende udvidelser til systemet:


Martin Elsman - mael@itu.dk
Jonas Holbech - holbech@itu.dk

Valid HTML 4.01 Transitional