Løbeseddel 5: Kombination af teknikkerne - fortsat

for Databasestøttet Webpublicering
  sidst rettet 27. september, 2002

I denne og øvelse skal du kombinere teknikkerne som du allerede har mødt i de forrige øvelser. Du skal
- tildele værdier til variabler,
- oprette een- og todimensionale arrays,
- anvende if- sætninger
- konstruere for-løkker,
- konstruere funktioner som rummer variabler, arrays og løkker m.m.
- foretage kald - som sender argumenter (variabler eller arrays) - til disse funktioner.

Ved gradueringen lægges der bl.a. vægt på:

Opgave A - Spørgeskemagenerator

Du skal i denne opgave konstruere et spørgeskema: - et php-script som skal kunne generere et HTML-dokument, hvori der er en HTML -formular. Spørgeskemaet skal genereres v.hj. a. en funktion - denne funktion er spørgeskemageneratoren. Det færdige output skal svare til browservinduet i nedenstående illustration.
Ex:

 

Find på en undersøgelse du gerne vil foretage og formuler en række spørgsmål (mindst tre) som du ønsker din bruger skal svare på.

Overvej hvilken type formelement brugeren skal præsenteres for, for at kunne svare på hver af spørgsmålene.

 

Opgave A1 (10%) - Læg dine spørgsmål i et array.

Et todimensionalt array har denne form:
$arrToDimensionaltArray[1.index][2.index]

########################################################
Eks

$arrQuestion[0]["name"]="";
$arrQuestion[0]["question"]="";
$arrQuestion[0]["inputtype"]="";
$arrQuestion[0]["value"]="";

$arrQuestion[1]["name"]="";
$arrQuestion[1]["question"]="";
$arrQuestion[1]["inputtype"]="";
$arrQuestion[1]["value"]="";

e.t.c.

########################################################

 

Konstruer et todimensionelt array magen til det ovenstående. Kopiér gerne eksemplet og sæt det ind i en fil du benævner questionaire.php. Udvid arrayet så det bliver så stort som du har brug for i din undersøgelse.

Gem filen questionaire.php i
H:\public_html/W2/oevelse5

Det næste du skal gøre er at indsætte værdier i arrayet. Se forklaringer nedenfor:

$arrQuestion[x]["name"]="" 

; skal rumme et navn som senere vil optræde som formelementets name-attribut,

 

$arrQuestion[x]["question"]="" 

; skal rumme spørgsmålet du gerne vil stille til brugeren,

 

$arrQuestion[x]["inputype"]="" 

; skal rumme formelementets typeangivelse ("text", "radio", "checkbox"),

 

$arrQuestion[x]["value"]="" 

; skal rumme en streng som senere vil optræde som formelementets value-attribut.

Du skal også finde på en overskrift til din undersøgelse. Den skal du lægge lægge i:

$strHeader

Og du skal skrive et par sætninger som forklarer brugeren, hvad spørgeskemaet drejer sig om. Denne streng lægger du i:

$strDescription

$strHeader og $strDescription -variablerne placerer du i questionaire.php ovenover arrayet $arrQuestion.

Opgave A2 (30%) - Konstruer en funktion som kalder andre funktioner.

Du skal nu konstruere en funktion writeQueryForm (i filen functions.inc), som ved et kald kan generere dit spørgeskema indsat i en tabel.

Funktionen writeQueryForm skal altså kunne:

- generere en HTML-table, som rummer felter til overskrift, forklaring og fomularfelter. Husk også formularknapperne!
- generere spørgeskemaet således at det får et layout der svarer til illustrationen vist i begyndelsen af opgavesættet.

writeQueryForm skal modtage variablerne og arrayet du satte i opg. A1. Arrayet skal altså have parametrene

$strHeader
$strDiscription
$arrQuestions

Funktionen writeQueryForm skal rumme en for-løkke, som for hver iteration (gentagelse) kalder funktionen writeFormelement, som du tidligere har konstrueret i opgavesæt 4, opgave B:

##############################################

writeFormelement($strName,$strValue, $strType)

; som udskriver ét formelement med navnet strName, typen strType og defaultværdien strValue.

##############################################

- spørgeskemaet skal kunne rumme så mange spørgsmål som der nu bliver sendt til funktionen,
- funktionen skal altid udskrive en send-knap og en slet-knap. Disse formelementer skal ikke optræde i arrayet $arrQuestions

 

Opgave A3 (30%) - Opbyg en HTML-side ved at foretage en række kald til dine funktioner.

Opbyg en HTML-side ved at foretage en række funktionskald til de funktioner du allerede har konstrueret, deriblandt et til din nye writeQueryForm. Funktionskaldene udfører du i filen questionaire.php nedenunder $arrQuestion, $strHeader og $strDescription. Husk at inkludere functions.inc i toppen af dette script.

Funktionskaldene i questionaire.php kan være således:

writeHTMLheader("$Title");

writeQueryForm($strHeader,$strDiscription,$arrQuestion);

writeHTMLFooter();

Arbejd evt. med HTML-fladens udseende. Spørgeskemaet skal være enkelt og brugervenligt og gøre det attraktivt for brugeren at deltage i undersøgelsen.

 

 

Opgave B (15 procent) - Validering af spørgeskemabrugerens oplysning om emailadresse. Regulære udtryk.

Du har nu et spørgeskema som alverdens brugere kan udfylde. Du er også i stand til at modtage de indsendte besvarelser, men du mangler at kunne indsamle den enkelte brugers svar på spørgsmålene. Om nogle uger vil du kunne konstruere en database, hvori du kan gemme i tusindvis af brugeres besvarelser (du bestemmer selv, hvor mange du inviterer!). Inden du når dertil vil det være vigtigt at overveje kvaliteten af de data som vil strømme ind, og det er en god idé at teste de indsendte data, straks webserveren modtager dem.

Hvis du tester umiddelbart efter at brugeren har indsendt materiale, kan du straks gøre brugeren opmærksom på at du ikke er tilfreds med det indsendte - og bede om mere præcise data.


Du skal nu få din Spørgeskemagenerator til at generere endnu et spørgsmål (hvor du spørger om brugerens emailadresse) og et formularfelt. Det gør du ved at føje endnu en linie til dit array $arrQuestion.

Kald feltet email

Opgaven er at checke det indsendte formularindhold fra feltet email.

Du skal foretage dette check ved hjælp af disse linier: (Se evt s. 250 i "Beginning PHP..")

#######################################################################################

if ($email!="") {
	$bResult = ereg("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $email);

	if ($bResult) { 
  		//skriv til brugeren at den indsendte email var i orden.
 	} else {
  		//giv brugeren besked om at den indsendte emailadresse ikke er korrekt.
 	}
}

///Det regulære udtryk, "^[^@ ]+@[^@ ]+\.[^@ \.]+$",  består af disse dele:
// 1) ^ = Testen skal gælde fra og med den første karakter
// 2) [^@ ]+ = Der skal være en række karakterer som ikke er et snabel-a
// 3) @ = Der skal være et snabel-a
// 4) [^@ ]+ = Der skal være en række karakterer som ikke er et snabel-a
// 5) \. = Der skal være et punktum (Bemærk: escaped)
// 6) [^@ \.]+ = Der skal være en række karakterer som ikke er et snabel-a,
// en space eller et punktum
// 7) $ = Der må ikke forekomme yderligere tegn i strengen.
/////////////////////////////////////////////////////////////////////////

##########################################################################################

Indsæt dette emailcheck i toppen af din fil questionaire.php

Opgave C (15 procent) - Validering af spørgeskemabrugerens oplysning om postnummer.

Tilføj endnu et felt til dit spørgeskema hvor du beder brugeren om at oplyse postnummeret for sin bopæl. (Se s. 243- i "Beginning PHP..")

Konstruer et check, der afgør om der virkelig er fire og kun fire talkarakterer i indholdet fra dette postnummer-formfelt, hvor et postnummer er blevet indtastet.

 


mejner@it.edu