sivut.web

ohjeita web-sivuston tekijälle

PHP-opas: Muuttujat

Muuttujatyypit

PHP:ssa on kolmenlaisia muuttujia. Kaikkia niitä merkitään dollarimerkillä ($) ja muuttujan nimellä:

$skalaarimuuttuja
$taulukkomuuttuja
$objekti

Skalaarimuuttujat

Skalaarimuuttujat eli merkkijonomuuttujat ovat muuttujista yksinkertaisimpia. Ne voivat sisältää vain yhden arvon kerrallaan. Esimerkiksi:

$nimi = "Juha-Pekka Järvenpää";
$koodi = 123123;

Taulukot

Taulukot ovat joukkomuuttujia. Taulukossa jokaisella jäsenellä eli alkiolla on indeksi, joka numero tai nimi. Taulukon soluihin päästään käsiksi syntaksilla:

$taulukko[indeksi]

Esimerkiksi:

$taulukko[123] = "Juha-Pekka Järvenpää";
$taulukko["jp"] = 123123;

Objektit

Objektit ovat muuttujia, jotka viittaavat käyttäjän luomaan luokkaan. Luokka on kokoelma jäsenmuuttujia ja -funktioita, jotka muodostavat loogisen kokonaisuuden.

"Henkilö" -luokka voitaisiin luoda seuraavasti:

class henkilo {
	var $nimi;
	var $syntymavuosi;
	var $syntymakuukausi;
	var $syntymapaiva;
	function getSynttaripaiva() {
		return $this->syntymapaiva . "." .
		"." . $this->syntymakuukausi . "." .
		$this->syntymavuosi;
	}
}

"Henkilö" -objektia käytetään tällöin seuraavasti:

$jp = new henkilo;

$jp->nimi = "Juha-Pekka Järvenpää";
$jp->syntymavuosi = 1983;
$jp->syntymakuukausi = 8;
$jp->syntymapaiva = 25;

print $jp->nimi;
print $jp->getSynttaripaiva();

esimerkit/objekti.php
lähdekoodi

Muuttujat PHP:n ulkopuolelta

Eräs PHP:n parhaimmista ominaisuuksista on se, että PHP:n ulkopuolelta tulevaa dataa ei tarvitse erikseen parsia jos sitä haluaa käyttää. PHP parsii automaattisesti kaiken saatavilla olevan datan. Tämä data käsittää HTML-lomakkeista lähetetyn sekä evästeisiin ja ympäristömuuttujiin asetettu data.

GET ja POST

GET ja POST ovat HTTP-protokollan tavat siirtää dataa HTML-lomakkeesta skriptille. GET-metodilla data siirtyy osoitteen mukana, esimerkiksi:

http://www.palvelin.fi/skripti.php?nimi=jp&vastaus=1

POST-metodilla data lähetetään erillään osoitteesta.

Oli metodi kumpi tahansa, PHP parsii lomakkeen kentät PHP:n omiksi muuttujiksi. GET-metodilla lähetetty data parsitaan taulukoksi $_GET ja POST-metodilla lähetetty data taulukoksi $_POST. GET- ja POST-metodeilla lähetettyyn dataan päästään siis käsiksi seuraavasti:

$_GET['muuttujan_nimi']
$_POST['muuttujan_nimi']

Esimerkki lomakkeesta ja skriptistä, jotka käyttävät GET-metodia:

<form action="lomakkeen_kasittelija.php" method="GET">

<input type="text" name="testikentta" value="foobar">
<input type="submit">

</form>
<html>
<head>
<title>lomakkeen käsittelijä</title>
</head>
<body>

<?echo $_GET[testikentta]?>

</body>
</html>

esimerkit/lomake_get.html
lähdekoodi (lomakkeen_kasittelija_get.php)

Sama toteutettuna POST-metodilla:

<form action="lomakkeen_kasittelija.php" method="POST">

<input type="text" name="testikentta" value="foobar">
<input type="submit">

</form>
<html>
<head>
<title>lomakkeen käsittelijä</title>
</head>
<body>

<?echo $_POST[testikentta]?>

</body>
</html>

esimerkit/lomake_post.html
lähdekoodi (lomakkeen_kasittelija_post.php)

Evästeet

Evästeet eli keksit (engl. cookies) ovat palvelimen ehdottamia ja selaimen tallentamia tietueita, jotka selain lähettää takaisin palvelimelle jokaisen sivuhaun yhteydessä hakiessaan lisää dokumentteja samalta palvelimelta.

PHP parsii evästeet $_COOKIE-taulukoksi aivan kuten GET- ja POST-metodien tapauksessa. Evästeet asetetaan SetCookie-funktiolla:

<?

SetCookie("PHPopasKeksi", "sisältö");

?>
<html>
<head>
<title>keksit</title>
</head>
<body>

<p>Tämä skripti asettaa PHPopasKeksi-nimisen evästeen, jonka arvo on "sisältö". Lataa sivu uudelleen niin evästeen sisältö näkyy mikäli selaimesi tukee evästeitä.</p>

<p>Keksin sisältö: <?echo $_COOKIE['PHPopasKeksi']?></p>

</body>
</html>

esimerkit/evasteet.php
lähdekoodi

Huomaa, että selain ei lähetä evästettä takaisin heti kun se on asetettu. Lataa siis skripti kahteen kertaan nähdäksesi evästeen toiminnan. Evästeet tulee luonnollisesti olla päällä selaimessa.

Ympäristömuuttujat

PHP parsii muuttujiksi myös kaikki saatavilla olevat ympäristömuuttujat. Monet käyttöjärjestelmät asettavat omia ympäristömuuttujia yleisille asetuksille ja sitäkin tärkeämmin, lähes kaikki web-palvelinohjelmistot asettavat omia ympäristömuuttujiaan. Näihin muuttujiin voi olla asetettu esim. kävijän IP-osoite

Ympäristömuuttujat voidaan kaivaa esille kahdella eri tavalla: muuttujiksi parsittuina tai getenv-funktiolla. Ero on siinä, että getenv-funktiolla ympäristömuuttujasta saa aina uusimman mahdollisen version.

<html>
<head>
<title>evästeet</title>
</head>
<body>

<p>
$REMOTE_ADDR = <?echo $REMOTE_ADDR?>
</p>

<p>
getenv('REMOTE_ADDR') = <?echo getenv('REMOTE_ADDR')?>
</p>

</body>
</html>

esimerkit/ymparistomuuttujat.php
lähdekoodi

Seuraava sivu: Komentorakenteet.

Tätä sivua viimeksi päivitetty: 4.2.2004


Käyttäjien kommentit

13.10.2003 12:52
kt´sys

Kiitos! Opettavaiset esimerkit. uitenkin, miten asetetaan ja luetaan keksissä useita arvoja? esim (etunimi: Joku, sukunimi: Esimerkki jne...)

17.10.2003 19:06
Juha-Pekka Järvenpää <jp@sivut.org>

Aseta useampi keksi. Yhteen esimerkiksi etu-, toiseen sukunimi.

20.10.2003 16:18
Crazyguy <crazy.guy@pp.inet.fi>

Jos on määrittelemätön muuttuja niin miten siitä saa sen virheilmoituksen pois?

16.6.2004 16:00
oc

Eikö ole mahdollista asettaa evästettä eri tiedostosta kuin mistä se luetaan.

Eli ongelma on se että tarvisi lukea toisesta PHP-tiedostosta asetettu evästeen arvo, toisessa PHP-tiedostossa.

16.6.2004 22:41
Juha-Pekka Järvenpää <jp@sivut.org>

Toki evästeen voi asettaa yhdellä skriptillä ja lukea toisella. Evästeen toiminta-aluetta (scope) voidaan muuttaa.

http://fi.php.net/manual/en/function.setcookie.php

Oletuksena on muistaakseni sama domain-nimi kun evästeen on asettanut, mutta saatan olla väärässäkin.

11.9.2004 23:40
ledzeppelin

Voitko laittaa kävijälaskurin / joka ottaa yhden ip:n vain kerran ja tän kommentti palstan koodit!!

12.9.2004 14:03
Juha-Pekka Järvenpää <jp@sivut.org>

En rupea kirjoittamaan valmista koodia, mutta voin auttaa hieman kuvailemalla skriptin kulkua.

Kävijän yksilöiminen IP-osoitteen perusteella on vähintäänkin arveluttavaa. Moni kävijä voi tulla saman IP:n takaa (esim. NAT:attu firman verkko). Sama kävijä voi tulla monesta eri IP:stä (esim. kotoa ja töistä).

Periaatteessa laskurin tulee pitää kirjaa IP-osoitteista, joista on jo tehty hakuja. Jokaisen haun yhteydessä sitten tarkistetaan, onko kävijän IP jo listassa. Jos on, ei kirjata, jos ei ole, kirjataan yksi käynti ja uusi IP listaan.

Tämän kommenttipalstan sorsia, kuten ei mitään muutakaan skriptiä tältä sivustolta, ei tulla julkaisemaan. Syynä on yksinkertaisesti se, ettei minulla olisi aikaa vastailla niihin liittyviin kysymyksiin. Koodi ei myöskään ole kovin modulaarista tai kaunista. Skriptit on rakennettu yksinomaan tätä sivustoa varten eivätkä suurin osa niistä sovellu kuin todella suurella sovellutuksella toisille sivustoille.

Periaate kommenttiskriptin takana on, että tietokannassa on taulu, jossa on kentät sivun osoitteelle, ajalle, lähettäjälle ja kommenttitekstille. Jokaisen sisältösivun lopussa suoritetaan skripti, joka hakee kyseisen sivun kommentit kronologisessa järjestyksessä ja muotoilee ne järkevään esitysmuotoon.

31.3.2005 16:07
edmundos

Kysyisin et mitä var meinaa tossa phpssä?

31.3.2005 16:07
edmundos

Kysyisin et mitä var meinaa tossa phpssä?

15.4.2005 18:05
muuttuja <GameBeam@luukku.com>

Voisit kertoa vähän ennemmän noista koodien sisä rakenteista...
Eli esim mitä var $muuttuja
mitä toi var tossa meinaa.
Sitten voisit kertoa niille jotka ei tiedä mikä on functio, niin voisin kertoa mikä se functio on.
Muistan itse kun aloittelin ohjelmoinnin/scriptauksen niin et en tiennyt mikä on functio ja se tuotti vaikeuksia...

2.6.2005 18:58
Kisumisu

Mä en nyt oikeen tajuu noita PHP - juttuja.
Et mihi se PHP koodi kirjotetaa. Ons se semmone javascripti tyyliin:

<html><body>

<script language="PHP">
...Jotain...
</srcript>

</body></html>

9.6.2005 19:28
LAlalal <LLALAALLA>

alallala

18.9.2005 16:26
PlayGame

Ei toimi toi POST lähettäjä!

14.11.2005 15:25
jdds

Toi post metodi koodi toimii tälleenkin:
<?php print"muuttuja" ?>

27.6.2006 16:34
Kirkanen <dj_qizmo@hotmail.com>

Olisi sellainen ongelma, et täytyy saada lähetettyä tiedon sivulta toiselle muuttujassa. Homma olisi muuten helppo, mut täytyy submit toiminnon laittaa kuvaan. Tarkasti kerrottuna ongelma on seuraavanlainen:

Ensimmäisellä sivulla on valittavana kolme eri kieltä ja klikkaamalla lippua/tekstiä pitäisi avautua tietokanta valitulla kielellä. Miten tiedon lähetys onnistuu pelkkää lippua/tekstiä painamalla?

28.6.2006 00:47
Kirkanen <dj_qizmo@hotmail.com>

Ongelma ratkesi kovalla yrityksellä. Annan vastauksen, jotta vastaisuudessa apua tarvitsevat saavat vastauksen heti. :-D

"Etusivun" pätkät:

<form action="sivu.php" method="post">
<input type="image" src="kuva.gif" name="lang" value="en"></input>
</form>


sivu.php:

<?
$lang = "$_POST[lang]";

if ($lang == "en")
{
$title = "English";
}

echo
'<html>
<head>
<title>'.$title.'</title>
</head>
</html>';
?>

18.7.2007 16:45
Violet <Reidar@netti.fi>

Hei!

En oikein ymmärtänyt tuota lomaketta. Kokeilin sekä post- että get-tyyleillä, mutten onnistunut. Sivut löytyvät osoitteesta http://www.freewebs.com/virtuaalik/lomake.htm
Osaisitko neuvoa minua tai tehdä minulle valmiin koodin?

8.2.2008 13:27
googlesta

geocities ei tainnut tukea php:tä. Kokeile tripodia

(mikrobitin sivuilta löytyi tietoa onko joissakin sivuilla php-tuki, katso googlesta).

Lisää oma kommentti


Juha-Pekka Järvenpää
jp@sivut.org
http://www.jarvenpaa.net/