HØGSKOLEN I SØR-TRØNDELAG

Like dokumenter
HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

SVARFORSLAG : Eksamen i IBE102 Webutvikling Våren 2017.

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN ITF Webprogrammering 1 Dato: Eksamenstid: Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

Kapittel 11. Databasesikkerhet

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

HØGSKOLEN I SØR-TRØNDELAG

Eksamen i Internetteknologi Fagkode: IVA1379

HØGSKOLEN I SØR-TRØNDELAG

Innhold. Innledning... 13

EKSAMEN (Konvertert fra en gammel PHPeksamen)

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

Eksamen i IBE102 Webutvikling Våren 2017.

HØGSKOLEN I SØR-TRØNDELAG

Høgskoleni østfold EKSAMEN

Dinesh Jeyabalasingam. Oppgavesett 9. Gruppeoppgave 2. Eksamenssett DEL 1. Oppgave 1.1. IF 1 Hvis $a er mindre eller lik $b stemmer

Hjelpemidler: 4 A4-sider (2 to-sidige ark eller 4 en-sidige ark) med egenproduserte notater (håndskrevne/maskinskrevne)

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

Webformularer, PHP og databaser

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

INTRODUKSJON HVEM ER DETTE FAGET FOR?...

HØGSKOLEN I SØR-TRØNDELAG

Oversikt over flervalgstester på Ifi

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Oblig 5 Webutvikling. Av Thomas Gitlevaag

HØGSKOLEN I SØR-TRØNDELAG

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

ET LITE TILBAKEBLIKK PÅ TEKSTSTRENGER...

EKSAMEN (Konvertert fra en gammel PHPeksamen)

som blanker skjermen (clear screen). Du får en oversikt over alle kommandoene ved å skrive,

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Systemarkitektur. Webformularer, PHP og databaser. Hva skal applikasjonsprogrammet gjøre? PHP. Ta i mot data fra brukergrensesnittskjermbildet

Eksamessett Høst 2009 Robin Sværen og Simen Arvesen

Web-programmering med JSP Løsningsforslag leksjon 3

UNIVERSITETET I OSLO

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Tilgjegelighet av XHTML-forms

Eksamen i Internetteknologi Fagkode: ITE1526

HØGSKOLEN I SØR-TRØNDELAG

Høgskoleni østfold EKSAMEN. Emne: Innføring i programmering

Shellscripting I. Innhold

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

Prosjekt i faget Webprogrammering med PHP

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

UNIVERSITETET I OSLO

Oppsummering - Til nå... (1/ )

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Dette er en demonstrasjonsside som vi skal bruke for å se litt nærmere på HTTP protokollen. Eksemplet vil også illustrere et par ting i PHP.

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Oppsummering - Kurset (10/ )

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring -

Høgskoleni østfold EKSAMEN

Her er eksamenssett fra Vår '09. Av Robin Sværen og Simen Arvesen.

Når en bruker skriver sitt navn ("Ole") i et form-element med name="fornavn" som attributt. klikker på submit-knappen

HØGSKOLEN I SØR-TRØNDELAG

Eksamen i Internetteknologi Fagkode: ITE1526

$antall_maaneder =12; Variablene $pris og $antall_maaneder i eksemplet ovenfor har

Norsk informatikkolympiade runde

Guide til system for flervalgsprøver

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Produktdokumentasjon. Madison Møbler Administrasjonsside og Nettbutikk

HØGSKOLEN I SØR-TRØNDELAG

Retningslinjer for gjennomføring av IKT-basert skriftlig eksamen

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Forside slutteksamen

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

Transkript:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 11. mai 2004 Varighet: Fagnummer: Fagnavn: Klasse(r): 3 timer LV197D Webprogrammering med PHP FU Studiepoeng: 6 Faglærer(e): Svend Andreas Horgen tlf: 73 55 92 69 Hjelpemidler: Oppgavesettet består av: Alle skriftlige hjelpemidler 4 oppgave, på totalt 6 sider (inkludert forsiden) Merknad: Oppgaveteksten kan beholdes av studenter som sitter eksamenstiden ut. Viktig: Les hele oppgaveteksten for hver oppgave før du setter i gang. Planlegg tiden godt. Hvis du føler det blir vanskelig å skrive kode, er det bedre å skissere logikken med pseudokode eller ord enn ikke å gjøre noe. Lykke til! Side 1 av 8

Oppgave 1 Behandling av skjema (11%) Et skjema har denne HTML-koden: <h1>personlig informasjon</h1> <form action="farge.php" method="get"> Hva er ditt navn? <input type="text" name="navn"><br> Din alder? <input type="text" name="alder" size="2"><br> Hva er din favorittfarge?<br> <input type="radio" name="favorittfarge" value="rød"> Rød er best<br> <input type="radio" name="favorittfarge" value="gul"> Gult er kult<br> <input type="radio" name="favorittfarge" value="grønn"> Grønt er skjønt<br> <p> <input type="submit" name="knapp" value="vis oppsummering"> </form> Lag et så enkelt script som mulig for å lage følgende oppsummering: Svar: Fort å glemme at knappen overføres, og at stor bokstav må brukes. Bruk av foreach er nok enklest, men GET direkte fungerer også. For dette skjemaet blir det hipp som happ, men et større skjema med mange elementer er gevinsten stor. <?php echo "<h1>oppsummering</h1>"; foreach($_get as $nokkel => $verdi) { if( $nokkel <> "knapp"){ //skriver ikke ut info om knappen echo "<b>". ucfirst($nokkel). ":</b> $verdi <br>"; //slutt foreach?> Side 2 av 8

Oppgave 2 Filbehandling (25%) Lag et script som produserer tabellen vist til høyre basert på tekstfilen til venstre. Hint: Funksjonen trim($tekststreng) returnerer en tekststreng hvor alle mellomrom, \n, \t og liknende som er i starten og slutten av $tekststreng, er fjernet. Svar: Det er lurt å lese inn like timer i en assosiativ matrise. Det er en elegant måte å telle opp like linjer på. Deretter er det bare å skrive ut matrisen. Det fins andre måter også, men assosiativt har vi fokusert mye på i kurset. <?php $fp = fopen("timeliste.txt", "r"); // åpner tekstfil i lesemodus $matrise = array(); //klargjør matrise for bruk while ( $linje = trim(fgets($fp)) ) { //trim fjerner /n fra en linje if (!isset($matrise[$linje]) ) { $matrise[$linje] = 1; else { $matrise[$linje]++; //alternativt kan if-else-testen sløyfes helt, //og feilmelding undertrykkes, vha en alfa foran: //@$matrise[$linje]++; //slutt while-løkke echo "<table border='1'>"; echo "<tr><th>antall timer</th><th>antall forekomster</th></tr>"; foreach ($matrise as $nokkel=>$verdi) echo "<tr><td>$nokkel</td><td align='center'>$verdi</td></tr>"; echo "</table>";?> Side 3 av 8

Oppgave 3 En handlekurvløsning (40%) Du skal nå spille oppgaven som konsulent som har fått i oppdrag å lage en handlekurvløsning for en nyoppstartet nettbutikk som selger klær. Følgende krav er ønskelig: Den besøkende (heretter kunden) skal få listet opp varer i form av navngitte lenker, og kunne trykke på lenkene for å få mer informasjon om aktuell vare. Det skal også være en knapp ved siden av hver vare, og når den klikkes legges en ny forekomst av varen i kundens handlekurv. Nettstedet forventer høye besøkstall. Det eksisterer en database per i dag som skal brukes. Den har blant annet en tabell med navn varetabell med de navngitte feltene vareid, varenavn, pris, kategori og beskrivelse. Varene er strukturert etter tre ulike kategorier, nemlig kvinner, menn og barn. Anta at brukernavn er user, passord pass, og at host er localhost. Det er ikke tid til å lage hele systemet under denne eksamen, men du skal svare på følgende spørsmål: a) Skisser den koden i PHP som henter ut informasjon om de varene fra databasen som tilhører valgt kategori og lager et skjermbilde som vist under. Du skal ikke lage siden for å velge kategori, men får vite at kategorien er oppgitt i spørrestrengen kvinner i dette eksempelet. Et klikk på lenken skal lede til mer informasjon om den aktuelle varen (se oppgave b), mens trykk på knappen skal føre til at varen blir lagt til i kundens handlekurv (se oppgave c). Svar: Trenger ikke lage funksjon som gjort her. Det er ikke noe poeng. function nyvare($navn, $enid) { echo "<form action='handlekurv.php' method='post'>\n"; echo "<p>varenavn: <a href=visinformasjon.php?id=$enid'> //Lenken må ha et argument med vareid i seg. $navn</a> \n "; echo "<input type='submit' name='knapp' value='legg til i handlekurv'>\n"; echo "<input type='hidden' value='$enid' name='verdi'></p>\n"; echo "</form>\n\n"; //slutt, skrive ut ny vare Side 4 av 8

$db = mysql_connect("host", "mysql_user", "mysql_password"); mysql_select_db("varedatabase", $db); //viktig å huske å ikke hardcode kvinner. Kategorien skal hentes //fra spørrestrengen, ellers er ikke løsningen særlig //dynamisk/fleksibel. $sql = "SELECT * FROM varetabell WHERE kategori = ". $_GET['kat']; $resultat = mysql_query($sql, $db); while ($rad = mysql_fetch_array($resultat)) { $navn = $rad['varenavn']; $ID = $rad['vareid']; nyvare($navn, $ID); b) Når lenken for en vare fra skjermbildet i oppgave a) ble klikket på, skal all informasjon om den vises. Lag et lite script som gjør dette. Svar: Ser her at tilkoblingen kan generaliseres ut i en funksjon, men på den annen side oppnås ikke så mye med det. Målet med denne oppgaven er å vise at en behersker å hente ut data fra en database, samt at id som ble oversendt fra forrige side benyttes. //visinformasjon.php vil motta id i spørrestrengen. $db = mysql_connect("host", "mysql_user", "mysql_password"); mysql_select_db("varedatabase", $db); $sql = "SELECT * FROM varetabell WHERE vareid = ". $_GET['ID']; $resultat = mysql_query($sql, $db); $rad = mysql_fetch_array($resultat); //bare en rad echo "Varenavn: ". $rad['varenavn']; echo "<br>pris: ". $rad['pris']; echo "<br>kategori: ". $rad['kategori']; echo "<br>beskrivelse: ". $rad['beskrivelse']; //feilsjekking kan også med fordel foretas. c) Når kunden legger varer i handlekurven, skal dette registreres. Gjentas dette flere ganger skal antallet øke. For å kjøpe tre kjoler må altså den øverste knappen trykkes tre ganger. For å sikre brukervennlighet skal trykk på knappen vise at varen er registrert, samtidig som samme side vises. Lag et script som realiserer dette. Side 5 av 8

Svar: Denne delen kan med fordel ligge øverst i samme script. Sjekk på om knappen eksisterer, hvis den gjør det har brukeren lagt til noe i handlekurven. Vis varene uansett. <?php session_start(); //echo "<pre>"; //var_dump($_post); if (!empty($_post['knapp']) ) { //registrer en vare i handlekurv $vareid = "varenr_". $_POST['verdi']; if (!isset ($_SESSION[$vareId]) ) { $_SESSION[$vareId] = 1; else { $_SESSION[$vareId]++; echo "Varen ".$_POST['varenavn']." ble lagt til"; //koden fra oppgave a) kommer her. d) Hvilke sikkerhetsmessige aspekt er det viktig å tenke på i en slik løsning? Hvilke tiltak kan gjøres? Eksemplifiser. Svar: Noen elementer er: Løsningen er enkel, noe som skyldes at eksamen er på 3 timer. I en virkelig løsning (en slik løsning) vil det være viktig å tenke på sikkerhet. Sensitive opplysninger bør overføres med SSL. Noen nettbutikker krever innlogging av kunden før kjøp kan foretas. I så fall må brukernavn og passord lagres på tjeneren, og personopplysninger bør ikke komme ut. Lagring av passord i klartekst bør unngås. Validere inngangsdata for å unngå SQL-injection. Eksempel bør være med, de har hatt mye om dette. Kan for eksempel sjekke om strengen har semikolon og start på SQL-kommentar i seg, regulært uttrykk er å foretrekke. Funksjonen mysql_escape_string() er også aktuell. Bruke sessions i stedet for cookies til selve handlevognsløsningen, for å ikke avvise de som har cookies avslått. Side 6 av 8

Oppgave 4 Flervalgsoppgave (24%) Under finner du noen spørsmål og påstander. Kryss av for bare ett alternativ, det du vurderer til å passe best. For hvert riktig svar får du 2 poeng, for hvert galt svar får du -1 poeng, og krysser du av Vet ikke får du 0 poeng på spørsmålet. Du får ikke uttelling for å begrunne svarene dine. Riv ut denne siden og lever den sammen med resten av besvarelsen din, eller skriv opp oppgavenummer og ditt alternativ på form: - c 1. Hva er riktig? a. Cookies er en nødvendighet for å få sessions til å fungere b. Cookies er spesifisert i protokollen HTTP c. Cookies lagres både på tjeneren og på klienten 2. Sikkerheten med sessions a. er avhengig av hvorvidt ID-ene kan holdes hemmelig b. fungerer bra siden ID-en er vanskelig å gjette c. er fullgod siden informasjonen lagres på tjeneren og ikke på klienten 3. Bruk av date("d", 1106042012) vil returnere a. dagen for tidspunktet 11.juni 2004 klokka 20:12 b. teksten Tue siden tallet i andre argument er et tidsstempel c. en feilmelding fordi andre argument er positivt 4. Vil bruk av cookies sikre at informasjon om en besøkende kan langtidslagres? a. ja, for nettlesere deler cookies seg i mellom b. nei c. ja, men det er ikke lurt å lagre sensitive opplysninger i cookies 5. PHP opererer ikke med datatyper! a. Riktig, for eksempel vil alt som overføres med GET være tekst b. Feil, men de deklareres ikke nødvendigvis eksplisitt c. Riktig, her skiller PHP seg fra de fleste andre programmeringsspråk 6. Hva skjer i denne koden? $i = 0; while ($i<12) { if ($i = 8) { echo $i*2; else { echo $i; $i++; a. Alle tall mellom 0 og 11 skrives ut på en ny linje. b. 12345671691011 vises i nettleseren. c. Ingen av de to punktene over, i hvertfall! 7. En stor norsk nettavis vil at den besøkende skal bli opplyst om dagens dato. Dersom det er den 25. april 2004 og scriptet som forespørres har setningen echo date("i dag er det den d. M"). "<br>"; a. vil ikke programmereren ha oppnådd målet sitt b. vil teksten I dag er det den 25. april vises i nettleseren c. vil teksten I dag er det den 25. Apr vises i nettleseren 8. Hva er riktig? For at en funksjon skal kunne endre flere argumenter a. må kodeordet global brukes inne i funksjonen b. må argumentet overføres som referanse ved hjelp av & operatoren c. må flere return-setninger forekomme etter hverandre a b c Vet ikke Kommentarer til noen spørsmål: Side 7 av 8

2: Dersom en hacker får tak i en session-id, er informasjonen tilgjengelig. Han/hun vil da overta dine data. Mer informasjon: Søk etter referer-headeren. 3. Dette er et timestamp, på tross av at det ser ut som om dette kan være et tidspunkt. Leksjonene forklarer hvordan tidsstempel brukes i datofunksjonene i PHP. 4. Cookies kan være avslått, og da vil ikke informasjonen langtidslagres som forventet. 6. Uendelig while-løkke, tilordning skjer inne i if-ens hode. 7. Prøv selv. Husk at det fins en rekke bokstavkoder for datoer. For å skrive ut ønsket tekst, må koden bli: echo date("\i \d\a\g \e\r \d\e\t \d\e\n d. M"). "<br>"; Side 8 av 8