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 &lt; 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!