Lomakkeet ja HTTP - Luento 5

Luennolla käydään läpi HTTP-protokollan perusteita ja selvitellään miten WWW-lomakkeita voidaan käsitellä PHP:lla.

Luentotaltiointi

Ongelmia videon katselussa?

Miten asennan PHP-kehitysympäristön?

Lomakkeen toiminta yleisesti

Lomakkeen käsittely

  1. Selainohjelma pyytää palvelimelta lomakesivun HTTP-protokollan mukaisilla otsikkotiedoilla.
  2. Palvelin vastaa selaimelle HTTP-protokollan mukaisilla otsikkotiedoilla, jonka jälkeen tarjoaa WWW-sivun datan (=XHTML:ää).
  3. Käyttäjä täyttää ja hyväksyy lomakkeen. Selain lähettää lomakkeen tiedot WWW-palvelimella suoritettavalle ohjelmalle.
  4. Lomakkeella oleva data käsitellään ohjelman tekijän haluamalla tavalla.
  5. Ohjelma palauttaa käyttäjälle virheilmoituksen tai ilmoituksen onnistumisesta, esim. lomakkeen korjauspyynnöillä tai tulossivun.

Lomakkeen käsittely

HTTP (HyperText Transfer Protocol)

HTTP on protokolla, jonka avulla selain ja WWW-palvelin keskustelevat.

Firefox-selaimen ja WWW-palvelimen välistä HTTP-liikennettä on helppo seurata Tamper Data -laajennuksella

Selain lähettää WWW-palvelimelle pyynnön:

GET /sovellukset/testi.html HTTP/1.1
Connection: keep-alive
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding: gzip,deflate
Accept-Language: en-us,en;q=0.5
Host: appro.mit.jyu.fi
Referer: http://appro.mit.jyu.fi/ 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624
Keep-Alive: 300

Selaimen lähettämät HTTP-otsakkeet selityksineen
GET /sovellukset/testi.html HTTP/1.0 pyydetään informaatiota (GET), jonka osoite palvelimella on /sovellukset/testi.html käyttäen HTTP/1.1-protokollaa
Connection: keep-alive Käsketään pitää yhteys päällä
Accept: text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, video/x-mng, image/png, image/jpeg, image/gif;q=0.2, */*;q=0.1 Luetellaan selaimen ymmärtämät mediatyypit. Kerrotaan myös mitä mediatyyppejä suositaan q-arvojen avulla
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Luetellaan kelpaavat merkistöt
Accept-Encoding: gzip,deflate Luetellaan tuetut koodaustavat (pakkaus)
Accept-Language: en-us,en;q=0.5 Halutut kielet
Host: appro.mit.jyu.fi Palvelimen nimi
Referer: http://appro.mit.jyu.fi/ Osoite josta ollaan tulossa (sivu jolla olevaa linkkiä on klikattu)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Selaimen tiedot
Keep-Alive: 300Kertoo kuinka monta sekuntia yhteyttä pidetään yllä. Vain HTTP/1.0-protokollassa, mutta käytetään yhteensopivuussyistä. Oikeastaan muoto pitäisi olla Keep-Alive: parametri=arvo

Palvelin vastaa:

HTTP/1.1 200 OK
Connection: close
Date: Tue, 06 Apr 2004 10:53:18 GMT
Accept-Ranges: bytes
ETag: "2da29-2147-4044819d"
Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux) PHP/4.1.2 mod_perl/1.26
Vary: Accept
Content-Length: 414
Content-Type: application/xhtml+xml; charset=iso-8859-1
Last-Modified: Tue, 02 Mar 2004 12:44:13 GMT

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" >
<head>
  <title>Testisivu</title>
  <link href="testi.css" rel="StyleSheet" type="text/css" />
</head>
<body>
  <h1>Testiotsikko</h1>
  <p>Testitekstiä</p>
</body>
</html>
WWW-palvelimen vastaus
HTTP/1.1 200 OKStatuskoodi - kaikki kunnossa
Connection: closePalvelin sulkee yhteyden. Normaalisti yhteys on pysyvä (persistent), jotta selain voi tehdä useita pyyntöä (kuvat, css, javascript jne.).
Date: Tue, 06 Apr 2004 10:53:18 GMTPäivä ja aika, koska vastaus on lähetetty
Accept-Ranges: bytesSallitaan tavuina määritellyt pyynnöt joissa halutaan vain osa dokumentista
ETag: "2da29-2147-4044819d"Tunniste. Tunniste muuttuu dokumenttia muutettaessa.
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) AxKit/1.62 mod_python/2.7.8 Python/1.5.2 mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 mod_throttle/3.1.2WWw-palvelimen tiedot
Vary: Accept-EncodingVaihteleeko pyydetty resurssi jonkun ehdon mukaan. Tärkeä tieto esim. välimuisteille. Accept-Encoding: esim. erilainen pakkaus. Accept-Language: tarjolla useita kieliversioita. User-Agent: sivun sisältö riippuu selaimesta.
Content-Length: 414Sisällön koko
Content-Type: application/xhtml+xml; charset=iso-8859-1mediatyyppi ja merkistö
Last-Modified: Tue, 02 Mar 2004 12:44:13 GMTMilloin viimeksi muutettu

HTTP-otsikoita voi tutkia tarkemmin esim. seuraavilla ohjelmilla

HTTP Status codes

Palvelin palauttaa vastauksessa HTTP-statuskoodin, joka kertoo lyhyesti selaimelle miten pyyntö onnistui ja miten tulee jatkossa toimia. Listassa yleisimmät:

Lomakkeen käsittely PHP:lla

HTTP-otsikkotiedot

Selaimen lähettämät otsikkotiedot saa esimääritellystä $_SERVER-taulukosta. Avaimet ovat muotoa HTTP_HEADER_NAME. Esim.

$_SERVER['HTTP_ACCEPT_LANGUAGE']

PHP luo automaattisesti otsikkotiedot ennen HTML-dokumenttia. Jos näitä halutaan muuttaa, niin aivan dokumentin alussa on käytettävä header-funktiota. Esim. edelleenohjaus

<?php 
header('Location: http://appro.mit.jyu.fi/www/');
?>

Ympäristömuuttujat

$_SERVER-taulukosta saa myös palvelimen ja skriptien toimintaan liittyvät CGI-parametrit. Lisäksi mukana on muutama PHP-skriptien toimintaan liittyvä tieto. Esim.

$_SERVER['PHP_SELF']

Lomaketiedot

HTML-lomakkeelta lähetetyt tiedot saa helpoiten $_REQUEST-taulukosta. Se sisältää sekä $_GET ja $_POST-taulukoiden tiedot. Taulukon avaimena on lomake-elementin name-ominaisuus. Esim.

$_REQUEST['etunimi']

Huomioitavaa:

Esimerkki

  1. Lomakemuuttujien tulostaminen
    • Merkkijonot '' ja ""
    • $_SERVER, $_REQUEST, $_GET, $_POST
    • htmlentities, print_r
    • Katenointi .
  2. Taulukot
    • Taulukkoon lisääminen
    • Moniulotteinen taulukko
  3. Lomakemuuttujilla operoiminen
    • Vertailuoperaattorit
    • Laskutoimitukset
    • foreach
    • Checkbox ja taulukot
  4. Validointi
    • Totuusarvot (if)
    • isset, is_numeric, empty
    • Oletusarvot virhetilanteessa
    • Virhetaulukko - useita virheitä yhdessä kohtaa
    • Merkin vertailu merkkijonosta - $jono{$i} - strlen
    • is_numeric
    • in_array
  5. Oletusarvon täyttö
  6. Keskiarvoja
    • printf
    • foreach, count
  7. Dynaamiset lomakkeet

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/luennot/luento5/
© Jukka Mäntylä (jmantyla@mit.jyu.fi) <http://www.iki.fi/jmantyla/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Antti Ekonoja (anjoekon@jyu.fi) <http://users.jyu.fi/~anjoekon/>
2007-04-19 14:41:15