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

Like dokumenter
Webformularer, PHP og databaser

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

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

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

Webformularer, PHP og databaser et crash-kurs

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

HØGSKOLEN I SØR-TRØNDELAG

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

HØGSKOLEN I SØR-TRØNDELAG

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

Tilgjegelighet av XHTML-forms

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

Webprogrammering høsten 2017

Et forsøk på definisjon

HØGSKOLEN I SØR-TRØNDELAG

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

Utvikling fra kjernen og ut

Innhold. Innledning... 13

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.

Utvikling fra kjernen og ut

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

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

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

HTML og relasjonsdatabaser med PHP

Verdier, variabler og forms

SVARFORSLAG : Eksamen i IBE102 Webutvikling Våren 2017.

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

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

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

Læringsmål. INF1050 dagsorden 14. jan Formålet med prosjektet. Den obligatoriske prosjektoppgaven

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

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

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

HØGSKOLEN I SØR-TRØNDELAG

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

Utvikling fra kjernen og ut

Databaser kort intro. Tom Heine Nätt

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

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

Kapittel 1 En oversikt over C-språket

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

Del 1 En oversikt over C-programmering

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

Eksamen i Internetteknologi Fagkode: IVA1379

EKSAMEN ITF Webprogrammering 1 Dato: Eksamenstid: Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

6105 Windows Server og datanett

INF130 Datahåndtering og analyse

6105 Windows Server og datanett

HØGSKOLEN I SØR-TRØNDELAG

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

Løse reelle problemer

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

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

Web-programmering med JSP Løsningsforslag leksjon 3

Utvikling fra kjernen og ut

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

ITGK - H2010, Matlab. Repetisjon

Shellscripting I. Innhold

Et forsøk på definisjon

HØGSKOLEN I SØR-TRØNDELAG

MAT1030 Diskret Matematikk

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

InfoRed Publisering. - produktbeskrivelse. TalkPool WebServices Postboks Åneby

Huldt & Lillevik Ansattportal. - en tilleggsmodul til Huldt & Lillevik Lønn. Teknisk beskrivelse

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

Et forsøk på definisjon. Eksempel 1

Gruppe prosjekt del 3. INFO134 Klientprogrammering Vår 2017 Kandidatnummer: 304, 298

Applikasjonsutvikling med databaser

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Å lage Noark 4 uttrekk selv. Thomas Sødring thomas.sodring@jbi.hio.no /

Velkommen til. INF Systemutvikling. INF1050 dagsorden 16. jan Læringsmål. Læringskomponenter. Om kurset. o Læringsmål.

Kap 3: Anvendelser av Internett

HØGSKOLEN I SØR-TRØNDELAG

TDT4110 IT Grunnkurs Høst 2015

EKSAMEN (Konvertert fra en gammel PHPeksamen)

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

EKSAMEN (Konvertert fra en gammel PHPeksamen)

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

Tilkobling og Triggere

Opphavsrett: Forfatter og Stiftelsen TISIP

Et forsøk på definisjon. Eksempel 1

INTRODUKSJON HVEM ER DETTE FAGET FOR?...

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

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

Forelesning inf Java 5

Web-programmering med JSP Løsningsforslag leksjon 4

Forelesning inf Java 5

Høgskoleni østfold EKSAMEN

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

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

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

Oversikt over flervalgstester på Ifi

6105 Windows Server og datanett

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

MySQL-database, php. Innhold. 8 MySQL-database, php. 8.1 Databasen MySQL

MAT1030 Plenumsregning 1

Transkript:

Systemarkitektur Virkeligheten (interesseområdet) Webformularer, PHP og databaser Dynamisk webside 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) Netscape, 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) Bygg opp websiden som skal vises frem i brukergrensesnittet, i form av en HTML-tekst Dette innebærer mye tegnstrenghåndtering! PHP PHP er et skriptspråk designet for å kunne utvikle dynamiske websider PHP kan i en webside brukes side om side med HTML En HTML-side og et PHP-skript skiller seg fra hverandre på et viktig punkt: HTML leses og interpreteres på klient-siden, mens PHP leses og interpreteres på webtjeneren INF1050-php-3 INF1050-php-4

WWW, forespørsel og respons Vanlig HTML-fil http://wwwheimuiono /inf1050/indexhtml Nettleser web-tjener html Responsen tolkes og vises av nettleseren filtype html-kodet tekst eller binærfil wwwheimuiono /inf1050/indexhtml INF1050-php-5 På filen ~inf1050/php/helloworldhtml <html> <title>php Hello World</title> <h1>hello World</h1> Hello World INF1050-php-6 HTML-fil med innbakt PHP På filen ~inf1050/php/helloworldphp <html> <title>php Hello World</title> <h1>hello World fra PHP</h1> print("hello World"); Hva skjer? Når vi gjennom en nettleser aksesserer en webside med PHP-kode, vil følgende skje: Tjeneren mottar forespørsel fra klienten Websiden letes opp på tjeneren Tjeneren utfører instruksjonene i PHP-koden, og eventuelle utskrifter blir integrert i websiden Websiden sendes tilbake over nettet til nettleseren For nettleseren vil siden se ut som en helt vanlig HTML-kodet side INF1050-php-7 INF1050-php-8

HTML-fil med innbakt PHP På filen ~inf1050/php/sirkelomkretsfastphp <title>php sirkelberegning</title> <H1>PHP sirkelberegning</h1> define("pi","31415926535897932"); $radius = 10 ; print("radius er "$radius); $omkrets = 2 * $radius * PI; print("omkrets er "$omkrets); PHP-språket define("pi","31415"); // definisjon av en konstant $radius = 10; // 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 PHP-språket PHP-språket IF-setninger Definere konstanter: define("pi","31415926535897932"); IF-setninger Det er vanlig å bruke store bokstaver for konstant-navn Variable: Variabelnavn begynner alltid med tegnet $ Variabelen opprettes første gang den nevnes Tilordning skjer ved hjelp av tilordningsoperatoren = Eksempel: $radius = 10; Aritmetiske uttrykk: Eksempel: 2 * $radius * PI; if (INSTITUTT == "Ifi") { print ("Institutt for informatikk"); if (INSTITUTT == "Ifi") { print ("Institutt for informatikk"); else { print ( Et annet institutt ); Skjøte sammen tekststrenger: Sammenskjøtingsoperatoren (punkt) INF1050-php-11 INF1050-php-12

FOR-løkker PHP-språket Løkker for ( $i = 1; $i <= $antall; $i++ ) { WHILE-løkker while ($antall < 15) { $antall = $antall + 1; Vanlige og assosiative arrayer PHP-arrayer kan indekseres både med heltall (som i andre språk) og med tekststrenger ( nøkler ) Vanlig array $vanligarray = array(6, 13, 'Per', 'Gro', 314); $vanligarray[5] = 271; $element3 = $vanligarray[3]; // tilordner verdien Gro Assosiativt array $assarray = array('etternavn'=>'dal', 'fornavn'=>'gro'); $assarray['adresse'] = 'Nygaten 123' ; $fornavn = $assarray['fornavn']; // tilordner verdien 'Gro' Blandingsform $blandingsarray = array(6, 13, 'fornavn'=>'per', 314); elementene i et assosiativt array består av key - value -par INF1050-php-13 INF1050-php-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'); Hente parametre fra brukeren På filen ~inf1050/php/sirkelomkretsphp <html> <title>php sirkelberegning</title> <H1>PHP sirkelberegning</h1> define("pi","31415"); $r = 00; $radius = $_GET['radius']; $r = (double) $radius; print("radius er "$r); $omkrets = 2 * $r * PI; print("omkrets er "$omkrets); Inndataene legges i det assosiative arrayet $_GET OBS! INF1050-php-15 INF1050-php-16

Webformularer, parametre og scripts Et enkelt webformular webklient send webklient http:// /formhtml html-tekst med Form skjermbilde http://?parametre html-tekst med svar webtjener webtjener Script Database INF1050-php-17 INF1050-php-18 HTML-kode for webformularet GET På filen ~inf1050/php/sirkelformhtml <HEAD> <TITLE>Sirkelformular</TITLE> </HEAD> <BODY> <H1>Beregning av omkretsen til en sirkel</h1> <FORM METHOD="GET" ACTION="sirkelomkretsphp"> Skriv inn radius <INPUT TYPE="TEXT" SIZE = "10" NAME="radius"> <INPUT TYPE="SUBMIT" VALUE="Beregn omkrets"> <INPUT TYPE="RESET" VALUE = "Tøm inndatafelt"></p> </FORM> <I>Laget av Gerhard Skagestein 20 januar 2004 for INF1050</I> </BODY> </HTML> Sirkelomkretsphp $r = 00; $radius=$_get['radius']; $r = (double) $radius; print("radius er "$r); sirkelomkretsphp?radius= HTML-kode for webformularet POST På filen ~inf1050/php/sirkelformposthtml <HEAD> <TITLE>Sirkelformular</TITLE> </HEAD> <BODY> <H1>Beregning av omkretsen til en sirkel</h1> <FORM METHOD= POST" ACTION="sirkelomkretspostphp"> Skriv inn radius <INPUT TYPE="TEXT" SIZE Inndataene = "10" legges i NAME="radius"> det assosiative <INPUT TYPE="SUBMIT" VALUE="Beregn omkrets"> arrayet $_POST <INPUT TYPE="RESET" VALUE = "Tøm inndatafelt"></p> </FORM> <I>Laget av Gerhard Skagestein 20 februar 2004 for INF1050</I> </BODY> </HTML> Sirkelomkretspostphp $r = 00; $radius=$_post['radius']; $r = (double) $radius; print("radius er "$r); sirkelomkretspostphp INF1050-php-19 INF1050-php-20

HTML-formular og PHP på samme fil // ligger på sirkelberegningphp define("pi","31415926535897932"); if(isset($_post['radius'])) $radius = $_POST['radius']; else $radius = 0; $omkrets = 2 * $radius * PI; $resultat = "Omkrets er "$omkrets; <HTML> <HEAD> <TITLE>PHP sirkelberegning</title> </HEAD> <BODY> <H1>Beregning av omkretsen til en sirkel</h1> <FORM METHOD=POST ACTION="sirkelberegningphp"> Skriv inn radius <INPUT TYPE="TEXT" SIZE = "10" NAME="radius" VALUE= print($radius); > <INPUT TYPE="SUBMIT" VALUE="Beregn omkrets"> <INPUT TYPE="RESET" VALUE = "Tøm inndatafelt"></p> </FORM> print($resultat); <I>Laget av NN dato</i> </BODY> </HTML> Husk at php-koden blir kjørt før brukeren har fått mulighet til å se skjermbildet! Derfor isset-testen! HTML-formular og PHP på samme fil - resultat av kjøring INF1050-php-21 INF1050-php-22 Sessions PHP mot databaser 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 De fleste skriptspråk tilbyr god støtte for kobling mot databaser PHP har støtte for bla MySQL og Oracle Innebygde funksjoner for kobling mot Oracle o OCILogon o OCILogoff o OCIExecute o Dataene ligger på et beskyttet område på tjeneren pekeren til dette området overføres ved hjelp av en cookie INF1050-php-23 INF1050-php-24

Kjekt å ha på dbinc 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 $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 Kjekt å ha på guiinc $html = function lagselectmeny($nokkel, $nrows, $results) returnerer HTML-kode for en nedtrekksmeny $html = function vistabell($stmt, $pkattributter) returnerer HTML-kode for å vise fram tabellen som ligger i spørreresultatet $stmt $html = function vistabellmedlink($stmt, $pkattributter, $hreffil) returnerer HTML-kode tilsvarende vistabell, men med en ekstra kolonne med en aktiv link til en web-side $hreffil $html = function lagoppdateringsformular($stmt, $pkattributter) returnerer HTML-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 HTML-kode som lagoppdateringsformular, men med tomme felter INF1050-php-26 Eksempel på SQL-spørring med etterfølgende fremvisning include "inc/dbinc"; include "inc/guiinc"; session_start( ); $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); 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 kommentartegn)? se wwwphpnet/manual/en/securitydatabasephp INF1050-php-27 INF1050-php-28