Her er eksamenssett fra Vår '09. Av Robin Sværen og Simen Arvesen. 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%) svar: A $a=5; $b=6; if($a!= $b) echo "A"; else echo "B"; Oppgave 1.2 (2%) svar: B $a=5; $b=6; if($a < $b) echo ($a%2==0?"a":"b"); else echo ($b%2==0?"c":"d"); Oppgave 1.3 (2%) svar: 7 function fun($a,$b) return $a-$b; echo fun(10, fun(6,3) ); Oppgave 1.4 (2%) svar: AAA $a=4; $b=6; for($i=$b;$i>=$a;$i--) echo "A";
Oppgave 1.5 (2%) svar: AAAA for($i=0;$i<2;$i++) for($j=0;$j<2;$j++) echo "A"; 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 For($i=0; $i<101;$i++) $produkt=$i*$i; echo $i. *.$i. =.$produkt;
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) if($tall>=0) return $tall; else return (-1*$tall); b) Funksjon som finner gjennomsnittet av elementene mellom en nedre og øvre index i en array. function finngjennomsnittutvalg($array,$startindex,$sluttindex) $ant=$sluttindex-$startindex+1; $sum=0; for($i=$starindex;$i<=$sluttindex;$i++) $sum+=$array[$i]; Return $sum/$ant;
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. $lastkey=count($arr) -1; $navn=array(); for($i=0;$i<3;$i++) $tt=rand($i, $lastkey); $temp=$arr[$tt]; $arr[$tt]=$arr[$i]; $arr[$i]=$temp; $navn[]=$temp; 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.
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. <h1>bestilt matrett</h1> <form action= registrer.php method= POST > <input type= text name= navn /> <input type= text name= mail /> <select name= onskemat > $peker=fopen( meny.txt, r ); while($linje=fgets($peker)) echo <option value=.$linje. >.$linje. </option> ; </select> <input type= submit name= knapp value= Bestill /> </form> Valgte post på grunn av ekstra sikkerhet ved bestilling av matrett, slik at parameterne ikke synes i url en. 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. if(isset($_request[ knapp ])) $navn=$_request[ navn ]; $mail=$_request[ mail ]; $mat=$_request[ onskemat ]; if(strlen($navn)<5 strlen($mail)<5) if(strlen($navn)<5) echo Ugyldig navn ;
if(strlen($mail)<5) echo Ugyldig mail ; else $kobling=mysql_connect( localhost, webuser, drosap ); mysql_select_db( nettside, $kobling); $sql= INSERT INTO bestilling (tidspunkt,navn,epost,matrett) VALUES(now(), $navn, $mail, $mat ) ; $res=mysql_query($sql, $kobling); if($res) echo <b>kvitering:</b><br /> ; echo Bestilling av $mat er ok! ; else echo Beklager!, bestillingen er ikke ok! ; mysql_free_result($res); mysql_close($kobling); 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) Kobler til på samme måte som i forrige oppgave, og bruker heretter bare variabelen $kobling: $sql= SELECT DISTINCT matrett FROM bestilling ; $result=mysql_query($sql, $kobling); while($rekke=mysql_fetch_array($result)) echo $rekke[ matrett ]. <br /> ; $sql2= SELECT navn,epost FROM bestilling WHERE matrett= $rekke[ matrett ] ;
$result2=mysql_query($sql2, $kobling); while($record=mysql_fetch_array($result2)) echo $record[ navn ]. (.$record[ epost ]. )<br /> ; mysql_free_result($result2); mysql_free_result($result); mysql_close($kobling);