! 1! 22 april 2013 Projektbeskrivning, Programmering för webben, vt 2013 Projektbeskrivning Projektet går ut på att skriva PHP-kod för en quiz. Ett mini-exempel på hur resultatet av projektet kan se ut finns på! http://dvwebb.mah.se/k3bope/da130a/project2013/ Det rekommenderas, men är inte tvunget, att använda följande mall: Sidan index.php som är startsida där man bland annat anger sitt namn. Sidan question.php som visar alla frågorna, en åt gången. Sidan result.php som visar resultatet, när alla frågorna är besvarade. För betyget Väl godkänd krävs även sidor som skickar resultatet med mail och sparar resultatet i en databas. Dessutom behövs en fil functions.php som innehåller php-funktioner som behöver användas. Börja med att läsa igenom hela beskrivningen. Det rekommenderas sedan att börja med att göra funktionen showquestion. Hur det ska göras finns beskrivet i avsnittet Funktionen showquestion i slutet av projektbeskrivningen. Detaljerad beskrivning av quiz En quiz ska bestå av minst 7 frågor. En quiz ska ha minst 6 resultatalternativ som man kan få när man är klar med quizen. Om quizen är "Viken färg är du?" kan resultatalternativen till exempel vara röd, blå, gul, grön, orange, vit, svart. Varje fråga ska ha lika många svarsalternativ som det finns resultatalternativ. Varje svarsalternativ måste stämma överens med ett resultatalternativ. När quizen är klar får man ett resultat baserat på det resultatalternativ som valts flest gånger. Till varje fråga ska det finnas en bild. Till varje resultatalternativ ska det finnas en bild. Detaljerad beskrivning av ingående sidor Följande beskrivning är en rekommendation. Om ni hellre vill lösa uppgiften på ett annat sätt så att specifikationerna uppfylls går det bra. Följande sidor rekommenderas: functions.php innehåller hjälpfunktioner som behövs på andra sidor. Filen infogas med hjälp av include på de sidor där funktionerna behövs. En stomme till functions.php finns tillgänglig för nedladdning. Den innehåller en helt färdig funktion, max_index, samt början
! 2! 22 april 2013 till funktionen showquestion. Funktionen showquestion är central för projektet och beskrivs ingående under en separat rubrik nedan. index.php innehåller ett formulär där man anger sitt namn. När man klickar sign in kommer man till till sidan question.php som visar första frågan. index.php index.php innehåller också PHP-kod som lagrar alla frågor i sessionsvariabler. Följande sessionsvariabler kan definieras: $_SESSION["quizname"]: namnet på quizen $_SESSION["resulttitles"]: en array med alla resultatalternativ. $_SESSION["resultimages"]: en array med filnamn på resultat-bilder. Till varje resultatalternativ ska det finnas en bild $_SESSION["questionnumber"]: aktuellt frågenummer. Från början ska den ha värdet 0. $_SESSION["answers"]: en array med lika många element som det finns svarsalternativ. Från början ska varje element vara talet 0. $_SESSION["allquestions"]: en flerdimensionell array som innehåller alla frågor. allquestions har lika många element som det finns frågor. Varje fråga är i sin tur en associativ array med elementen $question["questiontitle"]: själva frågan $question["alternatives"]: en array med svarsalternativen. Obs att svarsalternativen i de olika frågorna måste komma i blandad ordning. $question["values"]: en array som anger vilket resultat ett visst svarsalternativ är kopplat till. Denna array har lika många element som det finns svaralternativ. Se exempel nedan. $question["image"]: filnamn på en bild som hör till frågan I ett förenklat exempel med bara tre svarsalternativ skulle det kunna se ut så här: $_SESSION["quizname"]="Which color are you?"; $_SESSION["resulttitles"]=array("yellow","red","blue"); //yellow är resultat 0, red är resultat 1, och blue är resultat 2 $_SESSION["resultimages"]=array("yellow.gif","red.jpg","blue.jpg"); $_SESSION["questionnumber"]=0; //börja med fråga 0 En fråga skulle då kunna se ut så här: $question0["questiontitle"]="which flower do you prefer?"; $question0["alternatives"]=array("rose","bluebell","dandelion"); $question0["values"]=array(1,2,0); //rose kopplas till resultat 1 dvs red
! 3! 22 april 2013 //bluebell kopplas till resultat 2 dvs blue //dandelion kopplas till resultat 1 dvs yellow $question0["image"]="flower.jpg"; Alla frågor byggs upp enligt denna struktur. Vi kan då bygga allquestions i ett förenklat exempel med tre frågor så här $_SESSION["allquestions"]=array($question0,$question1,$question2); När man trycker på startknappen ska man komma till sidan question.php där man kan svara på första frågan. qustion.php ska visa de olika frågorna, en åt gången. Detta betyder att sidan question.php måste veta om den ska visa första, andra, tredje frågan osv. Sessionsvariabeln $_SESSION["questionnumber"] håller reda på vilken fråga som ska visas. question.php Knappen next på sidan question.php ska normalt leda tillbaka till sig själv så att nästa fråga kan besvaras, förutom när man befinner sig på sista frågan. Då ska knappen istället leda fram till sidan result.php. En central del i sidan question.php (och i hela projektet) är funktionen showquestion i filen functions.php som visar själva frågeformuläret. Mer om den funktionen under separat rubrik nedan! Sidan måste även hålla rätt på vad man svarade på föregående fråga. Hur många gånger man svarat på ett visst svarsalternativ lagras i sessionsvariabeln $_SESSION["answers"]. Om man exempelvis svarar första alternativet på en fråga så ökas första elementet i $_SESSIONS["answers"] med ett, svarar man andra alternativet ökar andra elementet med ett etc. result.php ska visa resultatet på quizen. Det svarsalternativ som fått flest svar anger resultatet. Antag igen att vi har tre svarsalternativ och tre frågor. Antag att vi svarar 2 gånger på första alternativet, 0 gånger på andra alternativet och 1 gång på tredje alternativet. Då innehåller vår array $_SESSION["answers"] följande värden: $_SESSION["answers"][0] har värdet 2 $_SESSION["answers"][1] har värdet 0 $_SESSION["answers"][2] har värdet 1 Första svarsalternativet (med index 0) har fått flest svar. Det finns en färdig funktion, max_index($array) i filen functions.php som hittar index för största värdet i en array.
! 4! 22 april 2013 Observera att det inte är hur stort största värdet är som vi är intresserade av (dvs hur många svar alternativ 0 fått) utan endast vilket alternativ som fått flest svar. För VG måste även finish kompletteras med ett formulär där man kan ange en epostadress att skicka resultatet till! finish.php sendmail.php krävs endast om man vill ha VG. Se ytterligare VG-krav under rubriken Betygsbedömning. Sidan skickar epost med resultatet till den adress som angavs i formuläret på föregående sida. Funktionen showquestion sendmail.php Funktionen showquestion är central i projektet. Den ska visa formuläret med frågor på sidan question.php. Det rekommenderas starkt att man börjar projektet med att göra och testa funktionen showquestion.php. Funktionen kan testas på sidan testshowquestion.php som finns tillgänglig för nedladdning. Funktionen anropas med följande funktionsanrop: showquestion($question,$questionnumber,$numberofquestions)
! 5! 22 april 2013 där $question innehåller alla uppgifter om en fråga, $questionnumber vilken fråga i ordning det är, och $numberofquestions är hur många frågor det finns totalt. Funktionens uppgift är att visa: Frågans titel Ett formulär med alla svarsalternativ som radiobuttons. En knapp, som visar texten next och leder till nästa fråga på sidan question.php, eller texten finish om man befinner sig på sista frågan och då leder till sidan finish.php. Den bild som finns i $image. values är en array som används för att kunna variera i vilken ordning svarsalternativen ska komma. Antag att vi har resultaten $_SESSION["resulttitles"]=array("yellow","red","blue"); Om vi har svarsalternativen i samma ordning som resultaten $question["alternatives"]=array("dandelion","rose","bluebell") anger vi det i vår array values på följande sätt: $question["vaues"]=array(0,1,2); Om vi istället visar svarsalternativen i en blandad ordning, tex så här $question["alternatives"]=array("rose", "dandelion","bluebell") anger vi det i vår array values på följande sätt: $question["values"]=array(1,0,2); Frågan ser då ut så här: Den resulterande html-koden för själva formuläret kan se ut så här: <form method="get" action="question.php"> <input type="radio" name="answer" value="1" checked>rose<br> <input type="radio" name="answer" value="0">dandelion<br> <input type="radio" name="answer" value="2">bluebell<br> <input type="submit" value="next"> </form>
! 6! 22 april 2013 Observera följande: Namnet på radioknappen är answer. Värdet för respektive knapp måste motsvara rätt alternativ. Oavsett i vilken ordning alternativen visas måste alltid dandelion-knappen motsvara value=0, rose motsvara value=1 och bluebell motsvara value=2. Handledning Handledning kommer att ges under minst ett schemalagt och laborationstillfälle per vecka. Projektinlämning Följande ska lämnas in på it's learning senast 3 juni kl 13.00: - alla sidor med PHP-kod och HTML-kod ihopzippade - en länk till ett fungerande projekt - en rapport omfattande minst en A4-sida där du beskriver ditt projekt. Projektredovisning Projektet visas för lärare och övriga kursdeltagare den 4 juni kl 13-16. Projektet ska vara fullt fungerande så att det kan testas. Betygsbedömning För betyget godkänd krävs ett fullt fungerande projekt med välstrukturerad och välkommenterad kod som uppfyller specifikationerna. För betyget väl godkänd krävs även att resultat och namn sparas i en databas, och att det finns en sida som kan visa en lista över olika personers resultat. Dessutom ska resultatet kunna skickas med mail. Exempel på en quiz från start till mål Ett förenklat exempel med tre resultatalternativ och tre frågor:
! 7! 22 april 2013 index.php question.php (första frågan) question.php (andra frågan)
! 8! 22 april 2013 question.php (tredje och sista frågan) result.php