Webbprogrammering - 725G54
PHP
Foreläsning II
Agenda
●
●
●
●
●
●
●
●
Serverskript
PHP
Validering av data med serverskript
Säkerhet
Lab 2.
Live coding
Serverskript
●
●
Kör ett program på servern och resultatet skickas till klient
PHP, Python, Ruby, Perl, ASP, C, Java, …
Men varför?
Vad får vi då?
Serverskript
VS
Dynamiska webbplatser
Serverskript
●
●
●
●
●
●
●
Dynamiska webbplatser.
Tar kraft av server inte klient.
Kan användas tillsammans med databas på servern.
Datan och logiken finns på server-sidan.
○
Tillgång till databasen kan och ska kontrolleras.
○
Busniess-logiken finns på server-sidan och kan inte ses av användaren. Det hjälper bättre säkerhet.
Klienten kan bara se resultatet av koden.
Hantera och reagera på data som skickas från klient.
Det är så vanligt att Serverskript och HTML/CSS/Javascript är kombinerad. E.g. PHP, JSP, ASP, ASP .NET.
Men varför behöver vi skicka data till server-sidan för att få dynamiska webbplatser fungera?
PHP - Hypertext Pre Processor
●
●
●
●
●
●
Skrivs tillsammans med HTML
Resultat - HTML
Free Software
Stort, populärt och användbart
http://php.net
Kan användas med databaser (MySQL).
PHP - Hypertext Pre Processor
PHP - Hypertext Pre Processor
PHP - Hypertext Pre Processor
Query Strings
https://www.flygresor.se/showresult.php?id=195515877
Formulär
●
●
●
●
●
För kort text:
○ <input type=”text” .../>
För lång text:
○ <textarea ...></textarea>
För ett och endast ett av flera alternativ:
○ <input type=”radio” .../>
För inget, ett eller flera alternativ:
○ <input type=”checkbox” .../>
För rullgardinsmeny:
○ <select><option ...>...</option></select>
Ta emot formulär med PHP
●
●
●
●
Formuläret skickas till action
○ <form action=”ta_emot.php” .../>
Formuläret skickas med submit
○ <input type=”submit” .../>
Värden hämtas med
○ $myvalue = $_GET[’myvalue’];
○ eller
○ $myvalue = $_POST[’myvalue’];
beroende på vad man satt för method
○ <form ... method=”post” ...>
○ <form ... method=”get” ...>
Formulär
●
För tillgänglighet och användbarhet tänk på att:
● man ska kunna klicka på label-text för att markera ett fält. Kod:
○ <label for=”example”>My label</label>
○ <input id=”example” .../>
● Eller
○ <label><input id=”example” .../>My label</label>
● ha en fungerande layout
● validera data innan skickas.
Session
●
●
●
Det är jätte vanligt att man behöver besöka flera webbsidor för att göra en viss uppgift. E.g.
när man vill handla varor från en eshop och lägger sina utvalda varor i vagnen.
Sanningen är att webbservrar är jätte dum. De kommer inte ihåg användarna och det är
därför när användaren lämnar en php sida och öppnar någon andra sida har webbservern
ingen aning om vad användaren hade gjort innan.
Vad kan vi göra om det?
Session
Session på IDA
●
●
●
●
För att köra session på IDA måste man ange session_save_path(‘dir’); till en katalog på sitt
konto där World/Others har läs och skrivrättigheter.
Starta eller återuppta en session:
○ session_start();
• Lagra:
○ $_SESSION[‘value’] = $value;
• Hämta:
○ $value = $_SESSION[‘value’];
Validering av data med serverskript
●
●
●
Användaren kan skicka fel data (ibland med avsikt)
Serverskript kan skicka fel data
Vad bör valideras?
○ Data man inte kan lita på att den är korrekt
○
○
●
Data som kan ställa till problem om den inte
är korrekt
Nästan all data.
Det är också jätte viktigt att validera data på klientsidan. Detta kommer att diskuteras i framtida
föreläsningar.
Cross-site Scripting ( XSS )
Sql injection
Funktioner
●
●
●
●
●
●
is_int(n) - är n ett heltal
is_float(n), is_bool(n)
intval(s) - returnerar heltalsvärdet av s
floatval, doubleval
ctype_alnum(text) - kollar om alla tecken i text är bokstäver eller siffror
Finns även: ctype_alpha, ctype_digit, ctype_lower, med flera
Fler funktioner
●
●
●
●
●
●
●
strlen(s) - kollar längden på s
trim(s) - tar bort mellanslag i början och slutet av s
strpos(s) - letar reda på vilken position ett tecken, eller flera, har i s
addslashes(s) - lägger till backslashes på kritiska tecken - \” \’
htmlspecialchars(s) - gör om s till html-specialtecken, t ex < blir <
is_email(s)
Skriv egna funktioner
Laboration 2
●
●
●
●
●
●
●
Gör helt fristående från Lab 1 (nytt ämne, ny design)
Test eller quiz
Formulär och hantering av svar från formulär
Olika svar ska ge olika resultat
Presentation (CSS) ska passa för ert test eller quiz
Validera inmatning med PHP
Man ska inte kunna se på koden i webbläsaren vilket som
är rätt svar.
Kod ni inte skrivit själva
●
●
●
●
Från forum, böcker, php.net, bloggar, etc är enstaka rader kod OK
Gör alltid en kommentar i koden var ni fått den ifrån om ni inte skrivit den själva
(All kod som ni inte kommenterat en källa för räknas som att ni redovisar som eget
arbete.)
●
Att använda kod från andra studenter är
ej OK.
Inför nästa föreläsning
Gör klart labb 2!
Några exempel
Exempel kod:
http://www.ida.liu.se/~sahsa74/
Phone Booth
Tack och lycka till!