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

Like dokumenter
Webformularer, PHP og databaser

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

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

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

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

Tilgjegelighet av XHTML-forms

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

HØGSKOLEN I SØR-TRØNDELAG

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

Webprogrammering høsten 2017

</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

Et forsøk på definisjon

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

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

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

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

Innhold. Innledning... 13

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

Et forsøk på definisjon

HØGSKOLEN I SØR-TRØNDELAG

Verdier, variabler og forms

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

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

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

Markeringsspråk og XML Nettsider og XHTML

Et forsøk på definisjon. Eksempel 1

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

Utvikling fra kjernen og ut

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

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

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

Utvikling fra kjernen og ut

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

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

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.

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

SVARFORSLAG : Eksamen i IBE102 Webutvikling Våren 2017.

Introduksjon til objektorientert programmering

Forelesning inf Java 5

Forelesning inf Java 5

Testsituasjon Resultat Kommentar. Fungerer som det skal!

Nettsider og XHTML. SGML-familien. Hvordan lage et nettsted

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

Løse reelle problemer

Tilkobling og Triggere

Databaser kort intro. Tom Heine Nätt

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

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

HØGSKOLEN I SØR-TRØNDELAG

InfoRed Publisering. - produktbeskrivelse. TalkPool WebServices Postboks Åneby

1. XHTML. Innhold Innledning

Oblig 5 Webutvikling. Av Thomas Gitlevaag

HTML og relasjonsdatabaser med PHP

UNIVERSITETET I OSLO

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

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

EKSAMEN (Konvertert fra en gammel PHPeksamen)

Web-programmering med JSP Løsningsforslag leksjon 3

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

INF130 Datahåndtering og analyse

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

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

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

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

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

Web-programmering med JSP Løsningsforslag leksjon 4

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

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

Et forsøk på definisjon. Eksempel 1

6105 Windows Server og datanett

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

2 Om statiske variable/konstanter og statiske metoder.

EKSAMEN (Konvertert fra en gammel PHPeksamen)

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

Denne rapporten er beregnet for dataansvarlig på Grefsenhjemmet, den som skal installere, vedlikeholde og modifisere systemet.

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

EGENDEFINERTE FUNKSJONER I SAS OG LITT OM OPEN SOURCE INTEGRASJON SAS FANS I STAVANGER , MARIT FISKAAEN (SAS INSTITUTE)

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

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; }

6105 Windows Server og datanett

INF Algoritmer og datastrukturer

Eksamen i Internetteknologi Fagkode: IVA1379

Del 1 En oversikt over C-programmering

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

Utvikling fra kjernen og ut

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Kapittel 1 En oversikt over C-språket

Shellscripting I. Innhold

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

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

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

Kap 3: Anvendelser av Internett

Transkript:

Webformularer, PHP og databaser et crash-kurs Jfr. Fra kjernen og ut, fra skallet og inn Appendix B (ny versjon pr. 22. februar 2005 oppdatert mhp. XHTML) INF1050-php-1 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 XHTML-tekst Dette innebærer mye tegnstrenghåndtering! INF1050-php-3 Systemarkitektur Virkeligheten (interesseområdet) Dynamisk webside bygges evt. opp på grunnlag av spørring mot databasen Nettleser HTTP/ PHP WWWtjener SQL Database Databasetjener (Oracle) Netscape, Internet Explorer, Opera... http:// maskinnavn /~brukernavn/ Maskinnavn Databasenavn INF1050-php-2 PHP PHP er et skriptspråk designet for å kunne utvikle dynamiske websider. PHP kan i en webside brukes side om side med XHTML. En XHTML-side og et PHP-skript skiller seg fra hverandre på et viktig punkt: XHTML leses og interpreteres på klient-siden, mens PHP leses og interpreteres som regel på webtjeneren. PHP er open source. PHP: PHP Hypertext Preprocessor (et rekursivt akronym ) INF1050-php-4

WWW, forespørsel og respons Nettleser Responsen tolkes og vises av nettleseren http://heim.ifi.uio.no /~inf1050/index.html.html filtype xhtml-kodet tekst eller binærfil web-tjener heim.ifi.uio.no /~inf1050/index.html INF1050-php-5 XHTML-fil med innbakt PHP På filen ~inf1050/php/helloworld.php <html> <title>php Hello World</title> <h1>hello World fra PHP</h1> print("hello World<br/ >"); INF1050-php-7 Vanlig XHTML-fil På filen ~inf1050/php/helloworld.html <html> <title>php Hello World</title> For enkelhets skyld utelater vi de innledende XHTML-besvergelsene inntil videre! <h1>hello World</h1> Hello World <br/ > INF1050-php-6 Hva skjer? Når vi gjennom en nettleser aksesserer en nettside med PHP-kode, vil følgende skje: Tjeneren mottar forespørsel fra klienten Nettsiden letes opp på tjeneren Tjeneren utfører instruksjonene i PHP-koden, og eventuelle utskrifter blir integrert i nettsiden Nettsiden sendes tilbake over nettet til nettleseren For nettleseren vil siden se ut som en helt vanlig XHTML-kodet side INF1050-php-8

XHTML-fil med innbakt PHP På filen ~inf1050/php/sirkelomkretsfast.php <title>php sirkelberegning</title> <h1>php sirkelberegning</h1> define("pi",3.1415926535897932); $radius = 1.0 ; print("radius er ".$radius); <br /> $omkrets = 2 * $radius * PI; print("omkrets er ".$omkrets); INF1050-php-9 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-11 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) INF1050-php-10 PHP-språket IF-setninger IF-setninger if (INSTITUTT == "Ifi") { print ("Institutt for informatikk"); if (INSTITUTT == "Ifi") { print ("Institutt for informatikk"); else { print ("Et annet institutt"); INF1050-php-12

PHP-språket Løkker FOR-løkker for ( $i = 1; $i <= $antall; $i++ ) {.. WHILE-løkker while ($antall < 15) {.. $antall = $antall + 1; 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-15 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', 3.14); $vanligarray[5] = 2.71; $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', 3.14); elementene i et assosiativt array består av key - value -par INF1050-php-14 Hente parametre fra brukeren På filen ~inf1050/php/sirkelomkrets.php <html> <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 det assosiative arrayet $_GET OBS! INF1050-php-16

Webformularer, parametre og scripts webklient send webklient http://...... /form.html html-tekst med Form skjermbilde http://......?parametre html-tekst med svar webtjener webtjener Script Database INF1050-php-17 XHTML-kode for webformularet GET På filen ~inf1050/php/sirkelform.html sirkelomkrets.php <html xmlns = "http://www.w3.org/1999/xhtml"> <title>sirkelformular</title> $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><input type="submit" value="beregn omkrets"/> <input type="reset" value = "Tøm inndatafelt"/></p> </form> <address>laget av NN dato</address> sirkelomkrets.php?radius= INF1050-php-19 Et enkelt webformular INF1050-php-18 XHTML-kode for webformularet POST På filen ~inf1050/php/sirkelformpost.html sirkelomkretspost.php $radius=$_post['radius']; print("radius er ".$radius); <html xmlns = "http://www.w3.org/1999/xhtml"> <title>sirkelformular</title> <h1>beregning av omkretsen til en sirkel</h1> <hr/> <form method="post" action="sirkelomkretspost.php"> Inndataene legges i det assosiative arrayet $_POST <p>skriv inn radius<input type="text" size = "10" name="radius"/></p> <p><input type="submit" value="beregn omkrets"/> <input type="reset" value = "Tøm inndatafelt"/></p> </form> <address>laget av NN dato</address> sirkelomkretspost.php INF1050-php-20

XHTML-formular og PHP på samme fil // ligger på sirkelberegning.php define("pi",3.1415926535897932); if(isset($_post['radius'])) $radius = $_POST['radius']; else $radius = 0; $omkrets = 2 * $radius * PI; $resultat = "Omkrets er ".$omkrets; <html> <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 \><input type="submit" value="beregn omkrets"> <input type="reset" value = "Tøm inndatafelt"></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-21 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-23 XHTML-formular og PHP på samme fil - resultat av kjøring 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-24

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-25 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 $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-27 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 Innebygde funksjoner for kobling mot Oracle o OCILogon o OCILogoff o OCIExecute o 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-28

Eksempel på SQL-spørring med etterfølgende fremvisning include "inc/db.inc"; include "inc/gui.inc"; 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); INF1050-php-29 PHP og objekter PHP 5 har klasser og objekter tilsvarende Java For detaljer, se http://www.php.net/manual/en/language.oop5.php Eksempel: // Declare a simple class class TestClass { public $foo; public function construct($foo) { $this->foo = $foo; // -> tilsvarer Java. (sin) public function tostring() { return $this->foo; $class = new TestClass('Hello'); print ($class); INF1050-php-31 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-30 En verktøykasse for INF1050-studenter Masterstudent Håkon Karlsen holder på med å utvikle en verktøykasse som skal gjøre det enklere å realisere PHPdelen av prosjektet Ideen er å få generert sentrale klasser i systemet, istedenfor å programmere dem manuelt For dokumentasjon, se http://heim.ifi.uio.no/~haakonsk/doc/ INF1050-php-32