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

Like dokumenter
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, høsten 2006

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

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

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

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

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

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

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

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

Verdier, variabler og forms

Tilgjegelighet av XHTML-forms

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

Introduksjon til beslutningsstrukturer

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

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

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

9. ASP med databasekopling, del II

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

HØGSKOLEN I SØR-TRØNDELAG

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

Innføring i bruk av CGI4VB

Et forsøk på definisjon

Et forsøk på definisjon

Webprogrammering høsten 2017

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

Innføring i bruk av CGI4VB

Et forsøk på definisjon. Eksempel 1

Et forsøk på definisjon. Eksempel 1

Dagens program. Kunnskapsorganisasjon og gjenfinning 1. Spørring mot databaser: SQL 2 - Spørring mot flere tabeller

Webformularer, PHP og databaser

En liten rekap. Spørrespråk. I dag SELECT

10. ASP og SQL Innledning Recordset-objektet. Innhold. Referanse til læreboka Kapittel Se detaljer nedenfor.

Objektorientert programmering i Python

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

Repetisjon Novice Videregående Python PDF

1. SQL spørringer mot flere tabeller

SVARFORSLAG : Eksamen i IBE102 Webutvikling Våren 2017.

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

Eksamen i IBE102 Webutvikling Våren 2017.

SELECT DISTINCT Fornavn, Etternavn, Programtittel FROM Program P, Medvirkende M, Deltagelse D. SELECT Tilgjengelighet FROM Program

EndNote referansehåndteringsprogram. HiVe biblioteket

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

HØGSKOLEN I SØR-TRØNDELAG

Løse reelle problemer

HTML og relasjonsdatabaser med PHP

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

HØGSKOLEN I SØR-TRØNDELAG

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

Oblig 4 Undervisningshefte i grunnleggende JavaScript programmering

PolyPrint Brukermanual

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Velkommen til. INF våren 2017

Oversikt over flervalgstester på Ifi

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

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å.

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14

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

Oppgaver uke 1: Løsningsforslag

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

Dette dokumentet er en produktrapport for vårt avsluttende hovedprosjekt våren 2008 ved høgskolen i Oslo, for ingeniør - avdelingen.

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

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

EKSAMEN ITF Innføring i programmering Dato: Eksamenstid: 11/

Flytte Lønn 5.0 fra SQL 2000 til SQL 2005 / 2008

Vanlige spørsmål om EndNote (april 2013)

NY PÅ NETT. E-post, med Gmail.

En lett innføring i foreninger (JOINs) i SQL

file:///c:/users/michaelp/sites/dkdm/dw6/dreamweaver6.html

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

en hjemmeside Lesson Introduksjon Du kjenner en del HTML tagger, så nå er det på tide å lage din første hjemmeside! La oss begynne med en gang.

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

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

Brukerveiledning Pensumliste

En bedre verden med AJAX

Eksamen i Internetteknologi Fagkode: ITE1526

1. SQL datadefinisjon og manipulering

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

IN1000 Obligatorisk innlevering 7

Øvingsforelesning 5 Python (TDT4110)

Shellscripting I. Innhold

Høgskoleni østfold EKSAMEN

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

Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt!

Løse reelle problemer

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

Videregående programmering 6

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

Øvingsforelesning i Python (TDT4110)

Web-programmering med JSP Løsningsforslag leksjon 3

Bruke SQL fra Python. Med Psycopg2

Øvingsforelesning 5 Python (TDT4110)

Innhold. Bruksanvisning for Zotero (oppdatert 11/11/2017)

Læringsmål og pensum. Hvordan virker webteknologi? (klient-tjener arkitektur) HTML - virkemåte. Nettleser: Firefox, Opera, Safari

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

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

Transkript:

Page 1 Page 2 [Kurssidene] [ JBI] [ ] Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006 PHP og databaser IV Eksempel 1: koden for nedtrekksmenyen (kopi av eksempel 3 fra uke 43) Michael Preminger (michaelp@hio.no) Tilbakeblikk Idag Forbindelse mot database Sending av søk Gjennomgang av resultatsett Brukerstyrte søk Søk mot flere tabeller (joins) Fortsettelse grunnleggende kommunikasjon mot databaser: Løsning av oppgave 2 fra uke 43 Oppfrisking av SQL fra vårsemesteret bruk av aliaser for tabellnavn Repetisjon - oppgaver uke 43 Vi har vist hvordan søkeresultat fra databasen kan benyttes for å fylle en nedtrekksmeny. Valget gjort i denne menyen kan brukes for å avgrense et søk, som gir oss bøker skrevet av valgt forfatter. Vi tenker oss et følgende mulig interaksjonsmønster: 1. 2. $sql= <<<SLUTTSQL 3. SELECT Etternavn FROM Forfatter 4.SLUTTSQL; 5. $resultatsett=mysql_query($sql); 6. print <<<ENDFORMSTART 7. <form action="respons.php"> 8. <p> 9. <select name="valgt"> 10.ENDFORMSTART; 11. $enrad=mysql_fetch_assoc($resultatsett); 12. while($enrad!= false){ 13. print <<<OPTIONSLUTT 14. <option>{$enrad['etternavn']}</option> 15.OPTIONSLUTT; 16. $enrad = mysql_fetch_assoc($resultatsett); 17. } //end while 18. print <<<ENDFORMSLUTT 19. </select> 20. </p> 20. <p><input type="submit" value="send søk"/></p> 21. </form> 22.ENDFORMSLUTT; <form> <select name = "valgt" ><option>allende</ option> <option>ambjørnsen</option> <option>dahl</option> <option>hagerup</option> <option>lindgren</option> <option>newth</option> <option>newth</option> <option>smith</option> <option>faldbakken</option>... flere slike </select> <input type = "submit" value = "send søk" /> </form> Allende send søk Linjer 2-5 formulerer og gjennomfører søket etter alle forfattere. Linjer 6-10 skriver ut starten på formen og nedtrekksmenyen. På linjene 11-17 ser vi løkken som skriver ut <option> taggene med etternavnene som hentes fra databasen (navn etter navn). Linjer 19-22 avslutter menyen og formen. Vi hopper foreløpig over boks nr. 1 Boksene 2 (foreløpig uavgrenset), 3 og 4 kan konkretiseres som på figuren nedenfor: Ved klikk på submit-knappen starter programmet "respons.php. På linje 9 ser vi at forfatteretternavnet som brukeren velger legges i variabelen som heter $valgt i dette programmet.

Page 3 Page 4 Eksempel 2: Boks 5, utskrift av resultattabellen etter valg av forfatter fra listen (eksempel 4 fra forrige uke) ser ut slik: 1. 2. 3. $sql=<<<sluttsql 4. SELECT Bok.Tittel as Tittel, 5. Forfatter.Etternavn as Forfatternavn 6. FROM Bok, Forfatter, Utgivelse 7. WHERE 8. Bok.ISBN = Utgivelse.ISBN 9. AND Utgivelse.ForfatterID=Forfatter.ForfatterID 11. AND Forfatter.Etternavn='$valgt' 12.SLUTTSQL; 14. $resultatsett = mysql_query($sql); 15. if($resultatsett == false) { 16. die("feil i spørsmålet: $sql". mysql_error()) ; 17. } 18. $antallraderhentet = mysql_num_rows($resultatsett) ; 19. if($antallraderhentet == 0){ 20. die("ingen rader hentet ". mysql_error()) ; 21. } 22. print <<<TABELLSTARTSLUTT 23. <table> 24. <tr> 25. <th>tittel</th> <th>forfatternavn</th> 26. </tr> 27.TABELLSTARTSLUTT; 28. $enrad = mysql_fetch_assoc($resultatsett); 29. while ($enrad!=false){ 30. print <<<TRSLUTT 31. <tr> 31. <td> {$enrad['tittel']}</td> 32. <td> {$enrad['forfatternavn']} </td> 33. </tr> 34.TRSLUTT; 35. $enrad = mysql_fetch_assoc($resultatsett); 36. } 37. print <<<TABELLSLUTTSLUTT 38. </table> 39.TABELLSLUTTSLUTT; 40. <table> td> <tr> <th>tittel</th> <th>etternavn</th> </tr> <tr> </tr> <tr> <td> Rubinen i røyken </td> <td> Pullman </td> <td> Jakob og fugleskremselet </ <td>pullman</td> </tr> </table> Tittel Rubinen i røyken Jakob og fugleskremselet Etternavn Pullman Pullman Linje 3-21 foretar selve søket, og henter resultatene. Se spesielt linje 11: Menyvalget fra eksempel 1 brukes for å avgrense søket. Linje 22-27 skriver tabelloverskriften Linje 28-36 henter radene fra resultattsettet en etter en, og skriver radene til tabellradene (data til tabellcellene) Linje 37-39 avslutter tabellen.

Page 5 Page 6 Avgrensing av menyinnførslene Et lite tillegg til systemet blir å avgrense menyen før den vises (boks 1). Vi tenker noe slikt: 1. $sql= <<<SLUTTSQL 2. SELECT Etternavn FROM Forfatter 3. WHERE Etternavn LIKE '$etternavn%' Vi starter men en form som inneholder et tekstelement som brukeren kan bruke til å avgrense menyvalgene. For eksempel: bare forfattere som begynner med 'P' 4.SLUTTSQL; Deretter er systemet helt likt det foregående, men menyen har et begrenset og overkommelig antall inførsler. Resten av filen som genererer nedtrekksmenyen er, altså det samme som i eksempel 1 ovenfor For å få til dette, introduserer vi en form med et tekstelement som en inngang til systemet. Koden er følgende: Oppgi(starten på) Etternavnet på forfatteren: Submit Reset <form action= "form_med_ meny.php"> <p> <label for="etternavn_id2"> Oppgi (starten på) Etternavnet på forfatteren: </label> <input type="text" name= "etternavn" id="etternavn_id2" /> </p> <p> <input type="submit" /> <input type="reset"/> </p> </form> form_med_ meny.php (eksempel 1.) form_med_ meny.php I filen form_med_meny.php (eksepmel 1) forandrer vi SQL-søket, slik at den tar med avgrensningen på etternavnet som kommer fra formen ovenfor

Page 7 Page 8 Lenker I tabellvisningen i eksemplet ovenfor legger vi en ekstra kolonne (linje 34-40 nedenfor:) Vi bruker lenker når vi navigerer mellom websider (se i XHTML-kurset) Lenker kan brukes på mange forskjellige måter. Det går an å lenke til XHTML-sider, PHP-programmer og bilder En lenke til et PHP-program kan se ut som følger: <a href="bibliotek.php?fornavn=michael">bibliotek</a> Et klikk på lenken kjører programmer bibliotek.php, med "Michael" som verdi i variabelen fornavn. Tilsvarer en form, med action="bibliotek.php", en tekstboks med name="fornavn" og en submit-knapp Bruk av frimerkebilder som lenke-ankre Som en siste utvidelse av vårt lille system, forsøker vi å plassere frimerkebilder i tabellen over bøker, slik at brukeren, om ønskelig, kan klikke seg til et større bilde av bokomslaget For dette formålet har vi plassert frimerkebilder i databasen i en egen kolonne. Vi plasserer en lenke, med frimerkebildet som anker, og brukeren kan dermed klikke denne for å se på et større bilde 29. while ($enrad!=false){ 30. print <<<TRSLUTT 31. <tr> 32. <td> {$enrad['tittel']}</td> 33. <td> {$enrad['forfatternavn']} </td> 34. <td> <a href="$url_mappe{$enrad['bildefil']}"> 35. <img 36. src= "$frimerke_mappe{$enrad['frimerkefil']}" 37. alt = "bokomslag" 38. /> 39. </a> 40. </td> 41. </tr> 42. TRSLUTT 43.} På linje 34 (<a> taggen) starter vi en HTML lenke, med henvisning til en billedfil. Den lukkes på linje 39, (</a>). Ankeret, linje 35-38, er et bilde - altså vårt frimerkebilde. Lenkets referanse, altså filen som vises ved klikk (href-attributtet linje 34) er en større versjon av bildet. Resten er det samme som i eksempel 4 ovenfor.

Page 9 Page 10 9. Litt mer om SQL-søk Aliaser for tabellnavn Vi husker (?) fra databasekurset at vi kan tilordne aliaser til våre tabeller. Dette kan gjøre komplekse søk litt lettere å formulere. En alias tilordnes ved at tabellnavnet i FROM-setningen etterfølges av et "istedenfor-navn" SELECT... FROM Forfatter F F ovenfor er aliasen til tabellnavnet Forfatter. Aliasen kan brukes i hele søket, istedenfor tabellnavnet. Eksempel 3: Vi forsyner våre tabeller med aliaser, og gjør vårt søk mer leselig SELECT F.Etternavn, Forfatternavn B.ISBN AS ISBN FROM Forfatter F, Utgivelse U, Bok B WHERE F.ForfatterID=U.ForfatterID AND U.ISBN=B.ISBN AND Etternavn='Allende' Aliasene gir oss færre bokstaver å skrive søket blir lettere å lese hindrer en del potensielle skrivefeil Med løkker kan programmet gjenta handlinger for grupper av objekter, for eksempel rader i databaser. Vi innførte while-løkker og for-løkker. Arrayer tillater oss å behandle grupper av studenter, tall, matvarer osv. på en systematisk måte. tallindekserte arrayer: opprettes for eksempel slik $byer[0]="oslo"; $byer[1]="bergen"; $byer[2]="trondheim"; og kan gjennomgås systematisk slik (med en while-løkke): $antallbyer = count($byer); $i=0;//initialisering av tellervariabel while( $i < $antallbyer ){ print("<p>$i: $byer[$i]</p>"); $i = $i + 1 ; //avansement av tellervariabel } 0: Oslo 1: Bergen 2: Trondheim Kort tilbakeblikk Emner vi har gjennomgått Tjenerbaserte, dynamiske, interaktive websider med PHP PHP tolkes på tjeneren. Tolkningen genererer (X)HTML dynamisk Variabler og forms Forms muliggjør henting av data fra brukere Variabler gjør det mulig for oss å eller slik (med en for-løkke): $antallbyer = count($byer); for($i=0 ; $i < $antallbyer; $i = $i + 1 ){ print("<p>$i: $byer[$i]</p>"); } 0: Oslo 1: Bergen 2: Trondheim mellomlagre data for bruk i programmet hente data fra forms Vi bruker betinget utføring for å styre programmets gang. Med betinget utføring handler programmet litt annerledes, utfra forskjellige data og andre forskjellige faktorer. 1. 2. if ($alder > 65){ 3. $pris=250; 4. } 5. else{ 6. $pris=500; 7. } 8. print("vennligst innbetal konf.avgift, kr. $pris snarest!"); assosiative arrayer //Oppretter arrayen $fodselsdager["niels"] = "11. desember"; $fodselsdager["jens"] = "12. juni"; $fodslesdager["mari"] = "21. oktober"; Resultatrader fra databaserader ble stort sett hentet som assosiative arrayer Vi så på funksjoner

Page 11 innebygde PHP-funksjoner enkle funksjoner som strlen og trim som mottar parametre mysql-funksjoner egendefinerte funksjoner, som vi bruker for oppgaver vi utfører ofte, eller for å dele opp kompliserte oppgaver inn i enkle bestanddeler Databaseforbindelse søking og behandling av søkeresultater innlegging av data Sist oppdatert 30/10-06 av Michael Preminger, michael.preminger@jbi.hio.no