Autentikointi, transaktiot, oliot tietokantojen käsittelyssä
Luennolla käsitellään edellisviikon viikkotehtävä ja jatketaan tietokantojen parissa.
Luentotaltiointi
- sovellukset14.mp3 16M
- sovellukset14.wmv 36M
- sovellukset14_xvid.avi 110M
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.
Transaktiot
PDO tukee myös transaktioita
Luodaan reseptitietokanta: resepti.sql ja lisätään sinne transaktion avulla uusia reseptejä: transaktio.php.
Lisätietoa
- An introduction to Service Data Objects for PHP
- Database Abstraction in PHP
- PHP:PDO Functions
- PDO
- PDO Basics
- The PHP 5 Data Object (PDO) Abstraction Layer and Oracle
- Propel
- Simplify Business Logic with PHP DataObjects
- DB Dataobject
- PEAR::DB, DataObjects, and Joins / Reflection
- Going dynamic with PHP
- PHP Object Generator (POG)
- Database Abstraction With PHP
- Enforce Foreign Key Integrity in SQLite with Triggers
- DB_Container - PHP Database Persistence Layer
- phpGen

