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

Like dokumenter
while-løkker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

En enkel while-løkke. 1 of :28. 2 of :28. while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

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

$i < 5 forsettelsesbetingelsen - false => Løkken slutter.

Tilgjegelighet av XHTML-forms

Webprogrammering høsten 2017

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

Et forsøk på definisjon

}?> <!DOCTYPE... <html xmlns=" <head>... </head> <body> <p>nå skal vi printe hallo:</p> <?php //funksjonskall

Et forsøk på definisjon. Eksempel 1

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

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

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

Utvikling av dynamiske nettsteder med PHP og databaser, våren 2009

Et forsøk på definisjon

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

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

Introduksjon til beslutningsstrukturer

Et forsøk på definisjon. Eksempel 1

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

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

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/ Vi holder orden på verdier med hjelp av variabler

Verdier, variabler og forms

</html> </head> <form action= rtkst.php > <p> Fornavn? <input type= text name= fornavn <input type= submit />

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18

Læringsmål og pensum. Oversikt

Oppsummering fra sist

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Programmering Høst 2017

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Leksjon 3. Kontrollstrukturer

1. Kontrollstrukturer og løkker

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Leksjon 3. Kontrollstrukturer

Kap 2: Løkker og lister

Repetisjon Novice Videregående Python PDF

TDT4105 Informasjonsteknologi grunnkurs Øvingsforelesning 2. Iver Dihle Skjervum Vit.ass. ITGK

Visual Basic. Repetisjon fra onsdag

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

Læringsmål og pensum. if (be): else (not_to_be):

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

Informasjon Eksamen i IN1000 høsten 2017

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

Programmeringsspråket C

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Kodetime for Nordstrand barneskole

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

HØGSKOLEN I SØR-TRØNDELAG

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

HØGSKOLEN I SØR-TRØNDELAG

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Norsk informatikkolympiade runde

Kontrollstrukturer (valg og løkker)

Visuell Programmering: Kom i gang med Processing

Kapittel 1. Innledning og motivasjon. 1.1 Innledning. 1.2 Dynamiske, tjenerbaserte og interaktive nettsteder Dynamiske nettsider

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

INF1000 : Forelesning 3

Klasser. Webprogrammering høsten Objekter. Eksempelklasser og -objekter. 2 of :56. 1 of :56

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

HØGSKOLEN I SØR-TRØNDELAG

Forelesning inf Java 5

Forelesning inf Java 5

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2015

Programmeringsspråket C Del 2

Oppgaver uke 1: Løsningsforslag

lage og bruke funksjoner som tar argumenter lage og bruke funksjoner med returverdier forklare forskjellen mellom globale og lokale variabler

1. XHTML. Innhold Innledning

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

INF1000 : Forelesning 4

Programmering i C++ Løsningsforslag Eksamen høsten 2005

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Eksempel: Body Mass Index (BMI)

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

Læringsmål og pensum. Oppgave

Steg 1: Vår første datamaskin

Kanter, kanter, mange mangekanter

Løse reelle problemer

løsningsforslag-uke5.txt

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Transkript:

Page 1 Page 2 [Kurssidene] [ JBI] [ ] Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006 Vi kommer for det meste til å bruke while-løkker, men for-løkker anses viktige å kjenne til Michael Preminger (michaelp@hio.no) 18/09-06 I denne forelesningen En liten repetisjon Løkker Arrayer (tabeller) Løkker og arrayer Avkryssingsbokser Repetisjon fra forrige gang Betinget utføring Betinget utføring gir oss mulighet til å kontrollere programmets funksjon gjennom beslutniger. Programmet beslutter hvilke kodebiter skal og skal ikke utføres, ved å teste på betingelser. Slike betingelser er mer eller mindre kompliserte logiske uttrykk som koker ned til true eller false. Løkker (Se også Lash (2003), s. 50-54) Med løkker kan vi gjenta en sekvens av instruksjoner flere ganger. Ofte trenger vi gjenta handlinger for alle studenter i en klasse alle tekstlinjer i en fil alle filer i en katalog Løkker gir oss mulighet til å skrive programkode for en handling (vi skriver den bare én gang) få handlingen gjentatt det nødvendige antallet ganger I denne forelesningen ser vi på to typer løkker. while-løkke for-løkke

Page 3 Page 4 While løkker While-løkker gjentar instruksjonene så lenge en betingelse er oppfylt En enkel while-løkke dollar-i er nå lik 0 dollar-i er nå lik 1 dollar-i er nå lik 2 dollar-i er nå lik 3 dollar-i er nå lik 4 Nå er løkken slutt fordi dollar-i er lik 5 De 5 første omgangene er betingelsen oppfylt, og dermed kjøres løkke-koden. Eksempel 2: Enda en enkel while-løkke Ordet "while" er semantisk litt misvisende: Nedenstående eksempel skiller seg lite fra det forrige. (linje 3 og 10). på norsk kan man si : "Så lenge $i er mindre enn 5, gjenta disse instruksjonene" Eksempel 1: en enkel while-løkke En enkel while løkke skrives på følgende vis: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>en enkel while-løkke</title> <link rel="stylesheet" href="stilark.css" type="text/css" /> </head> <h1> En enkel while-løkke </h1> 2. $i=0;//oppstart (også: initiering eller initialisering) 3. while( $i < 5 ){ <h1> Enda en enkel while-løkke </h1> 2. $i=0;//oppstart (også: initiering eller initialisering) 3. while( $i < 10 ){ 5. $i = $i + 2;//oppdatering av $i - variabelen Enda en enkel while-løkke 5. $i = $i + 1;//oppdatering av $i - variabelen dollar-i er nå lik 0 dollar-i er nå lik 2 dollar-i er nå lik 4 dollar-i er nå lik 6 dollar-i er nå lik 8 Nå er løkken slutt fordi dollar-i er lik 10 linje 2 tilrodner variabelen $i en oppstartverdi på 0 Bruk av logiske uttrykk i if-tester og while-løkker linje 4 og 5 utføres gjentatte ganger, så lenge fortsettelsesbetingelsen (det logiske Legg merke til at if-tester og while løkker bruker nøyaktig samme type logiske uttrykk uttrykket) stemmer med virkeligheten. if-tester, for å finne ut om en gruppe med instruksjoner skal utføres Line 4 er vår "nyttehandling". Den printer verdien til nettleservinduet. Linje 5 oppdaterer variabelen $i for hver omgang. Uten denne linjen blir betingelsen aldri usann (false), og løkken går evig. while-løkke for å finne ut om noen linjer skal utføres én gang til (og én gang til og én gang til). etter 5 omganger, når $i==5, er ikke betingelsen sann lenger, og løkken avbrytes. Resultatet:

Page 5 Page 6 For-løkker - innføring og eksempel Forskjellen mellom while og for-løkker For-løkker gjentar instruksjonene et gitt antall ganger. En for-løkke er strukturert. All styringen ligger mellom klammene For-løkkens oppbygging: (Oppstart, fortsettelsesbetingelse, oppdatering) er konsentrert mellom klammene, rett etter for - ordet. Mellom krøllklammene har vi bare handlingene som skal utføres. "Parentesen" i en while løkke oppgir bare en fortsettelsesbetingelse. Oppstart må ordnes før løkkekoden starter (se linje 2 nedenfor) oppdatering må ordnes som en del av løkkens "nyttekode" (mellom { og } ), stort sett etter at nytten er gjort. Eksempel 3: en enkel for-løkke 2. print("<p>her kommer en for-løkke</p>"); 3. for ( $i = 0 ; $i < 5 ; $i = $i + 1 ){ 5. } 6. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); 7.?> Linje 3 kontrollerer løkkens gang i = 0 oppstart - tellervariabelen $i får en startverdi $i < 5 forsettelsesbetingelsen - et logisk uttrykk $i = $i + 1 oppdatering - for hver omgang, vokser verdien i $i med 1 Det logiske uttrykket testes hver omgang, for å beslutte om løkken skal utføres en omgang til. resulterer i at følgende skrives til nettleseren: Her kommer en for-løkke dollar-i er nå lik 0 dollar-i er nå lik 1 dollar-i er nå lik 2 dollar-i er nå lik 3 dollar-i er nå lik 4 Begge løkketyper kan, i prinsippet brukes i alle situasjoner som krever løkker Vi bruker ofte for-løkker når vi vet hvor mange ganger løkken skal kjøres. Vi bruker while - løkker når antall ganger løkken kjøres avhenger av ting som skjer underveis i løkkekoden. En kommentar: Dere kommer stort sett til å bruke while-løkker i deres arbeid. For-løkken er viktig å kjenne til for de av dere som skal programmere senere. Mange eksempler kommer i fortsettelsen, oftest med while-løkker Eksempel 4:(Gjentar eksempel 2) <h1> Enda en enkel while-løkke </h1> 2. $i=0;//oppstart 3. while( $i < 10 ){ 5. $i = $i + 2;//oppdatering av $i - variabelen For løkken er lettere å programmere med, men vanskeligere å forstå. Dette fordi mange av detaljene, som programmereren selv må holde styr på, i og rundt while-løkker, "abstraheres vekk" i for-løkken. Nå er løkken slutt fordi dollar-i er lik 5

Page 7 Page 8 Arrayer (norsk: tabeller eller matriser) En array er flere variabler som deler et variabelnavn. vi kommer til å bruke ordet array, for å unngå sammenblanding med HTML-tabeller En array er flere variabler som er gruppert sammen under sammen navn. Enhver slik variabel kaller vi en array-innførsel ("array item" eller "array entry" på engelsk). Hvorfor trenger vi arrayer? Arrayer tillater oss å behandle grupper av studenter, tall, matvarer osv. på en systematisk måte. Finnes flere typer arrayer i PHP. Vi starter med nummer-indekserte arrayer. Enhver array-innførsel har et nummer. En nummer-indeksert array kan beskrives på følgende måte: Legg merke til at når arrayen har 3 innførsler, er det høyeste innførselnummer 2, og ikke 3. ([0], [1] og [2]) En kort notasjon for å befolke en array med verdier Følgende kode befolker en array med noen få verdier, uten å oppgi indeksene. Verdiene får automatisk indekser fra 0 og oppover. Eksemplet lager samme array som forrige eksempel. $studenter=array("arne", "Gerd", "Mona"); Linjen plasserer "Arne" som $studenter[0], "Gerd" dom $studenter[1] og "Mona" som $studenter[3] Arrayer og løkker Arrayer kan behandles systematisk i løkker. Eksempel 7: Følgende program legger inn, og skriver ut de tre innførslene i arrayen $studenter arrayinnførslene skrives på følgende måte: $studenter[0], $studenter[1], $studenter[2] osv. Enhver array-innførsel kan få tilordnet en verdi, uavhengig av de andre innførslene: Eksempel 5 : Fyll noen verdier i arrayen $studenter $studenter[0]="arne"; $studenter[1]="gerd"; $studenter[2]="mona"; PHP-kommandoen count($array_navn) Kommandoen count(argument) sørger for at PHP beregner antallet innførsler i arrayen hvis navn oppgis som argument. Dette kaller vi en funksjon, og kommer tilbake til senere. PHP- legger så resultatet i returvariabelen I eksempelet nedefor heter denne $ hvormangestudenter. Eksempel 6 : Finn ut størrelsen på arrayen $studenter (argumentet her er $studenter) $hvormangestudenter=count($studenter); print("$hvormangestudenter studenter er registrert i arrayen"); 2. $studenter=array("arne", "Gerd", "Mona"); 3. print("<p>her kommer student-utskriften:</p>\n"); 4. $i = 0; 5. $antall = count($studenter);// kommandoen count teller antall inførsler i arrayen 6. while ($i < $antall){ 7. print("<p>$i: $studenter[$i]</p>\n"); 8. $i = $i + 1;//øk verdien til $i med èn (inkrementering) 9. } 10. print("<p>ingen flere studenter i arrayen.</p>\n"); 11.?> Resultater ser ut som følger: Her kommer student-utskriften: 0: Arne 1: Gerd 2: Mona ingen flere studenter i arrayen. Resultat: 3 studenter er registrert i arrayen

Page 9 Page 10 Form-elementer som bruker arrayer Kortform for inkrementering Avkryssingsbokser- ikke utelukkende verdier som kan henge sammen ++ operatoren brukes istedenfor den litt lengre formen $i = $i + 1 Avkryssingsboks ligner på radioknapper, men innførslene her er ikke gjensidig utelukkende. $i = $i + 1 (inkrementering) er en meget vanlig handling i php (og andre språk). Eksemplet nedenfor har 3 avkryssingsbokser som angir matretter det kan velges blant. Den kan også skrives slik: $i++; Eksempel 10: $i++ betyr: øk $i med 1. Legg merke til at arrayen $mat i php-programmet respons_cb.php får like mange innførsler som det antallet avkryssingsbokser vi krysser av på. Det vil si at hvis vi krysser av 2 av matrettene, får arrayen $mat i php-programmet 2 innførsler: $ mat[0] og $mat[1]. Hva spiser du helst? Fisk Lam Ris Submit <form action="respons_cb.php"> <p>hva spiser du helst? </p> <p><input type="checkbox" name="mat[]" value="fisk" /> Fisk</p> <p><input type="checkbox" name="mat[]" value="lam" /> Lam</ p> <p><input type="checkbox" name="mat[]" value="ris" /> Ris</p> <input type="submit" /> </form> 1. <h1> Hva studenten spiser</h1> 2. <?php 3. $i = 0; 4. $antall = count($mat); 5. print("<p>arrayen dollar-mat har $antall innførsler:</p>"); 6. while ($i < $antall){ 7. print ("<p>$i: $mat[$i]</p>\n"); 8. $i = $i + 1; 9. } 10.?> Linje 2 og 10 omslutter PHP-blokken Linje 3 tilordner variabelen $i en starverdi 0, da alle våre arrayer har første innførsel på 0. På linje 4 finner programmet ut hvor mange avkryssingsbokser brukeren har krysset av Linje 6-9 utgjør while-løkken. Linje 7 og 8 gjentas så lenge fortsettelsesbetingelsen i linje 6 holder. ++ brukes både i while og for-løkker Eksempel 11: gjentagelse av eksempel 1, men med den nye operatoren 2. $i=0;//oppstart 3. while( $i < 5 ){ 5. $i++ ;//oppdatering av $i Eksempel 12: gjentagelse av et tidligere eksempel, men med den nye operatoren 2. $studenter[0]="arne"; 3. $studenter[1]="gerd"; 4. $studenter[2]="mona"; 5. print("<p>her kommer student-utskriften:</p>\n"); 6. $i = 0; 7. $antall = count($studenter);// kommandoen count teller antall inførsler i arrayen 8. while ($i < $antall){ 9. print("<p>$i: $studenter[$i]</p>\n"); 10. $i++;//øk verdien til $i med èn (inkrementering) 11. } 12. print("<p>ingen flere studenter i arrayen.</p>\n"); 13.?> Se skrift med lilla bakgrunn på linje 4 (over) og 10. Legg merke til at det heter $i++ (ikke $i = $ i++)

Page 11 Page 12 Nøsting av løkker Vi kan nøste løkker inn i hverandre for å behandle nøstede strukturer. Anta en høyskole. Vi går gjennom alle klasser. Innenfor hver klasse skriver vi ut navnene på alle studenter. Løkken som behandler alle studenter i en klasse er nøsted inn i en løkke som går gjennom alle klasser Et enklere eksempel på nøsting (om enn ikke så nyttig) er multiplikasjonstabellen. Eksempel 13: multiplikasjonstabellen i PHP (fritt etter Horgen (2005)) Klikk her for en version som kan brukes direkte i øvelsesoppgave 4 <h1>multiplikasjonstabellen</h1> 2. print( "<table>"); 3. $ytre_teller = 1;//oppstart på første rad 4. while ($ytre_teller <= 9) { 5. print("<tr>"); //starter en rad 6. $indre_teller = 1; //oppstart: første kolonne i raden 7. while ($indre_teller <= 9) { //indre, nøstet løkke (kolonnene) 8. $tall = $indre_teller * $ytre_teller; 9. print("<td>$tall</td>"); 10. $indre_teller++; 11. }//lukker den indre, nøstede løkken 12. //er nå ferdig med å lage neste rad 13. print ( "</tr>");//avslutter en rad 14. $ytre_teller++; 15. }//lukker ytre løkke 16. /*ferdig med alle radene, kan avsutte tabellen*/ 17. print ( "</table>"); 1 Multiplikasjonstabellen 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 Ukens lab-oppgaver Følgende skal øves inn: While-løkker For-løkker (*) Arrayer basert på avkryssingsbokserbokser Referanser Horgen, Svend Andreas (2005): Webprogrammering i PHP. - Gyldendal Norsk Forlag - 408 s. - ISBN: 82-05-34578-3 Sist oppdatert 18/09-06 av Michael Preminger, michael.preminger@jbi.hio.no Programmet går gjennom alle radene i multiplikasjonstabellen. (ytre løkke) I hver rad går programmet gjennom alle kolonnene (indre løkke) Når programmet er ferdig med en rad, avslutter den raden med </tr> (linje 11) Dette får vi bruk for når vi driver med databasetabeller.