PHP. PHP: Hypertext Preprocessor

Relevanta dokument
Karlstads Universitet, Datavetenskap 1

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

PHP. Dynamiska webbsidor

Introduktion HTML och PHP 732G16 Databaser design och programmering

PHP. TNMK30 - Elektronisk publicering

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

729G28. Webbprogrammering och databaser. Introduktion till webbutveckling med PHP. Jakob Pogulis Institutionen för Datavetenskap (IDA)

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

Webbprogrammering - 725G54 PHP. Foreläsning II

Användarhandledning Version 1.2

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Avancerade Webbteknologier

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM.

Kopiering av objekt i Java

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Webbprogrammering. Sahand Sadjadee

PHP-presentation Dataföreningens Open Source-nätverk

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

F4. programmeringsteknik och Matlab

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 4 Serverskript PHP Validering av data med serverskript Formulär

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Programmeringteknik. Planering MÅL LABB: MOMENT LAB4 HTML - EXEMPEL HTML. Webbdelen

729G04 Programmering och diskret matematik. Föreläsning 7

Hemsideutveckling för Anjool AB

Essential Php Security Författare: Shiflett, Chris Antal sidor: 124 Förlag: O'Reilly

Webbservrar, severskript & webbproduktion

Laboration: Whitebox- och blackboxtesting

Introduktion till PHP

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Ordlistor, filhantering och ut på webben. Linda Mannila

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

Introduk+on +ll programmering i JavaScript

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Classes och Interfaces, Objects och References, Initialization

F8 Webbteknologier 2. PHP PHP: Hypertext Preprocessor

Programmering B med Visual C

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Föreläsning 3. Stack

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Programmeringsteknik och C DD1316

E13 "Behind the Wild"

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F8 Webbteknologier 2. EDA095 Nätverksprogrammering. Roger Henriksson Datavetenskap Lunds universitet

JAVASCRIPT. Beteende

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Innehåll. PHP Grundkurs. Introduktion till PHP. Kurslitteratur. Webbserver. Lite historik. PHP Grundkurs 1

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Klassdeklaration. Metoddeklaration. Parameteröverföring

Generiska konstruktioner. Kursbokens kapitel 13

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Tentamen i Introduktion till programmering

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TUTORIAL: KLASSER & OBJEKT

729G04 Programmering och diskret matematik. Python 3: Loopar

Föreläsning 3: Booleans, if, switch

Laboration 1 - Grunderna för OOP i Java

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

ID1004 Laboration 4, November 2012

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

MVC med Javascript och Ajax. Filip Ekberg

Nya webbservern Dvwebb.mah.se

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Grundläggande datalogi - Övning 1

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Programmering för språkteknologer II, HT2014. Rum

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Övningsuppgifter kapitel 8

F8 Webbteknologier 1. Dynamiska webbsidor

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

Appar med ryggrad. Introduktion till JavaScriptramverket Backbone

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

ASP.NET MVC. Copyright Mahmud Al Hakim Innehåll

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Introduktion C-programmering

Modern webbutveckling. av Robert Welin-Berger

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Projekt Foreläsning VI

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Transkript:

PHP PHP: Hypertext Preprocessor

Vad är PHP? Script-språk (jmfr. JavaScript / Python) C-liknande syntax (familj: C / C++ / C# / Java) Dynamiskt typat Används främst server-side för att generera dynamisk output Bakgrund (Personal Home Page) restriktion vad gäller användningsområde Alternativ: Python / JavaScript (node) / (Perl)

Script-språk Kompileras ej (ev. bytecode) Ursprungligen: automatisera manuella uppgifter (ex vis döpa om filer o s v). Är överlag hög-nivå, men går att kombinera med låg-nivå, t ex moduler skrivna i C (Python). Det skall gå snabbt att skapa något konkret, exempel följer:

Exempel på script (Python) def even_sum(n): return sum((m for m in xrange(1, n+1) if not m % 2)) def QS(A): return QS([n for n in A if n < A[0]]) + QS([n for n in A if n >= A[0]]) if len(a) 1 else A

C-liknande syntax for / while / foreach / {...} / if...else / o s v Funktioner: function my_func(x, y, z){ } Klasser: class MyClass{ } Överlag: fungerar som man förväntar sig (givet en bakgrund med C#)

Dynamiskt typat Vi är vana med int i = 3; (strikt typat => vi anger typ för allt, går ej att definiera om!) Dynamiskt typat => anger enkom variabelnamn; typ framgår implicit genom värdet vi lagrar. Exempel: int i = 3; blir $i = 3;. Alla variabelnamn har $ före sig. Vi kan ändra typ på en variabel: $i = 3; // int $i = 'blabla'; // string $i = 3.2; // float

Används främst server-side Klient A (webbläsare) connectar till server S. Klient A requestar./somefolder/somepage.php S (säg apache2) ber PHP köra somepage.php => erhåller HTML som output, vilken sedan skickas till A. Output till klienten är därmed dynamisk, ty PHP-intrp körs vid varje request => möjligt med ny output varje gång.

Upplägg Klient APACHE2 MOD_PHP MySQL

Grundläggande Syntax

Introduktion PHP kan bäddas in i vanlig HTML. Det vi skriver ut hamnar i output (d v s den HTML klienten erhåller). Vi kan ha hur många <?php?>sektioner som helst. <html> <head></head> <body> <?php echo '<p>blabla</p>';?> </body> </html>

IF $i = 17; if ($i > 8){ echo 'aaaa'; } elseif ($i > 10){ echo 'bbb'; } else { echo 'ccc'; }

FOR for ($i = 0; $i < 100; $i++) { } $somevalue += do_stuff($i);

FOREACH $arrayprod = 1; foreach (array(1, 9, 1, 1) as $i) { $arrayprod *= $i; }

WHILE while ($somevar > 20){ } $somevar--;

SWITCH switch($a){ case 1: case 2: dostuff(); break; default: dootherstuff(); break; }

Strängar bla och 'bla' är skilda ting! stödjer fler escapes (\r\t o s v) försöker utvärdera variabler, ex vis hej $bla UNDVIK! Använd ' om det rör sig om vanliga strängar! (sällan behov av \n etc) Strängar är inte immutable (!), ex vis kan vi skriva $str = 'hello'; $str[0] = 'j'; echo $str; // blir jello Längd får vi m h a strlen($somestr);

Arrayer Är implementerade som ordnade hashmaps Jmfr. Dictionary<TKey, TValue> som är strikt Nyckel (Key) måste vara int eller string Värdet kan vara vad som helst Vi skriver: $arr = array( 'skoj' => 7, 3 => 4 ); echo $arr['skoj']; // 7

Arrayer forts Om flera värden har samma key blir enkom det sista värdet aktuellt. $myarr = array(1 => 'skoj', 1.03 => 'lek', true => 'bla' ); echo $myarr[1]; // bla Man behöver inte ange nyckel för alla element, då tilldelas det automatiskt istället (typexempel på PHP:s konstiga utformning).

Arrayer forts I C# skriver vi somearray.length för att få fram antal element. I PHP gör vi: for ($i = 0; $i < sizeof($somearray); $i++){ dostuff(); } Vi kan erhålla arrayer från strängar genom ex vis str_split($str, [splitlen]) och explode($strdelim, $str, [sizelim]).

Exempel str_split $str = 'ribbons'; $strarr = str_split($str); // [0] => r, [1] => i o s v explode $str = 'ribbons are trendy'; $strarr = explode(' ', $str); // [0] => ribbons, [1] => are...

Operatorer $a += 3; $a *= 7; $a -= 8; $a %= 17; o s v som vanligt. (=== ny typ + värde) $j = 'hej'; $j.= 'san'; echo $j; // hejsan Betyder att vi kan skriva $i = 7; echo 'Det finns '. $i. ' lådor'; // Det finns 7 lådor

VARNING Vi anger aldrig typen på argument, konstiga fel kan följa. Exempel: $i = 7; $i += $j; Vad händer om $j är en sträng? Svaret måste ligga i (int) => vi får konstig output! Testkör era script, se vad som händer med konstig input och skriv kod som kollar att era funktioner får vad ni förväntar er.

Typomvandling Ibland måste vi typomvandla (casta) variabler. Görs C-style, d v s (targettype) varname. Exempel: $strnum = '17'; $intnum = (int) $strnum;

Ett mer användbart exempel Hur kan vi vara säkra på att input (sträng) är ett tal innan vi typomvandlar till int? is_numeric räddar dagen: if (is_numeric($someuserinput)){ $myint = (int) $someuserinput; } Finns is_int(), is_string(), is_array() o s v för datatyper (returnerar true om så är fallet, annars false).

Funktioner Fungerar precis som i C#, vi skriver: function my_func_name(x, y, z){ do_stuff(); return $something; } Dynamiskt typad => vi kan returnera vad som helst! Ett anrop blir my_func_name(2, 8, 'BASS');

Klasser och objekt PHP kan skrivas objektorienterat (men påklistrat). För större projekt kan det kanske vara användbart. Vi skriver klasser enligt: class MyClass { public function hej(x){ echo 'x'; } } $sw = new MyClass(); $sw->hej(3);

Klasser och objekt Arv class Child extends Parent { function somefuncthatexistinparent(){ dostuff(); parent::somefuncthatexistinparent(); // ist. base } }

Klasser och objekt Precis som i C# använder vi oss av this ($this) för att referera till nuvarande instans. Exempel: class SomeClass { $a = 3; } function dostuff(){ $this->a += 7; // ok $a += 7; // nej! }

Klasser och objekt Precis som i C# använder vi oss av this ($this) för att referera till nuvarande instans. Exempel: class SomeClass { $a = 3; } function dostuff(){ $this->a += 7; // ok $a += 7; // nej! }

Constructor / Destructor Constructor: construct(){ } Destructor: destruct(){ } Finns fler, ex vis clone().

Interface Fungerar som vanligt, definieras enligt: interface ISomething {... } class SomeClass implements ISomething { }

Exceptions Fungerar som vanligt: try { somecode(); } catch(exception e){ echo $e->getmessage(); } Kastas enligt: throw new Exception('something went wrong!');

Sessions, MySQL, includes och filhantering

Includes När vi har stora projekt vill vi dela upp koden över flera filer. Kräver att vi importera andra filer i den nuvarande. Exempel, vi har databas-koden i db.php, vi skriver följande i index.php: include 'db.php'; // vi kan använda allt som finns i db nu

Includes Om filen i fråga verkligen behövs, kan vi använda require. Den enda skillnaden mellan include och require är att require resulterar i ERROR om filen inte kan laddas in. require 'db.php';

Includes forts Lägger vi till include_once resp require_once kommer includen enkom köras om filen inte redan är includad. Är bra om vi includar filer (ex vis vår db.php) i flera filer som sedan läggs ihop i index.php.

Formulär När vi skickar saker med POST och GET (via <form>) kan vi erhålla innehållet i PHP. Data hamnar i $_POST och $_GET (är arrayer!). Skickar jag <input type= text name= namn /> med POST, skriver jag: $inputtext = $_POST['namn']; // namn måste finnas! Mer på PHP-labben!

Filhantering Vi kan läsa och skriva till filer utan större svårigheter. Öppna en fil: $file = fopen('./somefile.log', MODE); där MODE är w (write), r (read), r+ (read+write skapa ej ny), w+ (read+write skapa ny). Finns fler!

Filhantering För att skriva till en öppnad fil (säg $file): fwrite($file, 'blabla'); För att läsa en öppnad fil (säg $file): fread($file, filesize($file)); Vi stänger en fil med fclose($file); (MÅSTE GÖRAS!)

Sessions Server-side, lagrar användarens id (hashmap, key-value). Används bl a när man loggar in på sidor. I PHP skriver vi session_start() längst upp på varje sida. session_start() skapar ny eller fortsätter gammal session, måste finnas på varje sida. Notera att en session purgas när klienten dödar connection med servern.

Sessions forts Vi kommer sparar data enligt: $_SESSION[someKey] = someval;...och kommer åt det enligt: $_SESSION[someKey];

Sessions forts En session kan dödas direkt genom session_destroy(); Exempel: <?php session_start(); if ($_POST['logout'] == 1){ session_destroy(); }?>

Cookies Sparar data lokalt hos klienten. I PHP skriver vi: setcookie(name, [val], [expire], [path], [domain]); Måste skickas INNAN <html>! Dödas genom setcookie("user", "", time()); // expire nu

Cookies forts Ett litet exempel: <?php $expire=time() + 60 * 60 * 24 * 30; setcookie('user', 'sötnosen_mattias', $expire);?>

Cookies forts <html><body> <?php if (isset($_cookie["user"])) echo 'Welcome '. $_COOKIE['user']. '<br />'; else echo 'Welcome guest!<br />';?> </body></html>

MySQL Hur ni hämtar och skickar data till en MySQL-databas ingår i föreläsningen om MySQL. Där finner ni även kodexempel. Överlag finns det mycket resurser på nätet kring detta och det är inte svårt att klippa-och-klistra ihop en lösning. Det vi kan ta upp är lite grundläggande säkerhet.

MySQL SQL-injections Det är vanligt att man låter användaren fylla i ett formulär med data som sedan hämtas i ex vis $_POST. Lita inte på att användaren skickar in trevlig data! Tänk er följande SQL-fråga: SELECT * FROM sometbl WHERE username='$username' AND password = '$password' Vad händer om $username är admin'-- vanlig comment i SQL

MySQL SQL-injections Frågan blir nu istället att hämta alla rader där username är admin (och inget om password). Om vi kollar huruvida resultatet är större en noll för att godkänna en inloggning, har användaren nu loggat in som admin utan lösenord! Löses genom att använda: mysql_escape_string($str) Exemplet tidigare: WHERE username='mysql_escape_string($username)'...

Tips

Allmänt!!! Använd PHP-manualen på php.net!!! Om ni vet hur ni löser något i C# kommer det gå att lösa på ett liknande sätt i PHP. Experimentera med nya inslag, ex vis sessions och databas-frågor. Det finns VÄLDIGT mycket exempel online, Google is your friend!

Projektarbetet Dela upp koden i filer. Undersök templates bättre separation: HTML/CSS/JS vs PHP Kolla färdiga lösningar, finns många! Titta på ramverk, ex vis CakePHP och dylikt. Gör dynamiska lösningar, blir mindre kod. Utforma grundläggande funktionalitet först, innehållet kan med fördel skapas sist!

Projektarbetet Gör en grundläggande design. Skapa logiken för hur sidan skall byggas upp. Implementera databas-funktionalitet. Skapa innehåll och lägg till fräsiga saker (jquery, AJAX).

Projektarbetet Notera att PHP är ett rörigt språk. Om er sida uppför sig konstigt behöver det inte betyda att ni har tänkt fel, bara att ni missat något i PHP (jmfr. array-nycklar). Man behöver inte låta output vara HTML, man kan även skapa bilder och dylikt.

GAME OVER It feels like something is missing... ÅLÅF?