Webbserverprogrammering01 [wesweb01]

Moment02 - PHP Grunder

Introduktion

I detta moment skall vi börja skapa skript i PHP. För de elever som tidigare har programmerat i något språk så kommer det vara relativt enkelt att komma in i kodningen.

Momentets mål

I varje moment så jobbar vi mot ett eller flera mål som skolverket har satt upp i varje kurs.

Centralt innehåll

  • Webbserverns och dynamiska webbplatsers funktionalitet.
  • En översikt över olika lösningar eller språk som finns för att skapa dynamiska webbplatser.
  • Grundfunktionen i ett programmeringsspråk för dynamiska webbplatser.

Vad är PHP

Ett scriptspråk som bäddas in i html-kod för att skapa dynamiska hemsidor.
Namnet PHP är en rekursiv akronym: Hypertext Preprocessor.

Alternativ till PHP;

  • ASP – Microsofts scriptspråk (bygger på Jscript eller Vbscript).
  • JSP – ett scriptspråk byggt på java, ej att förväxlas med Javascript
  • CGI – ett scriptspråk som mest användes i internets barndom (Perl/C++)

Motsatsen är statiska sidor tex HTML.

How PHP works

Innan vi börjar arbeta

Denna kurs kan du läsa på två sätt, det ena sättet bygger på att du har läst en programmeringskurs tidigare och känner att du har koll på grundläggande programmeringsprinciper.
Då skall du fortsätta till nästa avsnitt och börja översätta dina programmeringskunskaper till PHP.

Om du är helt ny på programmering så rekommenderar jag att du istället börjar med grunderna i programmering med fokus på PHP, det avsnittet hittar du i kursen Programmering01 som du hittar här. Moment02 och Moment03 innehåller grunderna och kontrollstrukturer, när du har dessa kunskaper kan du fortsätta på moment03 i denna kurs. Moment02-03 i den andra kursen ersäter alltså Moment02 i denna kursen, du kan redovisa uppgifter från vilket av momenten som helst, det är samma typ av uppgifter men du behöver inte göra uppgifterna på bägge kurserna.

Arbete

I detta moment så skall du träna på att skriva kod och det viktigaste är att du behärskar minst "en av varje". Om du har programmerat tidigare så vet du att det finns flera olika typer av val, olika typer av loopar osv. En programmerare som kan en av varje klarar ofta av att lösa många uppgifter. En duktig programmerare som kan flera olika typer av kontrollstrukturer kan hela tiden välja den som passar uppgiften bäst och därför skapar denna programmeraren effektivare kod på kortare tid vilket bara innebär fördelar.

Alternativen

Det finns väldigt många sätt att lära sig att programmera på, här är det viktigt att du hittar det sätt som passar dig bäst. Jag kommer här visa på flera olika alternativ.

Skrivet material

Här listar jag två PDF-tutorials som ger bra kodexempel. Bergs material ser mer ut som en lärobok medan Rejås fungerar bra som referens.

Videotutorials

Om du lär dig bäst genom att titta på videogenomgångar och sedan härma så kommer här några bra exempel. OBS. Glöm inte att arbeta själv, den programmeraren som harblivit duktig genom att bara titta finns inte.

Hemsidor

Här listar jag några hemsidor som både har samlingar av bra information och även php.net som är den sidan där all dokumentation finns, här kommer du förr eller senare behöva leta efter exempel eller hur en viss funktion fungerar. Vi förr du blir bra på att hitta här desto snabbare kommer du lösa dina problem.

Checklistan

Följande saker behöver du lära dig för att lösa momentets uppgift;

  • Variabler, lagra, beräkna/modifiera och skriva ut värden från en variabel. Detta gäller alla typer av variabler, såväl strängar som variabler som lagrar tal eller boolska värden.
  • Operatorer, veta vad det är och hur de fungerar, aritmetiska- och jämförelseoperatorer används ofta. Tilldelning är obligatorisk kunskap medan de logiska operatorerna underlättar ditt arbete.
  • Selektioner, if-else if-else är ett grundkrav att kunna hantera, det är också vanligt att använda switchsatser när vi jobbar med PHP.
    Bonus: Har du bra förtåelse för if-satser kan du kika på shorthanded if.
  • Iteration, while, do-while och for-loopen är bra på olika saker, därför kommer du säkerligen behöva kunna dem alla. När vi senare jobbar med databasen så är foreach också väldigt användbart då den loopar igenom en hel array utan att vi för den sakens skull behöver veta var i arrayen vi just nu är.
  • Kommentarer är viktigt, ha koll på hur du kommenterar din kod.
  • Strängfunktioner är användbart då det finns färdiga funktioner för att modifiera innehållet i en sträng, söka efter ett specifikt tecken, dela en sträng, ta bort olika delar eller helt enkelt göra om strängen till versaler eller gemener.
  • Arrayer är väldigt vanligt inom PHP, alla resultat från databasen kommer ut som array så här finns inget val, detta måste du lära dig.
  • Funktioner, används ofta då vi älskar att återanvända kod. I tidigare programmeringspråk ger oftast en funktion ett resultat efter en uträkning, här kan en funktion lika gärna ge en del färdig kod.

Uppgift

Det viktigaste är att du tränar på att jobba med detta momentet, exakt vilka uppgifter du gör spelar mindre roll. Ju mer du tränar, desto bättre förberedd är du när det blir projekt senare i kursen. Nedan finns exempeluppgifter du kan välja att göra.

När du anser dig färdig med detta moment, skriv en utvärdering på din sida och länka till de uppgifter du har gjort.

Exempeluppgifter

Här finns ett batteri av uppgifter som du kan använda om fantasin tryter när du vill visa på någon särskild del av grunderna i PHP.

    Echo

  1. Skriv ut en rubrik (använd HTML-koder) som talar om att du i denna del jobbar med echo.
  2. Skriv ut ditt namn och någonting annat över två rader. Även här behöver du använda html-koder.
  3. Variabler

  4. Skapa en variabel som innehåller ditt namn, skriv sedan ut enligt följande ”Jag heter Johan och är lärare på TIS Göteborg.” (Skriv ut detta genom att lägga variabeln inne i strängen som skrivs ut)
  5. Det finns ytterligare en datatyp som vi kommer använda mycket, gör en övning där du skriver ut värdet av booleska (boolean) variabler som har värdet true och false, hur skrivs detta ut på hemsidan. (Att kunna detta hjälper till när du skall söka efter felkällor i din kod senare)
  6. Konstanter

  7. Skapa konstanten PI, ge den värdet 3.14. Försök att ändra värdet på konstanten och se vad som händer. Skriv ut värdet på PI.
  8. Strängar

    Escapetecken

  9. Skriv ut följande text; (” och radbrytning skall du göra med escapetecken)
    Jag tycker det är ”kul” med PHP!
    Nej, jag skojade bara!
  10. Konkatenering

  11. I uppgiften 3 så skulle du blanda text och en variabel av strängtyp. Nu skall du använda konkateneringstecknet, ”.”, för att bygga ihop flera delar av en sträng och variabler till en enda sträng.
  12. Strängfunktioner

  13. Skapa en variabel med innehållet ”WebbServerProgrammering 1”, du skall nu med olika strängfunktioner få fram, och skriva ut, olika strängar.
    1. 25 (längden på strängen)
    2. webbserverprogrammering 1 (bara gemener)
    3. WEBBSERVERPROGRAMMERING 1 (bara versaler)
    4. 1 gniremmargorprevresbbeW (första bokstaven stor, omvänd utskrift)
    5. PHP-programmering 1 (byta ut del av strängen)
    6. Jämför om resultatet av punkt c är lika med innehållet i variabeln, testa funktionerna strcmp och strcasecmp.
    7. Testa att ändra innehållet i variabeln och se att det fungerar.
      (Kanske inte fungerar på alla deluppgifter, typ punkt e)

    Selektioner

    If

  14. Använd funktionerna under uppgift 8f för att jämföra två lösenord (variabler) och se om de är lika. Tänk dig att du gör en väldigt enkel inloggningskoll där användaren skall få information om att hen är ”Inloggad” eller ”Du har angivit fel lösenord”.
  15. Switch

  16. Skapa en variabel som får ett heltalsvärde mellan 1 och 8, skriv sedan ut via en switchsats om talet är jämnt eller udda. Ge också användaren information om ett felaktigt tal har matats in.
  17. Jämförelse mellan if och switch

  18. Lös uppgift 10 med en if-sats istället, vilka är fördelarna eller nackdelarna med denna lösning?
  19. Operatorer

    Aritmetik

  20. Skapa två variabler som innehåller heltal, skriv sedan ut uträkningen av dessa två tal för alla fyra räknesätten plus modulus (% - modulus ger oss resten av vad som blir kvar vid en heltalsdivision). Skriv ut hela uträkningen, typ 3+7=10, 3-7=-4 osv. Radbryt gärna för ytterligare tydlighet, eller lista det med en punktlista.
    Du skall inte används fler variabler än nödvändigt, tal1 och tal2 räcker hela vägen.
  21. Tilldelningsoperatorer

  22. Gör om uppgift 12 fast nu skall du skapa en resultatvariabel och sedan skriva ut samma saker som i uppgift 12. Gör det någon skillnad? Ger det andra möjligheter att skriva koden?
  23. Jämförelseoperatorer & logiska operatorer

  24. Kolla på uppgift 11 igen, hur kan man skriva om koden om man använder den logiska operatorn OR och jämförelseoperatorer för värden som är större än 8 och mindre än 1.
  25. Iteration

    For

  26. Ulf har satt in 10 000kr på ett konto med 3 % årlig ränta, hur mycket pengar finns på kontot efter 15 år? Inga fler insättningar görs.
  27. While

  28. Antalet råttor i en stad är 100 stycken, varje månad dubblas populationen av råttor, hur många månader dröjer det innan det finns en miljon råttor i staden?
  29. Do-while

  30. Lös uppgift 16 fast med do-whileloop, kolla att svaret blir det samma.
  31. Nästlade loopar

  32. En nästlad loop är en loop inne i en annan loop, bygg en enkel multiplikationstabell till valfritt tal, sluttalet bör inte vara mindre än 5 och kan begränsas till max 12. Lägg in multiplikationstabellen i en <table> och skapa korrekt html-syntax.
  33. Array - en nivå

  34. Skapa en array med 7 komponenter/element och fyll dem med ett slumpat värde mellan 1-35. Skriv sedan ut den lottoraden som du har skapat.
    1. Extra svårighetsgrad: Se till att ett slumpat värde inte förekommer två gånger.
    2. Extra svårighetsgrad: Att sortera lottoraden i nummerordning ger en bättre utskrift.

CSource

Ett effektivt hjälpmedel för denna kursen, som du skall använda vid samtliga redovisningar. Hur det fungerar och används hittar du under Kunskap: Resurser.

Uppgift

Redovisa detta moment på följande sätt;

  1. Lägg upp dina övningar på din hemsida. Lägg dem på en sida med tydliga förklaringar eller skapa flera sidor med olika uppgifter. Viktigt att jag, och andra, kan gå mellan sidorna så vi inte missar något.
  2. Länka sidan/sidorna från din samlingssida.
  3. Länka också till CSource och se till att jag den vägen kan se all din kod.
  4. I wordpress så reflekterar du över ditt arbete, berätta vilka uppgifter du gjort och varför. Resonera kring om PHP är svårt eller enkelt och vad du har lärt dig samt vilka problem du eventuellt har haft. Länka också till den sidan, se sidorna, där dina exempeluppgifter finns.
    Frågestöd
    • Hur har arbetet med att lära sig grunderna i PHP gått?
    • Vilket annat programmeringsspråk, om något, känner du dig mest bekväm i? Jämför detta språk med PHP, likheter, skillnader, och en allmän känsla över att programmera i webbmiljö.
    • Vilka resurser har du använt dig av för att lära dig PHP? Någon av de som jag har länkat eller någon annan bra resurs? Har du tips på någon bra resurs så länka gärna denna.

Kodexempel

Här är exempel på kod som presenterades på genomgången. Kopiera gärna koden och testa själv.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Namn</h1>
<?php
// Utskriften görs med två echo på två rader,
// det går givetvis att skriva på en rad
echo "<h2>Johan";
echo " Hällgren</h2>";
?>

<h1>Variabler</h1>
<?php
/*
Här är det trixigt att få ut både själva talet
och resultatet. I genomgången
visade jag på de olika problem som kan uppstå.
*/
$tal1 = 3;
$tal2 = 9;

echo "<p>$tal1 + $tal2 = ";
echo $tal1 + $tal2."</p>";
?>

<h1>Loopar</h1>
<?php
// Detta exempel visar på loopens styrka, vi kikade på
// skillnaden mellan en whileloop och en do-whileloop
// Tänk på att indentera resultatet med "/n" för att
// få till en radbrytning. Det gör slutresultatet lättare
// att läsa.
$year = 0;
$salary = 18500;
$max_salary = 30000;
$increase = 0.04;
echo "<p>Hasse har $salary kr som startlön.
  Den årliga ökningen är " . $increase*100 . "%.</p>";
do{
  $year++;
  $salary *= (1+$increase);
  echo "<p>Efter $year år har Hasse ".round($salary, 0)
  ." kr i lön.</p>\n";
} while($salary <= $max_salary);

?>
</body>
</html>