Sähköisten asiointipalveluiden toteuttaminen

Sorakuilu

PHP:n superglobaalit muuttujat, $_GET

Paikalliset ja superglobaalit muuttujat

Tavalliset muuttujat tomivat yhden tiedoston sisällä, ne ovat lokaaleja (local) eli paikallisia muuttujia. Mikään muu tiedosto ei voi käyttää niitä eikä tiedä niiden arvoa.

Usein kuitenkin tarvitaan tiedon siirtämistä tiedostosta toiseen. Esimerkiksi verkkokaupassa ostokset tulee laittaa johonkin talteen, vaikka selailu sivulta toiselle jatkuu. Toinen esimerkki on kirjautuminen järjestelmään - kirjautuminen tulee laittaa jollakin tavalla istunnon ajaksi talteen.

Tällaisia yli tiedostorajojen liikkuvia muuttujia kutsutaan yleisesti globaaleiksi muuttujiksi. PHP:ssä ei tietoturvasyistä suositella käytettäväksi globaaleja muuttujia, niiden sijaan ohjelma käyttää ns. superglobaaleja muuttujia. Olemme niistä tutustuneet jo yhteen, $_GET:iin.

Koska superglobaaleja muuttujia voidaan hyödyntää ohjelmiston eri osissa, ne ovat tiedonsiirron välineitä. Ne ovat taulukkomuotoisia (assosiatiivisia taulukoita), monta eri tietoa sisältäviä muuttujia. Niihin voi tallentaa tai on tallennettu tietoa palvelimesta, menossa olevista istunnoista ja palvelimen kautta tapahtuneista tiedonsiirroista.

Lomakkeet lähetetään metodilla post, mikä tarkoittaa lomakkeen tietojen lähettämistä sen jälkeen, kun käyttäjä on täyttänyt lomakkeen.

Tiedostolle voidaan postauksen lisäksi lähettää tietoja myös ns. kysymysmerkkijonolla http-pyynnön yhteydessä. Vastaanottava tiedosto lukee sen superglobaalista muuttujasta $_GET samalla tavalla kuin luemme superglobaalia $_POST.

$_GET

Pyynnön rakentaminen

Pyyntö on tavallinen linkki, johon on lisätty tiedostonimen perään kysymysmerkki, assosiatiivinen avain, yhtäsuuruusmerkki ja arvo. Jos avain-arvo-pareja on useampia, niiden väliin laitetaan &-merkki.

Esimerkkejä

http://samarium/12dat1a/leena/koe.php?etunimi=leena

http://samarium/12dat1a/leena/koe.php?etunimi=leena&sukunimi=syrjis

Pyynnön lukeminen

Yllä olevan esimerkissä lähetetyt arvot voi vastaanottavassa päässä sijoittaa muuttujien arvoiksi seuraavasti:

if(isset($_GET["etunimi"])) $etunimi = $_GET["etunimi"];

if(isset($_GET["sukunimi"])) $sukunimi = $_GET["sukunimi"];

$_POST

Käyttäjä voi lähettää HTML-sivulta tietoa järjestelmään ainoastaan lomakkeen avulla.

Php-sivu on HTML-lomakkeen käsittelijä ja lomakkeen kentistä tulee name-attribuutin nimiset muuttujat automaattisesti php-sivulle. Kun lomakkeen method-ominaisuus on POST ("jälkeen"), lomakekenttiin voi viitata käyttämällä sitä hyväkseen, sillä informaatio sijoitetaan $_POST-muuttujaan siis $_POST["avain"].

Lomake voi olla joko samassa tiedostossa tai toisessa tiedostossa, action-attribuutti kertoo, mitä tiedostoa kutsutaan, kun submit-painiketta napsautetaan.
superglobaali $_POST

Kuvan tilanteen lomakkeessa on ollut seuraavannimisiä tekstikenttiä: etunimi, sukunimi, osoite, ika, puhelin. PHP-ohjelma pystyy lukemaan ja/tai sijoittamaan niissä olleet arvot muihin muuttujiin, yhteen arvoon viitatataan siis käyttämällä koko taulukon nimeä ja hakasulkujen sisällä kentän avainta (nimeä), esim. $_POST["etunimi"]

Seuraava esimerkki osoittaa, kuinka samaa PHP-tiedostoa voi käyttää sekä lomakkeen tulostamiseen että sen käsittelyyn - lomakkeessa on nimetty kentät avaimilla etunimi ja sukunimi:

lomake.php

<html> <head> <title>Lomakkeen käsittely </head> <body> <h1>Lomakkeen käsittely</h1> <?php // jos muuttuja $_POST-taulukon alkio "sukunimi" on määritelty eikä se ole tyhjä, // tiedot tulevat lomakkeelta if(!empty($_POST["sukunimi"])) //tässä tarkistetaan onko lomake jo lähetetty ja kentät on täytetty { echo "<b>Lomakkeen tiedot</b>:<br>"; $etunimi=$_POST["etunimi"]; $sukunimi=$_POST["sukunimi"]; echo "<p>Etunimi: $etunimi<br>"; echo "Sukunimi: $sukunimi</p>"; } // muussa tapauksessa näytetään lomake else { ?> <form action="lomake.php" method="POST"> <p><b>Täytä lomake</b>:<br> <!-- Kentän nimi määrittelee muuttujan nimen PHP-koodissa --> Etunimi: <input type="text" name="etunimi"><br> Sukunimi: <input type="text" name="sukunimi"><br> <input type="submit" value="Lähetä"> </p> </form> <?php } // ei kannata unohtaa elsen loppusulkua ?>

Muita superglobaaleja muuttujia