EKSAMEN Emnekode: ITM20606 ITF10208 Dato: Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid: 09.00-13.00 05/06-2009 Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne) Faglærer: Tom Heine Nätt Eksamensoppgaven: Oppgavesettet består av 7 sider inklusiv denne forsiden og vedlegg, og er inndelt i 3 deler med henholdsvis 5, 3 og 3 oppgaver. Du er selv ansvarlig for å kontrollere at oppgavesettet er komplett. Det er på hver del og oppgave angitt hvor mye disse teller av totalen. Karakter fastsettes dog på basis av en helhetsvurdering av besvarelsen. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad. Det alltid er bedre å svare noe, om så bare hvordan du ser for deg at oppgaven kunne vært løst, enn å ikke skrive noe i det hele tatt på en oppgave. Lykke til! Sensurdato: 26/06-2009 Karakterene er tilgjengelige for studenter på studentweb senest 2 virkedager etter oppgitt sensurfrist. Følg instruksjoner gitt på: www.hiof.no/studentweb Side 1 av 7
Del 1 Kodeforståelse (10%) Her skal du kun svare på selve spørsmålet, og du trenger ikke forklare hvordan du kommer frem til svaret. NB! Les koden og selve spørsmålet nøye, for det kan være mange feller å gå i her... Oppgave 1.1 (2%) $a=5; $b=6; if($a!= $b) echo "A"; else echo "B"; Oppgave 1.2 (2%) $a=5; $b=6; if($a < $b) echo ($a%2==0?"a":"b"); else echo ($b%2==0?"c":"d"); Side 2 av 7
Oppgave 1.3 (2%) function fun($a,$b) return $a-$b; echo fun(10, fun(6,3) ); Oppgave 1.4 (2%) $a=4; $b=6; for($i=$b;$i>=$a;$i--) echo "A"; Oppgave 1.5 (2%) for($i=0;$i<2;$i++) for($j=0;$j<2;$j++) echo "A"; Slutt Del 1 Side 3 av 7
Del 2 Grunnleggende programmering (40%) Alle oppgavene i denne delen kan løses uavhengig av hverandre. Oppgave 2.1 (10 %) Skriv kode som produserer følgende utskrift (teksten "..." skal selvsagt erstattes med de virkelige utskriftene fra 8 til 99). 0*0=0 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49... 100*100=10000 Oppgave 2.2 (10 %) Skriv ferdig følgende funksjoner. a) Funksjon som returnerer absoluttverdien av et tall (Absoluttverdien er selve tallverdien uten fortegn, slik at 7 og -7 begge returnerer 7). Du får her ikke benytte deg av den innebygde abs-funksjonen. function absoluttverdi($tall) b) Funksjon som finner gjennomsnittet av elementene mellom en nedre og øvre index i en array. function finngjennomsnittutvalg($array,$startindex,$sluttindex) Oppgave 2.3 (20%) Gå ut i fra at du har definert en array med navn på studenter. Denne definisjonen kan f.eks se ut som følger: $arr = array("hans","ole","nils","olav","per","knut","kari","line","pia"); Skriv kode som plukker ut tre tilfeldige navn fra denne arrayen, og legger disse i en egen/ny array (kopi av navnene). Du må også sørge for at samme navn ikke blir plukket ut flere ganger. Slutt Del 2 Side 4 av 7
Del 3 Parametere, Skjemaer, filbehandling og databaser (50%) Et arrangement ønsker seg en webside der deltakerne kan registrere hvilken matrett de vil spise. Under ser du et skjermbilde fra websiden med navn bestilling.php. Selve nedtrekkslista skal hente elementene sine fra en oppdaterbar fil med navnet meny.txt. Denne fila har én matrett per linje, og kan f.eks se ut som følger: Torsk Pizza Bestillingsskjemaet skal sende dataene videre til websiden registrer.php, som så lagrer dataene i en databasetabell med navn bestilling. Denne er definert som følger: CREATE TABLE bestilling ( tidspunkt DATETIME, navn VARCHAR(255), epost VARCHAR(255), matrett VARCHAR(50), PRIMARY KEY(tidspunkt) ) Fylt med data kan da denne tabellen typisk se slik ut: tidspunkt navn epost matrett 2009-05-06 12:02:34 Per Persen per.persen@domene.no Torsk 2009-05-09 16:22:15 Ole Olsen ole.olsen@domene.no Pizza Databasen befinner seg på samme maskin som websidene vil gjøre, og har brukernavnet webuser, passordet drossap og databasenavnet nettside. Side 5 av 7
Oppgave 3.1 (15%) Skriv PHP/HTML-koden for å produsere siden bestilling.php. Husk at nedtrekkslista skal fylles med elementer fra fila meny.txt. HTML-koden for en nedtrekksliste er forøvrig: <select name="onsketmat"> <option value="torsk">torsk</option> <option value="pizza">pizza</option> </select> NB! Forklar hvorfor du velger hhv. POST eller GET som overføringsmetode. Oppgave 3.2 (15%) Skriv koden i fila registrer.php som tar i mot dataene fra bestilling.php. Dette scriptet skal utføre følgende: a) Feilkontroll på feltene navn og epostadresse (her holder det å sjekke at feltene er fylt ut med minst 5 tegn). Om ikke kontrollen er ok, skal en passende feilmelding presenteres for brukeren (ulik feilmelding for ulike feil). b) Om feilkontrollen i oppgave a er ok, skal dataene lagres til databasetabellen bestilling, og en kvittering skal bli vist for brukeren. Oppgave 3.3 (20%) Lag en webside som presenterer informasjonen fra databasen på følgende form: Torsk: Per Persen (per.persen@domene.no) Knut Knutsen (knut.knutsen@domene.no) Pizza: Ole Olsen (ole.olsen@domene.no) Tore Toresen (tore.toresen@domene.no) Kari Karisen (kari.karisen@domene.no) Fårikål: Guro Gurosen (guro.gurosen@domene.no) Rekkefølgen på matretter og personer under hver matrett er ikke viktig. TIPS: En mulig løsning vil være å først hente ut alle de ulike rettene som er bestilt gjennom følgende kommando, som kun lister hver rett én gang: SELECT DISTINCT matrett FROM bestilling For hver matrett i resultatet, hent så ut de bestillingene som har denne matretten med en ny SQL-setning. (fortsetter neste side) Side 6 av 7
NB! Om du ikke får til utskriften som skisseres, kan du alternativt presentere utskriften på følgende måte (sortert på matrett). Denne løsningen vil kun gi halv uttelling på denne deloppgaven, men er også enklere: Fårikål: Guro Gurosen (guro.gurosen@domene.no) Pizza: Ole Olsen (ole.olsen@domene.no) Pizza: Kari Karisen (kari.karisen@domene.no) Pizza: Tore Toresen (tore.toresen@domene.no) Torsk: Per Persen (per.persen@domene.no) Torsk: Knut Knutsen (knut.knutsen@domene.no) Side 7 av 7