Autentikointi, transaktiot, oliot tietokantojen käsittelyssä

Luennolla käsitellään edellisviikon viikkotehtävä ja jatketaan tietokantojen parissa.

Luentotaltiointi

Ongelmia videon katselussa?

Viikkotehtävät

Autentikointi

Toteutetaan yksinkertainen tietokantapohjainen autentikointi. Tuotantoympäristössä pitää muistaa käyttää suojattua-yhteyttä! (https)

session_start();

function ask() {

            header( 'WWW-Authenticate: Basic realm="Mun sivusto"' );
            header( 'HTTP/1.0 401 Unauthorized' );
            echo 'Tarvitaan käyttäjätunnus ja salasana';
            exit;

}

if ( !isset( $_SERVER["PHP_AUTH_USER"] ) || !isset( $_SERVER["PHP_AUTH_PW"] )) {
        ask();
}

try {
  $dbh = new PDO('sqlite:/home3/368/tjlahton/public_html/php/luento14/kanta');
}
catch ( PDOException $e ) {
  die ( $e->getMessage() );
}

if ( !isset ( $_SESSION["tunnus"] ) ) {
 try {
  $sql = $dbh->prepare("SELECT * FROM users
                        WHERE login = :tunnus
                        AND password = :salasana");
 }
 catch ( PDOException $e ) {
   die ( $e->getMessage() );
 }


 $tunnus = $_SERVER["PHP_AUTH_USER"];
 $sala = md5( $_SERVER["PHP_AUTH_PW"]  );

 $sql->bindParam( ":tunnus", $tunnus );
 $sql->bindParam( ":salasana", $sala );
 $ok = $sql->execute();

 if ( !$ok ) { print_r( $sql->errorInfo() ); }

 $row = $sql->fetch(PDO_FETCH_ASSOC);

 if ( $row ) {
   $_SESSION["tunnus"] = $tunnus;
 }
 else {
   ask();
 }

}

Tunnusten luominen

Yksinkertaisin mahdollinen käyttäjätunnustaulu:

 CREATE TABLE users (
  login VARCHAR(16),
	password VARCHAR(32),
	PRIMARY KEY (login)
);

Varsinaisten tunnusten luominen PHP:lla

try {
  $sql = $dbh->prepare("insert into users VALUES ( :tunnus, :sala )");
 }
 catch ( PDOException $e ) {
   die ( $e->getMessage() );
 }
 $tunnus = "tommi";
 // salasana pitää aina koodata md5:lla
 $sala = md5("salasana");

 $sql->bindParam( ":tunnus", $tunnus );
 $sql->bindParam( ":sala", $sala );

 $ok = $sql->execute();

oliot

Olioiden avulla on helppo vähentää SQL-lauseiden kanssa puljaamista. Seuraava esimerkki pohjautuu suoraan Going dynamic with PHP-artikkeliin.

Table.php

Transaktiot

PDO tukee myös transaktioita

Luodaan reseptitietokanta: resepti.sql ja lisätään sinne transaktion avulla uusia reseptejä: transaktio.php.

Lisätietoa

Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/luennot/luento14/
© Tommi Lahtonen (tommi.j.lahtonen@jyu.fi)< http://hazor.iki.fi/>
2006-04-07 17:37:30