Validointi ja dynaamiset lomakkeet - Luento 6
Jatketaan lomakkeen käsittelyä PHP:lla. Aiheina validointi, oletusarvon täyttö, moniulotteiset taulukot ja dynaamiset lomakkeet. Käydään lisäksi viikkotehtävä 2 läpi.
Luentotaltiointi
- sovellukset06.mp3 17M
- sovellukset06.wmv 65M
- sovellukset06.avi 219M
Viikkotehtävä 2
- Palautteet
- Mallivastaukset
- Mallivastauksissa ei ole huomioitu sitä, että nollalla ei saisi jakaa. Pitäisi siis tehdä tarkistus, että jos tietty operaattori on jako, niin siitä seuraava luku ei saisi olla nolla. Tätä tarkistusta ei myöskään vaadittu täysiä pisteitä tehtävästä saadakseen.
Huomioita ja yleisimpiä virheitä
- Useilla puuttui laskun tuloksen esittämisvaiheessa alkuperäiset syötetyt arvot lomakkeen pohjalta. Tämä on paha puute etenkin lomakkeen käytettävyyden kannalta.
- Valintanapille ei oltu laitettu oletusvalintaa. Oletusvalinta on tärkeä, jotta lomakkeenkäsittelijälle menisi varmasti joku arvo.
- Labeleita ei oltu käytetty tai niitä oli käytetty väärin.
- Ulkoasu ei vastannut mallia. Jopa CSS-tiedosto saattoi puuttua kokonaan.
- Lomakkeelle ei oltu laitettu actioniin mitään. Toimii kyllä siinä tapauksessa, että käsittelijä on sama tiedosto, mutta ei silti ole hyvä ratkaisu.
- Minkäänlaisia tarkistuksia ei ollut tehty. Ei tosin vaadittu tehtävässä, mutta alkeellisia tarkistuksia olisi aina hyvä tehdä.
- Koodi ei ollut validia. Koodin tulee olla validia kaikissa viikkotehtävissä.
- Laskujärjestys ei toiminut tai toimi vain alkeellisissa tapauksissa.
- Koodi oli melko useasti aikamoista iffittelyä. :-)
- Trigonometrisiä funktioita tai potenssia ei oltu osattu laskea.
- Jos käyttää eval()-funktiota, niin tarkistukset tulee olla kunnossa. Ilman niitä funktio on tietoturvaton, koska se toteuttaa PHP-koodia.
- Syötettäessä virheellinen arvo ei tulostettu virhettä tai kysytty lukua uudelleen.
- Lomakkeita tulostettu turhaan moneen kertaan.
- Ei ole osattu käyttää taulukkomuuttujaa ($muuttuja[]) oikein.
- Laskutoimitusten lukumääräksi kelpaa desimaaliluku. Täytyisi joko pakottaa luku kokonaisluvuksi tai ei hyväksyä desimaalilukua ollenkaan.
- Kommentit puuttui kokonaan useilta!
PHP-koodin debuggaus
Vielä debug-mahdollisuudet kertauksena:
- Komentorivillä PHP-tiedoston sisältämässä hakemistossa:
php index.php
- PHP-tiedoston alkuun komennot:
error_reporting(E_ALL); ini_set('display_errors', '1');
Virheet näkyvät WWW-sivulla. Näyttää users.jyu.fi:ssä ainoastaan ajonaikaset virheet. - Eclipsen PHP-tilan Problems-välilehti - näyttää syntaksivirheet.
- Oikealla painikkeella Toggle Breakpoint ja sitten Debug As | PHP Script.
var_export
-funktiota voi käyttää debuggauksessa seuraavasti:- Laita lomakkeen lähettämisen jälkeen väliaikaisesti
komento
var_export($_REQUEST);
. - Kopioi sen tuottamat tekstit.
- Laita breakpoint johonkin väliin PHP-sivun koodia.
- Aja sivu debug-perspektiivissä.
- Valitse Variables-kohdasta
$_REQUEST
oikealla ja valitse Change value. Laita var_export-funktion tuottama PHP-koodi tekstilaatikkoon, niin saat oikeat lomakeparametrit käyttöösi.
- Laita lomakkeen lähettämisen jälkeen väliaikaisesti
komento
Lomakkeet ja tietosuoja
Henkilötietolain mukaan pääsääntöisesti kaikesta henkilötietojen automaattisesta käsittelystä tulee tehdä ilmoitus tietosuojavaltuutetulle. Esimerkiksi jos tehdään WWW-lomakkeita, joissa kysytään henkilöä koskevia arkaluonteisia tietoja ja tallennetaan ne johonkin, niin tällöin tehtävä rekisteri-ilmoitus. Jos palvelua käytetään tietoverkossa, rekisteriseloste tulee liittää verkkopalvelun yhteyteen.
- Henkilötietolain mukainen ilmoitusvelvollisuus
- Mikä rekisteriseloste on
- Rekisteriseloste-lomake
- Esimerkki: Korppi-järjestelmän rekisteriseloste
SSH-avaimet
Autentikointi voidaan tehdä palvelimelle sijoitettavaan julkiseen avaimeen perustuen, jolloin esim. tiedostojen kopiointi helpottuu. Tässä lyhyesti ohjeistusta:
- Oletetaan, että SSH Secure Shell 3.2.9 on asennettu.
- Luodaan SSH-avainpari kotikoneen komentorivillä (cmd):
ssh-keygen2.exe -b 1024 -t dsa -P
- Kopioidaan polussa Documents and Settings\%username%\Application Data\SSH\UserKeys oleva julkinen avain id_dsa_1024_a.pub palvelimen käyttäjän kotihakemistossa olevaan .ssh-hakemistoon, esim. SFTP:llä tai SCP:llä.
- Laitetaan
.ssh
-hakemistoon kaikki oikeudet ainoastaan käyttäjälle. - Aja
.ssh
-hakemistossa komento:ssh-keygen -f ~/.ssh/id_dsa_1024_a.pub -X >> ~/.ssh/authorized_keys
- Laita tiedostoon authorized_keys ainoastaan luku- ja kirjoitusoikeus käyttäjälle.
- Nyt ssh2 ja scp2 toimivat ilman salasanan kyselyjä. Graafisessa liittymässä pitää
valita autentikointimetodiksi Public Key. Hakemiston ja kaikki sen alihakemistot ja niissä olevat
tiedostot voi siirtää seuraavalla komennolla:
scp2 -r hakemisto omatunnus@jalava.cc.jyu.fi:html/sovellukset/
PHP-lomake-esimerkki
Luennolla tehty sovellus ja sen lähdekoodit löytyvät alla olevasta linkistä. Koodien kommenteissa näkyy, mitä lisäyksiä on tehty luennon jälkeen. Uudet koodit käydään läpi myös seuraavan luennon alussa.
- Lähetyksen tarkistaminen ennen oletusarvojen tulostamista:
- Tulostetaanko lomake pelkkänä XHTML:nä vai tarkistellaanko jokaisessa kohdassa erikseen onko lähetetty?
- Jos erotellaan lähetetty ja ei-lähetetty tilanne, niin tällöin tulee kaksi erillistä lomaketta. Tällöin ei tarvitse montaa if-lausetta, mutta päivitettävyys kärsii.
- Jatkamme toistaiseksi if-linjalla, koska myöhemmin on helpompi tehdä dynaamisia lomakkeita.
- Ennen pitkää tavoite on päästä eroon toistuvasta if-lauseiden kirjoittamisesta. Tämä onnistuisi olioiden avulla, jotka kapseloivat virheenkäsittelymekanismit.
- Moniulotteinen virhetaulukko - useita virheitä yhdessä kohdassa:
- Katenointioperaattori
.
- Katenointioperaattori
- Merkin vertailu merkkijonosta:
$jono{$i}
strlen
- Onko numero?
- Valintavaihtoehdon oletusarvon täyttäminen virhetilanteessa.
- Useiden lomake-elementtien läpikäynti kerralla:
- Keskiarvon laskeminen väitevaihtoehdoista.
- Dynaamiset lomakkeet:
- Eri päivien kilokalorit?
- Moniulotteinen taulukko suoraan lomakkeelta.
- Minä päivänä tuli eniten energiaa?
Käyttäjien kommentit