Systemarkitektur. Webformularer, PHP og databaser et crash-kurs. Hva skal applikasjonsprogrammet gjøre? PHP

Like dokumenter
Webformularer, PHP og databaser et crash-kurs

Systemarkitektur. Webformularer, PHP og databaser et crash-kurs. Hva skal applikasjonsprogrammet gjøre? PHP

INF1050-php-2. Databasenavn. Institutt for informatikk Gerhard Skagestein 23. februar /~brukernavn/ maskinnavn PHP. Internet Explorer, Opera...

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

Webformularer, PHP og databaser

Webformularer, PHP og databaser

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

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

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

Tilgjegelighet av XHTML-forms

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

Webprogrammering høsten 2017

HØGSKOLEN I SØR-TRØNDELAG

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

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

Et forsøk på definisjon

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

Innhold. Innledning... 13

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

Et forsøk på definisjon

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

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

Del 1 En oversikt over C-programmering

Kapittel 1 En oversikt over C-språket

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

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

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

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

UNIVERSITETET I OSLO

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

Introduksjon til objektorientert programmering

Utførelse av programmer, metoder og synlighet av variabler i JSP

MAT-INF 1100: Obligatorisk oppgave 1

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

Et forsøk på definisjon. Eksempel 1

Programmeringsspråket C

HØGSKOLEN I SØR-TRØNDELAG

2 Om statiske variable/konstanter og statiske metoder.

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

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

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

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

TDT4110 IT Grunnkurs Høst 2015

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Forelesning inf Java 5

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

UNIVERSITETET I OSLO

lagring med HTML5 Offline lagring Offline Informasjonsteknologi 2 Gløer Olav Langslet Sandvika VGS

Forelesning inf Java 5

Løse reelle problemer

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Universitetet i Oslo Institutt for informatikk. avmystifisert i INF102. Kvile

Testsituasjon Resultat Kommentar. Fungerer som det skal!

Verdier, variabler og forms

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

Tilkobling og Triggere

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

Programmeringsspråket C Del 2

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

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

Del 4 Noen spesielle C-elementer

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

MAT-INF 1100: Obligatorisk oppgave 1

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Utvikling fra kjernen og ut

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

Markeringsspråk og XML Nettsider og XHTML

Utvikling fra kjernen og ut

SVARFORSLAG : Eksamen i IBE102 Webutvikling Våren 2017.

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

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

Forelesning inf Java 4

Databaser kort intro. Tom Heine Nätt

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

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.

Web-programmering med JSP Løsningsforslag leksjon 4

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Obligatorisk Innlevering 2

INF1000 : Forelesning 4

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Transkript:

Systemarkitektur Virkeligheten (interesseområdet) Webformularer, PHP og databaser et crash-kurs Dynamisk nettside bygges evt. opp på grunnlag av spørring mot databasen Jfr. Fra kjernen og ut, fra skallet og inn Appendix B HTTP/ PHP SQL Database Nettleser WWWtjener Databasetjener (Oracle) Firefox, Internet Explorer, Opera... http:// maskinnavn /~brukernavn/ Maskinnavn Databasenavn INF1050-php-1 INF1050-php-2 Hva skal applikasjonsprogrammet gjøre? Ta i mot data fra brukergrensesnittskjermbildet Finne ut hva som skal gjøres og gjøre det Hvis det som skal gjøres omfatter en spørring mot eller en oppdatering av en database: o Bygg en egnet SQL-kommando o Åpne databasen, send SQL-kommandoen til databasen, ta i mot resultatet, lukk basen Utføre beregninger etc. (hvis nødvendig) PHP PHP er et skriptspråk designet for å kunne utvikle dynamiske nettsider. PHP kan i en nettside brukes side om side med XHTML. PHP er open source. PHP: PHP Hypertext Preprocessor (et rekursivt akronym ) PHP-nettsted: http://www.php.net Bygg opp nettsiden som skal vises frem i brukergrensesnittet, i form av en XHTML-tekst Dette innebærer mye tegnstrenghåndtering! INF1050-php-3 INF1050-php-4

Vanlig XHTML-fil På filen ~inf1050/php/helloworld.html <title>php Hello World</title> <h1>hello World</h1> <p>hello World</p> For enkelhets skyld utelater vi de innledende XHTML-besvergelsene inntil videre! XHTML-fil med innbakt PHP På filen ~inf1050/php/helloworld.php <title>php Hello World</title> <h1>hello World fra PHP</h1> print( <p>hello World</p>"); INF1050-php-5 INF1050-php-6 Hva skjer? Når vi gjennom en nettleser aksesserer en nettside med PHP-kode, vil følgende skje: Webjeneren mottar forespørsel fra klienten Nettsiden letes opp på webtjeneren Webtjeneren utfører instruksjonene i PHP-koden, og eventuelle utskrifter blir integrert i nettsiden (dette forutsetter at webtjeneren skjønner PHP) Nettsiden sendes tilbake over nettet til nettleseren For nettleseren vil siden se ut som en helt vanlig XHTML-kodet side XHTML-fil med innbakt PHP På filen ~inf1050/php/sirkelomkretsfast.php Generert XHTML-fil <title>php sirkelberegning</title> <h1>php sirkelberegning</h1> <p> define("pi",3.1415926535897932); $radius = 1.0 ; <p> print("radius er ".$radius); Radius er 1 <br /> $omkrets = 2 * $radius * PI; print("omkrets er ".$omkrets); </p> <title>php sirkelberegning</title> <h1>php sirkelberegning</h1> <br/> Omkrets er 6.2831853071796</p> INF1050-php-7 INF1050-php-8

PHP-språket Definere konstanter: define("pi",3.1415926535897932); Det er vanlig å bruke store bokstaver for konstant-navn. Variable: Variable er dynamisk typet en variabel kan tilordnes en verdi av en hvilken som helst type Variabelnavn begynner alltid med tegnet $. Variablen opprettes første gang den nevnes. Tilordning skjer ved hjelp av tilordningsoperatoren = Eksempel: $radius = 1.0; Aritmetiske uttrykk: Eksempel: 2 * $radius * PI; Skjøte sammen tekststrenger: Sammenskjøtingsoperatoren. (punkt) PHP-språket define("pi",3.1415); // definisjon av en konstant $radius = 1.0; // deklarer og initialiser $radius print("radius er ".$radius); // skriv en streng $omkrets = 2 * $radius * PI; // beregn $omkrets print("omkrets er ".$omkrets); // skriv en streng INF1050-php-9 INF1050-php-10 IF-setninger PHP-språket IF-setninger if ($antallkronblader % 2 == 1){ print ("Elsker!"); if ($antallkronblader % 2 == 1){ print ("Elsker!"); else { print ("Elsker ikke "); == er en sammenlikningsoperator (comparison operator). Se en komplett liste på http://no2.php.net/manual/en/language.operators.comparison.php FOR-løkker for ( $i = 1; $i <= $antall; $i++ ) {.. WHILE-løkker while ($i <= $antall) {.. $i = $i + 1; PHP-språket Løkker INF1050-php-11 INF1050-php-12

PHP bruker assosiative arrayer Elementene i et assosiativt array består av nøkkel-verdi-par ( key-value-pairs ) Som nøkler kan brukes heltall (analogt med indekser i andre språk) og tekststrenger. Array med heltallsnøkler (indekser), eksempel: $mittarray = array(0 => 6, 1 => 13, 2 => 'Per', 3 => 'Gro', 4 => 3.14); $mittarray[5] = 2.71; $element3 = $mittarray[3]; // tilordner verdien Gro til $element3 Dersom det ikke er gitt noen eksplisitt nøkkel, brukes eksisterende maksimumsverdi + 1. Initialverdien er 0. Vi kan derfor også skrive $mittarray = array(6, 13,'Per','Gro', 3.14); Array med tekststrenger som nøkler, eksempel: $mittarray = array('etternavn'=>'dal', 'fornavn'=>'gro'); $mittarray['adresse'] = 'Nygaten 123' ; $fornavn = $mittarray['fornavn']; // tilordner verdien 'Gro' Array med både heltall og tekststrenger som nøkler, eksempel: $mittarray = array(6, 13, 'fornavn'=>'per', 3.14); var_dump($mittarray) gir: array(4) { [0]=> int(6) [1]=> int(13) ["fornavn"]=> string(3) "Per" [2]=> float(3.14) Tekststrenger Tekststrenger avgrenses med apostrof ' eller anførselstegn " o Ved bruk av ' bearbeides ikke tekststrengen o Ved bruk av " bearbeides tekststrengen, for eksempel konverteres \n til symbolet for linjeskift Hvis tekststrengen inneholder avgrensningssymbolet, må escape-symbolet \ settes inn i forkant: print("\" Jeg elsker deg!\", sa han"); For å unngå escape-symbolet, bruk (hvis det lar seg gjøre) avgrensningssymboler som ikke forekommer i tekststrengen: print("'jeg elsker deg!', sa han"); print('"jeg elsker deg!", sa hun'); INF1050-php-13 INF1050-php-14 Hente parametre fra brukeren På filen ~inf1050/php/sirkelomkrets.php <title>php sirkelberegning</title> <h1>php sirkelberegning</h1> <p> define("pi", 3.1415926535897932); $radius = $_GET['radius']; print("radius er ".$radius); <br /> $omkrets = 2 * $radius * PI; print("omkrets er ".$omkrets); </p> Inndataene legges i arrayet $_GET OBS! http://...... /form.html Webformularer, parametre og scripts nettleser webtjener xhtml-tekst med form xhtml-fil send skjermbilde http://......?parametre nettleser xhtml-tekst med svar webtjener Script Database INF1050-php-15 INF1050-php-16

Et enkelt webformular XHTML-kode for webformularet GET På filen ~inf1050/php/sirkelform.html INF1050-php-17 <title>sirkelformular</title> sirkelomkrets.php $radius=$_get['radius']; print("radius er ".$radius); <h1>beregning av omkretsen til en sirkel</h1> <form method="get" action="sirkelomkrets.php"> <p>skriv inn radius <input type="text" size = "10" name="radius"/></p> <p><button type="submit" name="submit">beregn omkrets</button> <button type="reset" name="reset">tøm inndatafelt</button></p> </form> <address>laget av NN dato</address> sirkelomkrets.php?radius= INF1050-php-18 XHTML-kode for webformularet POST På filen ~inf1050/php/sirkelformpost.html sirkelomkretspost.php <title>sirkelformular</title> <h1>beregning av omkretsen til en sirkel</h1> <hr/> <form method="post" action="sirkelomkretspost.php"> <p>skriv inn radius<input type="text" size = "10" name="radius"/></p> <p><button type="submit" name="submit">beregn omkrets</button> <button type="reset" name="reset">tøm inndatafelt</button> </form> <address>laget av NN dato</address> sirkelomkretspost.php $radius=$_post['radius']; print("radius er ".$radius); Inndataene legges i arrayet $_POST INF1050-php-19 XHTML-formular og PHP på samme fil På filen sirkelberegning.php: define("pi",3.1415926535897932); if(isset($_post['radius'])) $radius = $_POST['radius']; else $radius = 0; $omkrets = 2 * $radius * PI; $resultat = "Omkrets er ".$omkrets; <title>php sirkelberegning</title> <h1>beregning av omkretsen til en sirkel</h1> <form method="post" action="sirkelberegning.php"> <p>skriv inn radius <input type= text" size = "10" name="radius" value=" print($radius);" /> <br /> <button type="submit" name="submit">beregn omkrets</button> <button type="reset" name="reset">tøm inndatafelt</button> </p> </form> <p> print($resultat); </p> <address>laget av NN dato</address> Husk at php-koden blir kjørt før brukeren har fått mulighet til å se skjermbildet! Derfor isset-testen! INF1050-php-20

XHTML-formular og PHP på samme fil - resultat av kjøring PHP og XHTML Vær oppmerksom på at PHP-prosessorer kan mistolke de innledende XML besvergelser i XHTML-filer! Her et eksempel: På filen helloxhtml.php: <?xml version="1.0" encoding="iso-8859-1" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3c.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns = "http://www.w3.org/1999/xhtml"> <title>php Hello World</title> <h1>hello World fra PHP</h1> print("<p>hello World</p>"); INF1050-php-21 INF1050-php-22 PHP og XHTML (forts.) Skriv derfor ut xhtml-besvergelsene med php! På filen helloxhtml1.php: print(' <?xml version="1.0" encoding="iso-8859-1" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3c.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns = "http://www.w3.org/1999/xhtml"> '); <title>php Hello World</title> <h1>hello World fra PHP</h1> print("<p>hello World</p>"); INF1050-php-23 Sessions Hvordan overføre data fra en klient-tjener-interaksjon til den neste: Åpne en session med funksjonskallet session_start( ); Meld inn variable hvis verdier skal overføres: session_register('bruker'); session_register('passord'); Gjør variablene og deres verdier tilgjengelig i andre tjenerprogrammer med session_start( ); En session varer til nettleseren tas ned eller til timeout Dataene ligger på et beskyttet område på tjeneren pekeren til dette området overføres ved hjelp av en cookie INF1050-php-24

PHP mot databaser De fleste skriptspråk tilbyr god støtte for kobling mot databaser PHP har støtte for bl.a. MySQL og Oracle Kjekt åha pådb.inc authenticate() setter opp en dialogboks der brukeren blir invitert til å skrive inn brukernavn og passord. Verdiene legges i $bruker og $passord som er registrert i en session Innebygde funksjoner for kobling mot Oracle o OCILogon o OCILogoff o OCIExecute o $conn = baselogon($bruker, $passord) logger inn i databasen IFIORA som brukeren $bruker med $passord. Funksjonen vil returnere en kobling mot databasen ($conn). baselogoff($conn) vil stenge koblingen $conn og logge ut av databasen. $stmt = basequery($conn, $query) sender SQL-spørringen $query til databasen med koblingen $conn. Returnerer en peker til en buffer med resultatet av spørringen ($stmt). byggupdatequery, bygginsertquery, byggdeletequery funksjoner for å bygge SQL-spørringer (se dokumentasjon) INF1050-php-25 INF1050-php-26 Kjekt åha pågui.inc $html = function lagselectmeny($nokkel, $nrows, $results) returnerer XHTML-kode for en nedtrekksmeny $html = function vistabell($stmt, $pkattributter) returnerer XHTML-kode for å vise fram tabellen som ligger i spørreresultatet $stmt. $html = function vistabellmedlink($stmt, $pkattributter, $hreffil) returnerer XHTML-kode tilsvarende vistabell, men med en ekstra kolonne med en aktiv link til en web-side $hreffil. $html = function lagoppdateringsformular($stmt, $pkattributter) returnerer XHTML-kode som lager et formular som gjør det mulig å endre, legge til, eller fjerne linjer i tabellen som ligger i spørreresultatet $stmt. $html = function laginnleggingsformular($stmt, $pkattributter) returnerer XHTML-kode som lagoppdateringsformular, men med tomme felter INF1050-php-27 include "inc/db.inc"; include "inc/gui.inc"; session_start( ); Eksempel på SQL-spørring med etterfølgende fremvisning $query = "SELECT fylkenr, fylkenavn FROM Fylke ORDER BY fylkenavn"; // print($query); $conn = baselogon($bruker, $passord); // Sender query til databasen, resultatet legges i $stmt// $stmt = basequery($conn, $query); baselogoff($conn); // formater en vakker html-tabell av resultatet // $html = vistabell($stmt, array('fylkenr')); print($html); INF1050-php-28

Om feil og sikkerhet Eksempelprogrammene forutsetter happy day scenario Fullstendig kontroll av alle mulige feilsituasjoner med tilhørende diagnosemeldinger vil kreve atskillig mer programkode Den viktigste feilkilden (og den største sikkerhetsrisikoen) ligger imidlertid i gale data fra brukergrensesnittet. Derfor: Sjekk disse! o Ser tabellnavn ut som tabellnavn? o Ser numeriske verdier ut som numeriske verdier? o Finnes det umotiverte (dvs. Oracle SQLkommentartegn)? se www.php.net/manual/en/security.database.php INF1050-php-29 PHP og objekter PHP 5 har klasser og objekter tilsvarende Java. Eksempel: <title>classtest</title> // Declare a simple class class TestClass { const PI = 3.1415926 ; private $foo; public function construct($foo){ $this->foo = $foo; // -> tilsvarer Java. (sin) public function tostring() { return $this->foo; Hebraisk for $class = new TestClass('Hello'); dobbeltkolon print ($class); print (TestClass::PI); // Scope resolution operator (Paamayim Nekudotayim) Se dokumentasjon på http://www.php.net/manual/en/language.oop5.php INF1050-php-30 Noen fakta: Et godt råd til slutt o PHP-programmer utføres uten forutgående kompilering. o Variabler deklareres ikke, de opprettes første gang de nevnes. o Variabler er svakt typet. Konklusjon: o Det meste er tillatt, men ikke nødvendigvis riktig! Den vanligste reaksjonen fra et feilaktig PHP-program er at overhodet intet skjer! Moral: o Endre og teste i meget små skritt da vet du hvor feilen er! Lykke til! INF1050-php-31