Du kan lese mye om innholdet i ei bok utfra innholdsfortegnelsen. Klikk på lenkene eller rull nedover siden. Du kan også bruke PDF-versjonen for finere utskrift.
| | |
Kapittel 1 - Kom i gang med PHP
|
1.1 | Hvorfor PHP? | 17 |
1.2 | Hvordan fungerer PHP? | 18 |
1.2.1 | Overordnet om det å programmere i PHP | 20 |
1.2.2 | Installasjon | 20 |
1.2.3 | Forstå hvorfor PHP fungerer som det gjør | 23 |
1.2.4 | Test om alt virker | 25 |
1.3 | Samspillet mellom klient og tjener | 27 |
1.3.1 | Klienten ber en tjener om å sende informasjon | 27 |
1.3.2 | Et enkelt PHP-script | 28 |
1.3.3 | Resultatet vises i nettleseren | 29 |
1.3.4 | Tjeneren sender HTML-kode til klienten | 30 |
1.3.5 | PHP og HTML kan blandes | 31 |
1.3.6 | Noen detaljer | 33 |
1.3.7 | Kommentarer i PHP | 34 |
1.3.8 | Viktig notis om XHTML | 34 |
1.3.9 | PHP versus JavaScript og Ajax | 35 |
1.4 | Oppgaver og kontrollspørsmål | 36 |
Til toppen |
Kapittel 2 - Grunnleggende programmering i PHP
|
2.1 | Variabler | 38 |
2.1.1 | Hva er en variabel? | 38 |
2.1.2 | Eksempel på variabler og bruk av variabler i PHP | 39 |
2.1.3 | Mer fleksibilitet med variabler | 40 |
2.1.4 | Kritisk punkt - bli vant til dollartegnet | 41 |
2.2 | Datatyper | 42 |
2.2.1 | Datatypen string og visning av spesialtegn | 42 |
2.2.2 | Numeriske datatyper | 44 |
2.2.3 | Andre datatyper | 45 |
2.2.4 | Lese eller endre datatypen | 45 |
2.2.5 | Eksisterer en variabel fra før av? | 48 |
2.3 | Operatorer og uttrykk | 48 |
2.3.1 | Tilordningsoperatoren | 48 |
2.3.2 | Sammenslåingsoperatoren for tekststrenger | 49 |
2.3.3 | Aritmetiske operatorer | 50 |
2.3.4 | Sammenlikningsoperatorene | 51 |
2.3.5 | Logiske operatorer | 52 |
2.3.6 | Øke og redusere verdier | 53 |
2.3.7 | Operatorenes rekkefølge i evaluering av mer komplekse uttrykk | 54 |
2.4 | Tips, triks og avanserte tema | 54 |
2.4.1 | Verdt å vite om tekststrenger i PHP | 54 |
2.4.2 | Hurtigere kode | 56 |
2.4.3 | Bruk HTML-kode i et PHP-script | 56 |
2.4.4 | Konstanter | 57 |
2.5 | Oppgaver og kontrollspørsmål | 57 |
Til toppen |
Kapittel 3 - Kontrollstrukturer
|
3.1 | Introduksjon til kontrollstrukturer | 60 |
3.2 | Beslutninger | 61 |
3.2.1 | Varianter av if | 61 |
3.2.2 | Switch-strukturen for ulike tilfeller | 64 |
3.3 | Løkker | 66 |
3.3.1 | Å lage tabeller uten løkker | 66 |
3.3.2 | While - virkemåte og syntaks | 68 |
3.3.3 | While øker fleksibiliteten | 68 |
3.3.4 | Kjører løkken slik du ønsker? | 69 |
3.3.5 | En hendig variant i do while | 70 |
3.3.6 | For-løkker | 70 |
3.3.7 | Noen andre faremomenter | 72 |
3.4 | Mer avansert bruk av kontrollstrukturer | 73 |
3.4.1 | Nøsting | 73 |
3.4.2 | Tvinge frem avslutning av en kontrollstruktur | 75 |
3.4.3 | Elegant bruk av switch | 77 |
3.5 | Oppgaver og kontrollspørsmål | 80 |
Til toppen |
Kapittel 4 - Assosiative matriser og skjemabehandling
|
4.1 | Assosiative matriser (arrays) i PHP | 82 |
4.1.1 | En matrise har elementer med nøkler og verdier | 82 |
4.1.2 | Assosiativt, takk! | 83 |
4.1.3 | Løkker + matriser = sant | 84 |
4.1.4 | Kontrollstrukturen foreach | 86 |
4.1.5 | En kompleks matrise kan inneholde veldig mye informasjon | 86 |
4.1.6 | Forklaring til geometrimatrisen | 88 |
4.2 | Skjema skaper interaktivitet | 89 |
4.2.1 | Et skjema for registrering av personlig informasjon | 89 |
4.2.2 | Spørrestrengen kan inneholde mye informasjon | 91 |
4.2.3 | PHP gir automagisk innhold til superglobale matriser | 92 |
4.2.4 | Bruk av metoden POST | 95 |
4.2.5 | Feilkilder og måter å aksessere innhold i matriser på | 96 |
4.3 | Praktisk bruk av matriser og skjema | 97 |
4.3.1 | Passord bør maskeres | 97 |
4.3.2 | Velg mange ting samtidig med avkrysningsbokser | 98 |
4.3.3 | Enklere skjemabehandling med foreach | 100 |
4.3.4 | Et skjema kan vises og behandles i samme fil | 101 |
4.3.5 | Litt historikk om direktivet register_globals og sikkerhet | 104 |
4.4 | Oppgaver og kontrollspørsmål | 106 |
Til toppen |
Kapittel 5 - Organisering av kode
|
5.1 | Inkludering av filer | 110 |
5.1.1 | Hvordan fungerer inkludering? | 110 |
5.1.2 | Relativ adressering i et hierarki | 111 |
5.1.3 | Hvorfor inkludering? | 113 |
5.1.4 | En intelligent presentasjon skreddersydd den enkelte | 114 |
5.1.5 | Problemer kan løses med noen smarte grep | 118 |
5.1.6 | Litt mer avansert | 120 |
5.2 | Egendefinerte funksjoner | 121 |
5.2.1 | Hva er en funksjon? | 122 |
5.2.2 | Eksempel på en egendefinert funksjon | 123 |
5.2.3 | Funksjon som returnerer en verdi | 124 |
5.2.4 | Hvorfor funksjoner? | 126 |
5.3 | Den gylne middelvei | 127 |
5.3.1 | Kombinasjon av inkludering og funksjoner | 128 |
5.3.2 | Mot egne funksjonsbiblioteker | 129 |
5.3.3 | Utvidelse av lagToppseksjon() | 131 |
5.3.4 | Hvilken strategi for organisering bør benyttes? | 132 |
5.4 | Få en bedre forståelse av funksjoner, avanserte tema | 133 |
5.4.1 | Variablenes virkeområde og levetid | 133 |
5.4.2 | Kodeordene global og static | 135 |
5.4.3 | Valgfrie argumenter | 135 |
5.4.4 | Overføring av referanser | 137 |
5.4.5 | Dynamiske funksjonskall | 138 |
5.5 | Oppgaver og kontrollspørsmål | 138 |
Til toppen |
Kapittel 6 - Innebygde funksjoner for å behandle strenger, datoer og matriser
|
6.1 | Innebygde funksjoner i PHP | 142 |
6.1.1 | Automatisk utsendelse av e-post | 142 |
6.1.2 | Hvorfor innebygde funksjoner? | 144 |
6.1.3 | Funksjonsbiblioteket er meget godt dokumentert | 146 |
6.2 | Strengbehandling | 148 |
6.2.1 | Grunnleggende strengbehandling med funksjoner | 148 |
6.2.2 | Strengfunksjoner har en praktisk nytteverdi | 150 |
6.2.3 | XSS (Cross Site Scripting) kan unngås med en hendig funksjon | 151 |
6.2.4 | Lag din egen passordgenerator - md5() | 152 |
6.2.5 | Andre nyttige strengfunksjoner | 154 |
6.3 | Matriser kan manipuleres med funksjoner | 156 |
6.3.1 | Sortering i PHP er lett som en lek | 156 |
6.3.2 | Funksjonene implode() og explode() | 157 |
6.3.3 | Andre matrisefunksjoner | 158 |
6.4 | Dato og tidspunkt, bursdag- og bestillingssystem | 160 |
6.4.1 | Koder brukes for å finne riktig datoinformasjon | 160 |
6.4.2 | Noen datofunksjoner | 161 |
6.4.3 | På hvilken dag ble du født? | 163 |
6.4.4 | Bestillingssystemer må være brukervennlige | 163 |
6.5 | Tips, triks og avanserte tema | 166 |
6.5.1 | Visualiser matriser og data med var_dump() eller print_r() | 166 |
6.5.2 | Triks for å variere antall parametrer i et funksjonskall | 167 |
6.6 | Oppgaver og kontrollspørsmål | 169 |
Til toppen |
Kapittel 7 - Tilstandsbevaring med skjulte elementer, URL, cookies og sessions
|
7.1 | Problemet med tilstandsbevaring | 174 |
7.2 | URL kan skjule mye informasjon | 174 |
7.2.1 | Passord | 175 |
7.2.2 | Skift farge | 176 |
7.2.3 | Bevare informasjon med hjelp av URL | 176 |
7.2.4 | Bruk av skjulte elementer - hidden | 179 |
7.3 | Tilstandsbevaring på klienten - cookies | 183 |
7.3.1 | Hva er cookies? | 183 |
7.3.2 | Eksempler på problemstillinger som kan løses med cookies | 184 |
7.3.3 | Det er enkelt å lagre informasjon i cookies med PHP | 185 |
7.3.4 | Les innholdet i en cookie med PHP | 187 |
7.3.5 | Andre muligheter med cookies | 189 |
7.3.6 | Vedlikehold av cookies på klientmaskinen | 190 |
7.4 | Tilstandsbevaring på tjeneren med sessions | 192 |
7.4.1 | Et enkelt teller-script illustrerer bruk av sessions | 193 |
7.4.2 | PHPSESSID er nøkkelen til suksess | 194 |
7.4.3 | Eksempel: Innlogging leder til interne sider | 197 |
7.4.4 | Med fokus på sikkerhet og robusthet over tid | 199 |
7.5 | Oppgaver og kontrollspørsmål | 202 |
Til toppen |
Kapittel 8 - Filbehandling
|
8.1 | Informasjon kan lagres på filer over tid | 206 |
8.2 | Kom i gang med filbehandling | 207 |
8.2.1 | Viktige begreper | 207 |
8.2.2 | Filoperasjoner utføres ved å kalle funksjoner | 208 |
8.2.3 | En teller for et nettsted i enkel og mer fancy utgave | 211 |
8.2.4 | Problem med flere samtidige brukere og mange oppdateringer | 214 |
8.2.5 | Funksjoner for å vise informasjon om filer | 214 |
8.3 | Lag din egen gjestebok | 215 |
8.3.1 | Strategi for lagring | 217 |
8.3.2 | Presentasjon av innholdet i gjesteboka | 219 |
8.3.3 | Morsomt, men er det sikkert? | 220 |
8.4 | Opplasting av filer for å lage et bildegalleri | 221 |
8.4.1 | Skjema for opplasting | 222 |
8.4.2 | Behandle mottatt fil | 223 |
8.4.3 | Sikkerhet og filopplasting - mulige XSS-angrep | 227 |
8.5 | Oppgaver og kontrollspørsmål | 227 |
Til toppen |
Kapittel 9 - Kom i gang med SQL og databaser
|
9.1 | Litt nødvendig databaseteori | 230 |
9.1.1 | Hva er en database? | 230 |
9.1.2 | Et større eksempel gir en praktisk gjennomgang av teorien | 231 |
9.1.3 | Fra en til flere tabeller | 232 |
9.1.4 | Normalisering og relasjoner | 234 |
9.2 | Kom i gang med MySQL | 237 |
9.2.1 | Hvorfor MySQL? | 237 |
9.2.2 | Noen ord om mysqli | 238 |
9.2.3 | Er det støtte for MySQL, og er det installert? | 238 |
9.2.4 | Klient og tjener - viktige prinsipper | 239 |
9.2.5 | Et smart verktøy for enkel databaseadministrasjon | 240 |
9.2.6 | Verdt å kjenne til om SQLite og PEAR | 241 |
9.3 | Hva er spørringer? Lær deg SQL på 1-2-3! | 242 |
9.3.1 | Lag en tabell med phpMyAdmin | 243 |
9.3.2 | Behandle databaser med SQL | 246 |
9.3.3 | INSERT brukes for å legge inn nye rader | 247 |
9.3.4 | Enkel bruk av SELECT for å hente ut informasjon | 248 |
9.3.5 | Avgrensning av resultatet | 250 |
9.3.6 | Oppdatering, endring og sletting av informasjon | 251 |
9.3.7 | MySQL har et rikt utvalg av funksjoner | 254 |
9.4 | Oppgaver og kontrollspørsmål | 256 |
Til toppen |
Kapittel 10 - PHP og databaser
|
10.1 | Grunnleggende databasefunksjoner i PHP | 258 |
10.1.1 | Presenter alle kontaktpersoner på web | 258 |
10.1.2 | Opprette en tabell med PHP | 261 |
10.1.3 | Skjema for å registrere nye prosjekter | 262 |
10.1.4 | PHP-script med dynamiske SQL-spørringer | 264 |
10.1.5 | Notis om feilhåndtering | 267 |
10.2 | Et større eksempel - sidene til Nettverksuniversitetet | 270 |
10.2.1 | Grensesnittet for å opprette en ny nyhet | 271 |
10.2.2 | Databasetabellen nyheter er sentral | 273 |
10.2.3 | Ved opprettelse av en ny nyhet må inngangsdata sjekkes | 274 |
10.2.4 | Opplasting av bilde og innlegging av nyheten | 277 |
10.2.5 | Visning av forsiden | 279 |
10.2.6 | Vise all informasjon om én eller alle gamle nyheter | 281 |
10.2.7 | Grensesnittet for administrasjon av eksisterende nyheter | 282 |
10.2.8 | Koden for å endre eller slette en nyhet | 284 |
10.2.9 | Siste script - koden for å utføre endringene | 288 |
10.3 | Oppgaver og kontrollspørsmål | 289 |
Til toppen |
Kapittel 11 - Sikkerhet og hacking
|
11.1 | Introduksjon til datasikkerhet | 292 |
11.1.1 | En restaurant som tilbyr nugatti i stedet for reker på loffen | 292 |
11.1.2 | Vårt fokus på sikkerhet så langt | 294 |
11.2 | Sikkerhet ved bruk av databaser | 296 |
11.2.1 | Riktig brukernavn og passord må til for å logge inn, eller ...? | 296 |
11.2.2 | SQL-injection | 298 |
11.2.3 | Stor skade kan påføres med SQL-injection | 300 |
11.2.4 | Det er enkelt å unngå SQL-injection, så gjør det! | 303 |
11.2.5 | Privilegier i SQL | 305 |
11.2.6 | Lagre passord som hash, ikke i klartekst | 307 |
11.3 | Validering av inngangsdata | 310 |
11.3.1 | Bruk av validering med JavaScript på klienten | 311 |
11.3.2 | Validering på tjenersiden | 312 |
11.3.3 | Hva er regulære uttrykk? | 313 |
11.3.4 | Regulære uttrykk kan brukes til validering av inngangsdata | 315 |
11.3.5 | Foreta avansert strengbehandling med regulære uttrykk | 317 |
11.4 | Strategier for adgangskontroll | 319 |
11.4.1 | Hindre bakdører inn i systemet | 320 |
11.4.2 | Autentisering med HTTP | 322 |
11.4.3 | Tvinge frem 401-feil med kode for å få opp passordboksen | 323 |
11.4.4 | Aksesskontroll med Apache gjennom bruk av .htaccess | 325 |
11.5 | Sikkerhet er mye mer enn sikker kode | 328 |
11.5.1 | Innstillinger i php.ini | 328 |
11.5.2 | Oppsett av Apache | 328 |
11.5.3 | Oppsett av databasetjener | 329 |
11.5.4 | Logging | 329 |
11.6 | Oppgaver og kontrollspørsmål | 331 |
Til toppen |
Kapittel 12 - Alternative presentasjonsformer
|
12.1 | Lag grafikk og bilder med PHP | 334 |
12.1.1 | Er alt klart til å lage grafikk med PHP? | 334 |
12.1.2 | Hva er et bilde i Internett-sammenheng? | 335 |
12.1.3 | Funksjoner for å generere bilder | 338 |
12.1.4 | Geometriske figurer | 339 |
12.2 | Mer dynamikk i din grafikk | 342 |
12.2.1 | Lag et bilde basert på brukerdata | 342 |
12.2.2 | Lage mange like menyknapper med varierende tekst | 345 |
12.2.3 | Grafikk basert på innholdet i en database | 347 |
12.3 | Andre former for presentasjon | 350 |
12.3.1 | Vis informasjon i for eksempel et Excel-regneark | 350 |
12.3.2 | PDF | 352 |
12.4 | Oppgaver og kontrollspørsmål | 353 |
Til toppen |
Kapittel 13 - Veien videre med PHP
|
13.1 | Objektorientering (OOP) i PHP | 356 |
13.1.1 | Hvorfor OOP? | 356 |
13.1.2 | Å lage en klasse | 356 |
13.1.3 | Å lage objekter basert på en klasse | 358 |
13.2 | XML i PHP | 360 |
13.2.1 | Eksempel på et XML-dokument | 360 |
13.2.2 | Bruk av SimpleXML er enkelt - men kraftig | 361 |
13.3 | Templates (maler) | 362 |
13.3.1 | Det handler om å skille innhold fra presentasjon | 363 |
13.3.2 | Et enkelt eksempel illustrerer konseptet | 363 |
13.3.3 | Fundamentale forskjeller mellom ulike Template-systemer | 366 |
13.4 | Kom i gang med SQLite | 368 |
13.4.1 | Prosedural tilnærming til SQLite | 368 |
13.4.2 | Objektorientert tilnærming til SQLite | 370 |
13.4.3 | Fare for SQL-injection | 370 |
13.4.4 | Funksjoner i spørringer | 371 |
13.4.5 | Noen andre finesser i SQLite | 372 |
13.5 | PEAR - PHP Extension and Application Repository | 373 |
13.6 | Annet | 373 |
13.7 | Oppgaver og kontrollspørsmål | 374 |
Til toppen |
Kapittel 14 - Programmererens kokebok
|
14.1 | Hvorfor kokebok her? | 376 |
14.1.1 | Hvordan er oppskriftene organisert og oppbygd? | 376 |
14.2 | Diverse triks for å løse detaljer | 377 |
14.2.1 | Skriv ut på entalls- eller flertallsform | 377 |
14.2.2 | Skriv ut alle matriseelementer med komma mellom | 377 |
14.2.3 | Lag variabler av matriseelementer | 378 |
14.2.4 | Bytt om på innholdet i variabler | 379 |
14.2.5 | Lag en streng med tilfeldige tegn | 379 |
14.2.6 | Konverter eksisterende HTML-kode til PHP | 380 |
14.3 | Kommunikasjon med brukere | 380 |
14.3.1 | Lag nedtrekkslister med forhåndsvalgt dagens dato | 381 |
14.3.2 | Velg flere verdier samtidig i avkrysningsbokser | 381 |
14.3.3 | Slett en cookie (informasjonskapsel) | 381 |
14.3.4 | Oversiktlig visning og behandling av skjema | 382 |
14.3.5 | Innloggingsfunksjonalitet på et nettsted | 383 |
14.3.6 | Innlogging og utlogging i praksis | 383 |
14.3.7 | Send uautentiserte personer til en innloggingsside | 384 |
14.3.8 | Lag grafikk dynamisk basert på data fra brukeren | 385 |
14.4 | Håndtere og finne feil | 386 |
14.4.1 | Tilordning eller sammenlikning? | 386 |
14.4.2 | Er inngangsdata som forventet? | 386 |
14.4.3 | Rens alt som mottas fra brukeren | 387 |
14.4.4 | Fang opp feil når du programmerer med PHP | 387 |
14.4.5 | Rapporter feil som oppstår på et nettsted | 388 |
14.5 | Data fra eksterne kilder - filer og databaser | 389 |
14.5.1 | Håndtere blanke linjer når informasjon lagres på fil | 389 |
14.5.2 | Hent og behandle innhold fra en kommaseparert fil | 390 |
14.5.3 | Unngå feil i spørringer | 390 |
14.5.4 | Strategi for å slette fra en database | 391 |
14.5.5 | Opplasting av filer fungerer ikke | 391 |
14.6 | Mer komplekse problemstillinger | 392 |
14.6.1 | Kjenn dine besøkende | 392 |
14.6.2 | Send e-post i form av HTML | 393 |
14.6.3 | Lag en handlekurvløsning | 393 |
14.6.4 | Presenter informasjon fra en database ryddigst mulig | 394 |
Til toppen |
|