TDDD52 PHP
Föreläsning 4 Serverskript PHP Validering av data med serverskript Formulär
Återblick HTML Seman@k Uppdelning Länka dokument CSS Layout och styling Användarvänlighet Javascript Validering Animering Extra dimension
Progressive Enhancement
HTML, CSS, Javascript - Klienten
Användare fyller i formulär. Annons visas på hemsidan. Vem skapar HTML, CSS och Javascript för annonssidan?
Söker på ordet bike, så listas bilder och text. Hur skapades den här listan? Vem skrev HTML, CSS och Javascript? Hur visste de as jag skulle söka på bike? Finns det färdiga HTML sidor för alla tänkbara nyckelord?
Om det här företaget vill lägga @ll två nya produkter, måste vi då skapa HTML för dessa? Vad om vi vill lägga @ll 1000 produkter? Tänk om vi vill ändra i vår sidhuvud eller sidfot på sidan, ska vi göra det på alla sidor då?
Det saknas något Det räcker alltså inte med as kunna HTML, CSS och Javascript för as uppnå det dynamiska som oya visas på webbplatser idag. Men webbläsaren förstår inget annat än HTML, CSS och Javascript.?
Vi behöver någon@ng som kan dynamiskt skapa HTML åt oss, för as bygga upp nöten
Såhär ser det ut idag, klienterna hämtar dokument som de i sin tur exekverar. Klient 1 #Rydsvägen Klienterna känner inte @ll varandra. Vet inte as de existerar. Servern gör inget förutom as @llhandahålla sta@ska dokument. Server #LiU Klient2 #Hamngatan Hämta HTML, CSS, Javascript
PHP Hypertext Pre Processor Stort, populärt och läs as komma igång med hsp://php.net Delar av Wikipedia, Facebook, Digg etc skrivet med PHP
PHP Skrivs @llsammans med HTML i es.php dokument Kan användas med databaser, filer, etc etc. PHP, Java, C#, Python, Ruby, Perl, Scala, Go, etc etc I denna kurs använder vi PHP
Serverskript Server @ll Klient Kod som skrivs för as köras på servern. EYersom koden exekveras på servern så tar det av serverns kray, och inte klienten. Resultatet av körningen skickas @ll klienten (webbläsaren) PHP kod tolkas och exekveras på servern. Servern genererar HTML med hjälp av PHP och skickar resultatet @ll klienten. HTML kod tolkas av webbläsare på klienten Server Klient
Klient Server Med PHP ger vi servern möjlighet as göra mer än bara dela med sig av dokument. Servern kan nu ha logik och data för as skapa olika vyer. Nu kan servern manipulera HTML dokument för as skapa räs vy. Ingen PHP kod returneras från servern, eyersom webbläsare inte förstår PHP kod.
Var skrivs dokumentet ut? Javascript Om jag i koden skickar es dokument @ll skrivaren, så skrivs det ut på klienten. PHP Om jag i koden skickar es dokument @ll skrivaren, så skrivs det ut på servern. Tänk på desa om ni tappar bort er i klient/server kod
PHP Syntax Snabb genomgång
PHP Typer etc. Dynamiskt typat, man behöver inte bestämma vad som skall finnas i en variabel vid ini@eringen. $variable1 = 1; $variable2 = Hello ; $variable3 = 1.2; $variabel4 = TRUE; Vanliga aritme@ska opera@oner för tal. +, -, *, /, %, ++, -- Strängar kan vara inom eller Hello world, Hello World $var = great print Hello $var world ; //skriver ut Hello great world print Hello $var world ; //skriver ut Hello $var world Strängar kan säsas samman och använda { för specifik bokstav. Jämförelser görs med de vanliga operatorerna. === och!== tar även hänsyn @ll typ. Kombinerade jämförelser görs med and, or, xor,!, && och (xor innebär as endast es av operanderna måste vara TRUE) $var = Hello. World ; print $var{5; //Skriver ut W >, <, >=, <=,!=, ==, ===,!== 5 == 5 //Detta är TRUE 5 === 5 //Detta är FALSE 5 === 5 //Detta är TRUE 5 == 5 && 5 === 5 //Detta är FALSE 5 == 5 5 === 5 //Detta är TRUE
PHP Kontrollstrukturer selec@on if($a == $b) { else if ($a == $c) { else { loop $var = 10; $count = 0; while($var!= $count) { $count++; for($iter = 0; $iter < 10; $iter++) { Finns några @ll, så som switch och do- while men dessa är oyast överflödiga, det räcker med if- elseif- else, while och for
PHP - Arrayer Skapandet av array $list[] = 15; eller $list[0] = 15; eller Lägg @ll es nys element i våran array $list = array(15,16,17,18) $list[] = 16; //Lägger till på nästa plats eller $list[1] = 16; //Lägger till på position 1 Men arrayer kan även användas som maps $ages = array( Joe => 42, Mary => 41) print $ages[ Mary ]; //Skriver ut 41 eller Ta bort es element ur en array Leta upp dessa funk@oner på nätet och läs på: $ages[ Mary ] = 41; print $ages[ Mary ]; //Skriver ut 41 unset($list[1]) array_keys, array_values, array_key_exists, sizeof, explode, implode, array_push, array_pop
PHP Arrayer - Exempel Loopa över en array $lows = array( Mon => 23, Tue => 18, Wed => 27); print( <h1>temps</h1> ); foreach($lows as $day => $temp) { print( The low temperature on $day was $temp <br /> ); Exekveras och levereras som HTML @ll klienten Temps The low temperature on Mon was 23 The low temperature on Tue was 18 The low temperature on Wed was 27
PHP Mul@dimensionella Arrayer Arrayer kan användas @ll mycket i PHP, och es exempel är en mul@dimensionell array. Det kräver dock lite träning på as skriva denna typ av kod eyersom det snabbt blir rörigt: $data = array( 1 => array( "firstname" => "Marcus", "lastname" => "Bendtsen" ), 2 => array( "firstname" => "Jalal", "lastname" => "Maleki" ) ); //Nu kan vi nå Marcus med: $data[1]["firstname"];
PHP - Funk@oner För as kunna öka abstrak@on och återanvändning finns det funk@oner. Funk@oner liknar Javascript syntax, med parametrar och argument. print_hello_world( Marcus ); function print_hello_world($name) { print Hello World, $name ; Kan definieras var som helst i koden, dvs anropet @ll en funk@on kan komma innan funk@onen är definierad.
PHP Hantera mer än 1 PHP fil include och require
PHP include, require, require_once in.php <?php echo included ;?> <?php include( in.php ); echo Done ;?> included Done included included included Done <?php include( in.php ); include( in.php ); include( in.php ); echo Done ;?> <?php include( out.php ); echo Done ;?> PHP Warning: include(out.php):... Done Inkludera es PHP dokument i es annat. Ovärderligt när man gör större webbplatser där man vill dela upp koden.
PHP include, require, require_once in.php <?php echo included ;?> <?php require( in.php ); echo Done ;?> included Done included included included Done <?php require( in.php ); require( in.php ); require( in.php ); echo Done ;?> <?php require( out.php ); echo Done ;?> PHP Warning: include(out.php):... require är precis som include, men om den misslyckas så avbryts körningen.
PHP include, require, require_once in.php <?php echo included ;?> <?php require_once( in.php ); echo Done ;?> <?php require_once( in.php ); require_once( in.php ); require_once( in.php ); echo Done ;?> <?php require_once( out.php ); echo Done ;?> included Done included Done PHP Warning: include(out.php):... require_once garanterar as vi bara hämtar dokumentet en gång.
PHP Formulär och Länkar
Serverskript Klient @ll Server Klienten fyller i formulär, eller klickar på länk. Servern tar emot data från klienten, och kan göra logiska beslut baserat på indata. Data kan sparas, eller olika vyer visas beroende på vad klienten har skickat. Formulär fylls i och skickas. Eller länk klickas. PHP kod kan ta emot skickade uppgiyer och agera på dessa. Klient Server
Ta emot data GET parameter GET För kort data via formulär eller när man vill skicka data via URL HTML <form acnon= ta_emot.php method= GET > <input type= text name= myvalue /> <input type= submit >Send</input> </form> hsp://www- und.ida.liu.se/~marbe800/ta_emot.php?myvalue=marcus hsp://www- und.ida.liu.se/~marbe800/product.php?id=1 PHP (ta_emot.php) $myvalue = $_GET[ myvalue ];
Ta emot data POST POST För lång data via formulär HTML <form acnon= ta_emot.php method= POST > <input type= text name= myvalue /> <input type= submit >Send</input> </form> PHP (ta_emot.php) $myvalue = $_POST[ myvalue ]; Om man vill kunna skicka data med URL er (dvs t ex:?id=1) så måste man använda GET, annars ska man all@d använda POST i TDDD52
Validering av data med PHP Vi har ju redan validerat data med Javascript? Javascript kan stängas av, ovetande eller med flit. Valideringen hos klienten är @ll för as spara @d för användaren och bandbredd för servern. Man måste all@d validera data på server sidan som man inte kan lite på och som kan ställa @ll problem om det inte sparas korrekt. T ex mejladresser (om vi sparar inkorrekta kommer vi inte kunna as nå personen igen). <?php func@on is_email($email) { //code that verifies email $email = $_GET( email ); if(is_email($email)) { echo success ; else { echo failure ;?>
Vad gör vi med validerad data? (Databaser kommande föreläsningar) Klient 1 #Rydsvägen 3. Vem finns? En server kan skapa en länk mellan klienter. 4. Marcus finns! 2. Spara info om Klient2 i en fil på servern. Server Klient2 #Hamngatan 1. Hej, jag heter Marcus
PHP Demo TDDD52
AS koda bra, hur gör man det? Intermezzo
Ta es steg bort från datorn, använd papper och penna eller whiteboard. Man får oya bra idéer och tankar som man vill testa. Skriva ner dessa direkt, så slipper ni stressa över as ni kanske glömmer de, eller as de stör det ni jobbar med just nu. Marcus kontor
Pseudo- code hämta variabler från användaren kolla att alla variablerna är korrekta jämför variablerna, och returnera det största AS skriva ner vad man vill åstadkomma med sin kod underläsar väldigt mycket. Om man kör fast är denna metod ovärderlig. Testa gärna av använda papper och penna, det aknverar hjärnan på ev annat säv. Kan avdrama@sera kodningen, aha är det bara det här jag ska göra...
Self- commen@ng code //Finds the maximum //of three numbers funcnon a($x, $y, $z) { if($x > $y) { if($x > $z) { return $x; else { return $z; else { if($y > $z) { return $y; else { return $z; funcnon max($x, $y, $z) { if($x > $y) { if($x > $z) { return $x; else { return $z; else { if($y > $z) { return $y; else { return $z;
Variabel namn Mindre bra alternanv $howbigistheship $drange $maximumpossiblescoreinoly mpiccurling $x, $y, $z, $x1, $x2... BäVre alternanv $shipsize $daterange? Variabel namn utan betydelse skapar väldigt fort förvirring.
Funk@oner - Abstrak@on if(...) { if(...) { for(...) { if(...) { for(...) { if(...) { if(...) { Om din kod börjar likna desa, så saknar du bra abstrak@on. Använd funk@oner för as klippa ut vissa for och if satser. Tänk på as du själv ska förstå koden om två veckor! if(...) { for(...) { dosomething(...)
Övning ger färdighet 1. Jobba med din kod som vanligt. 2. När du är klar, skriv ut koden på papper. 3. Läs koden några @mmar senare på kvällen. OYast kan man direkt se problem i koden, och även bra lösningar. AS koda är es hantverk och kräver mycket övning. Bra kod är läs as hantera och uppdatera. Kostnader för underhåll kan drama@skt sänkas om koden är välskriven.