SlideShare a Scribd company logo
1 of 36
Databaser i
PHP

Eksempler og links kan efterfølgende findes på http://appacademy.dk

App Academy

www.appacademy.dk
@appacademydk
Kristian Langborg-Hansen

Partner i App Academy
Underviser og foredragsholder
Forfatter
klh@appacademy.dk

App Academy

www.appacademy.dk
@appacademydk
Opgaven fra sidst
• Kan I huske ”Gæt et tal”?
• Brug sessionsvariabler til
– At huske det rigtige tal
– At tælle hvor mange gange brugeren har gættet

• Vis antal gæt for brugeren
• Tip: et tilfældigt tale laves med
$tal = rand(1,10);
• Vejledende løsning på www.appacademy.dk

App Academy

www.appacademy.dk
@appacademydk
Database

App Academy

www.appacademy.dk
@appacademydk
Kunne også have været

App Academy

www.appacademy.dk
@appacademydk
Fællesnævneren
Structured Query Language (SQL)
- Det sprog, de fleste databaser taler
Data Definition Language (DDL)
- Oprettelse af strukturen i databasen

Tutorial og reference: www.appacademy.dk

App Academy

www.appacademy.dk
@appacademydk
Arkitektur

Driver

App Academy

www.appacademy.dk
@appacademydk
Installation af databasen

App Academy

www.appacademy.dk
@appacademydk
XAMPP

App Academy

www.appacademy.dk
@appacademydk
Opbygningen
Adresser
Navn

Adresse

Postnr

By

Anders Hansen

Borgergade 12

2820

Gentofte

Bodil Nielsen

Ringgaden 12A

8000

Århus C

Christian Muus

Søndergade 5

6000

Kolding

App Academy

www.appacademy.dk
@appacademydk
Tabelnavn

Opbygningen
Kolonner

K
o
l
o
n
n
e

Adresser
Rækker

Navn

Adresse

Postnr

By

Anders Hansen

Borgergade 12

2820

Gentofte

Bodil Nielsen

Ringgaden 12A

8000

Århus C

Christian Muus

Søndergade 5

6000

Kolding

App Academy

www.appacademy.dk
@appacademydk
Opbygningen
Adresser
Navn

Adresse

Postnr

Anders Hansen

Borgergade 12

2820

Bodil Nielsen

Ringgaden 12A

8000

Christian Muus

Søndergade 5

6000

Postnumre
Postnr

By

2820

Gentofte

8000

Århus C

6000

Kolding

App Academy

www.appacademy.dk
@appacademydk
Opbygningen
Adresser
Navn

Adresse

Postnr

Anders Hansen

Borgergade 12

2820

Bodil Nielsen

Ringgaden 12A

8000

Christian Muus

Søndergade 5

6000

Postnumre
Postnr

By

2820

Gentofte

8000

Århus C

6000

Kolding

App Academy

www.appacademy.dk
@appacademydk
Administration
http://localhost/phpmyadmin

App Academy

www.appacademy.dk
@appacademydk
En note om bogen
• Brug ikke mysqldriveren som beskrevet
i bogen!
• Brug mysqli i stedet
i = improved
• Følg linket fra
appacademy.dk

App Academy

www.appacademy.dk
@appacademydk
Forbindelse til database
$database = new mysqli("localhost", "root",
"", "eksempler");
…
$database->close();

App Academy

www.appacademy.dk
@appacademydk
Forespørgsel
$sql = "insert into kontakter values ('" .
$_REQUEST['navn']. "', '" .
$_REQUEST['adresse'] . "', '" .
$_REQUEST['postnummer'] . "')";
$succes = $database->query($sql);

App Academy

www.appacademy.dk
@appacademydk
Gik det godt?
if ($succes) {
echo "Bruger oprettet";
} else {
echo "Der opstod en fejl";
}

App Academy

www.appacademy.dk
@appacademydk
Prepared statements
$statement = $database->prepare(
"insert into kontakter values (?, ?, ?);");
$statement->bind_param("sss",
$_REQUEST['navn'], $_REQUEST['adresse'],
$_REQUEST['postnummer']);
$succes = $statement->execute();

App Academy

www.appacademy.dk
@appacademydk
Pladsholder

Prepared statements

$statement = $database->prepare(
"insert into kontakter values (?, ?, ?);");
$statement->bind_param("sss", Datatyper (s, i, d)
$_REQUEST['navn'], $_REQUEST['adresse'],
$_REQUEST['postnummer']);
$succes = $statement->execute();

App Academy

www.appacademy.dk
@appacademydk
App Academy

www.appacademy.dk
@appacademydk
Dagens case
• Pinkodehuskeren igen
– Gemmes i databasen
– Bruger logger på,
og ser sin egen
pinkodehusker

App Academy

www.appacademy.dk
@appacademydk
To tabeller
• Brugere
– Brugernavn
– Adgangskode

• Pinkoder
– Brugernavn
– Farver
– Cifre

App Academy

www.appacademy.dk
@appacademydk
Sikre adgangskoder
$adgangskode = password_hash(
$_REQUEST["adgangskode"],
PASSWORD_BCRYPT);

App Academy

www.appacademy.dk
@appacademydk
Sikre adgangskoder
$adgangskode = password_hash(
$_REQUEST["adgangskode"],
PASSWORD_BCRYPT);

App Academy

www.appacademy.dk
@appacademydk
Kontrol af adgangskode
if (password_verify($adgangskode,
$korrekt_kode)) { ... }

App Academy

www.appacademy.dk
@appacademydk
Data fra databasen
$statement = $database->prepare(
"select adgangskode from brugere where
brugernavn = ?");

$statement->bind_param("s",
$_REQUEST['brugernavn']);
$resultat = $statement->execute();

App Academy

www.appacademy.dk
@appacademydk
Data fra databasen
$data = $statement->get_result();
if ($data->num_rows == 0) { … }
$raekke = $data->fetch_row();

$raekke[0]

Adgang til resultatet

Er der fundet noget?

Hent næste række

Adgang til kolonnerne i rækken

App Academy

www.appacademy.dk
@appacademydk
Er der allerede en pinkode?
$statement = $database->prepare(
"select farve from pinkode where
brugernavn = ?");
$statement->bind_param("s", $brugernavn);
$result = $statement->execute();
$data = $statement->get_result();
if($data->num_rows == 0) {

App Academy

Ingen data fundet
www.appacademy.dk
@appacademydk
Indsæt ny pinkode
$statement = $database->prepare(
"insert into pinkode values(?,?,?)");
$statement->bind_param("sss", $brugernavn,
$farve, $tal);
$statement->execute();

App Academy

www.appacademy.dk
@appacademydk
Opdater pinkode
$statement = $database->prepare(
"update pinkode set farve=?, tal=? where
brugernavn = ?");

$statement->bind_param("sss", $farve, $tal,
$brugernavn);
$statement->execute();

App Academy

www.appacademy.dk
@appacademydk
Hent data
$statement = $database->prepare(‘
"select tal, farve from pinkode where
brugernavn = ?");
…
Næste række
$row = $data->fetch_row();
Første element
$tal = $row[0];
Andet element
$farve = $row[1];

App Academy

www.appacademy.dk
@appacademydk
Slet data
$statement = $database->prepare(
"delete from pinkode where brugernavn =
?");

$statement->bind_param("s", $brugernavn);
$statement->execute();

App Academy

www.appacademy.dk
@appacademydk
En sidste opgave…
Udvid pinkodehuskeren, så hver bruger kan
have flere pinkodehuskere.
1. Hver pinkodehusker skal have et navn
2. Brugeren skal kunne vælge mellem sine
pinkodehuskere, når han logger ind
3. Brugeren skal også kunne lave en ny
pinkodehusker.
4. Pinkodehuskere skal kunne slettes

App Academy

www.appacademy.dk
@appacademydk
Kursusbevis
• Har du været til alle tre foredrag, får du et
kursusbevis.
– Som billede
– ID til brug på LinkedIn

• Det kommer på e-mail i løbet af en uge
– Hvis ikke, så send mig en mail
klh@appacademy.dk

App Academy

www.appacademy.dk
@appacademydk
App Academy
Dagens eksempler:
www.appacademy.dk
Kontakt:
klh@appacademy.dk

”Hos App Academy mener vi, at alle fortjener at
kunne programmere – og vi vil gerne hjælpe jer
www.appacademy.dk
med at lære det.”
App Academy
@appacademydk

More Related Content

More from Kristian Langborg-Hansen

More from Kristian Langborg-Hansen (7)

Wordpress for foreninger | appacademy.dk
Wordpress for foreninger | appacademy.dkWordpress for foreninger | appacademy.dk
Wordpress for foreninger | appacademy.dk
 
Google web designer | appacademy.dk
Google web designer | appacademy.dkGoogle web designer | appacademy.dk
Google web designer | appacademy.dk
 
Introduktion til wordpress App Academy
Introduktion til wordpress   App AcademyIntroduktion til wordpress   App Academy
Introduktion til wordpress App Academy
 
App inventor workshop [App Academy]
App inventor workshop [App Academy]App inventor workshop [App Academy]
App inventor workshop [App Academy]
 
Grundlæggende HTML
Grundlæggende HTMLGrundlæggende HTML
Grundlæggende HTML
 
Responsive web design
Responsive web design Responsive web design
Responsive web design
 
Mobile apps med html
Mobile apps med html   Mobile apps med html
Mobile apps med html
 

Databaser i PHP [App Academy}