HUOM! Voit itse lisätä ja muuttaa sisältöä muokkaa-painikkeiden avulla

 Olet itse vastuussa tämän teoksen käytöstä aiheutuvista vahingoista Lue lisää.

PHP

Kohteesta Wikikko - kansan taitopankki
Loikkaa: valikkoon, hakuun

php-ohjelmointi, php-ohjelmointiopas

Sisällysluettelo

Yleistä[muokkaa]

PHP on skriptiohjelmointikieli jota käytetään ja kehitetään aktiivisesti. Useat dynaamiset web-käyttöiset sovellukset kirjoitetaan PHP:llä. Sillä kirjoitettuja tai osittain ovat esimerkiksi Drupal, osittain Facebook, MediaWiki ja Magento. Vaikka sen pääpaino on web-käytössä, se soveltuu myös tavanomaiseen ohjelmointiin. Wikikko sisältää useamman PHP-sivun. Tämä on aloitus- ja pääsivu, josta on myös linkkejä muille sivuille. Jokainen sivu on luettavissa itsenäisesti, mutta tällä sivulla on PHP:n alkeet ja muilla kehittyneempiä toimia. Sivustolla useat hakemistopolut ovat paikallisen OS X -laitteen polkuja, muuta ne tarpeen mukaan Linux, Windows- tai palvelimen käyttämän käyttöjärjestelmän poluiksi.

Toimintaperiaate[muokkaa]

Kirjoittaessa verkkoselaimen osoiteriville osoite, selain lähettää sen internetissä palvelimelle, josta löytyy kyseiseen osoitteeseen liitetty kotisivusto. Jos kyseessä on php-sivu, palvelin rakentaa tilanteeseen vaadittavan kiinteästi muotoillun html-sivun ja palauttaa sen käyttäjän selaimeen luettavaksi. Toisin sanoen sivustoon on voitu ohjelmoida, että palvelin muotoilee kuhunkin tilanteeseen sopivan nk. dynaamisen sivun, jonka se palauttaa kiinteänä html-sivuna käyttäjän selaimeen. Tämä dynaaminen sivusto muodostetaan PHP-ohjelmointikielen avulla esimerkiksi käyttäjän palvelimelle lähettämien pyyntöjen mukaisesti tai käyttäjän oman profiilin ja sivuston asiemman käytön perusteella. Jos katsotaan php-koodia palvelimella, siellä ohjelmointikielellä kirjoitettuna oleva lauseke on muodossa <?php echo "Teksti" ?>, kun taas katsottaessa html-tiedostoa verkkoselaimen lähdekoodina sama teksti näkyy: Teksti ja tulostuu nettisivulle samoin: Teksti.

PHP-sivun tunnistaa .html -tiedostopäätteen sijaan .php -päätteestä. PHP-koodia voi olla myös html-koodin seassa ja se on ainoastaan palvelimen käytettävissä. Käyttäjän verkkoselain ei siis suorita PHP:tä vaikka käyttäjällä olisikin asennettuna PHP omaan laitteeseen. Sen sijaan käyttäjän verkkoselain voi itsenäisesti suorittaa JavaScriptiä jos käyttäjä on sen asentanut/sallinut. Jos php-tiedostopääte sisältää numeroita, nämä kertovat PHP:n versionumeron.

Wikikon muita ohjelmointikielioppaita[muokkaa]

Ohjelmoinnista on yleisesti ja tarkemmin kirjoitettu sivulla Python ja tämä sivusto tukeutuu joiltain osin kyseisen sivuston laajempiin selvityksiin esimerkiksi yleisesti ohjelmointiin liittyvissä kysymyksissä.

PHP liittyviä ohjeita[muokkaa]

Englannin kielen sanastoa[muokkaa]

{ } curly braces, ( ) parentheses
Syntactic sugar - mikä tekee jotain helpommaksi

Lataus ja asennus[muokkaa]

PHP on käytettävissä esimerkiksi Mac OS X, Linux, Windows -käyttöjärjestelmille. Katso aiheesta oma sivu PHP asennus.

  • Tällöin esim. php-tiedostoa muokkaa jollain editorilla, tallentaa muokkauksen cmd-s ja päivittää selaimen ruudun cmd-r, jossa on auki sivu localhost/tiedostonnimi.php
  • Toimii myös jos on esim. Cyberduck yhteydessä internetissä olevaan palvelimeen ja siihen on yhdistetty esim. Xcode-editori. Tällöin esim. php-tiedostoa muokkaa editorilla, tallentaa muokkauksen cmd-s ja päivittää selaimen ruudun cmd-r, jossa on auki kyseinen sivu, vaikka esim. WordPressin lisäosan tulostama sivu.

Ohjelmien kierjoittaminen[muokkaa]

Ohjelma voidaan kirjoittaa esimerkiksi cPanelin editorilla suoraan palvelimen tiedostojärjestelmässä tai TexTurilla, Notepadilla, Xcodella, Emacs:lla, Pääte-ohjelmien tekstieditoreilla (esim. nano, vi) ja muilla vastaavilla. On hyödyllistä käyttää, ainakin aloittelijan, ohjelmia jotka esimerkiksi värjäävät koodin eri osia ja huolehtivat sisennyksistä.

  • ( ), { }, " ", ' ' käytetään pareina. Yksi vaihtoehto on painaa se peräkkäin samalla kertaa, niin ei unohdu. Ohjelmointiin tarkoitetut editorit kyllä osaavat myös muistaa ja ehdottaa.
  • Yleinen sisennys on neljä välilyöntiä tai yksi sarkaimen painallus, mikä on määritelty neljäksi välilyönniksi.

PEAR[muokkaa]

https://pear.php.net

PEAR on jakelukanava laadukkaille PHP-skripteille

PHP ja Xcode[muokkaa]

Jos haluat käyttöösi yli 5 000 php ohjelmointia helpottavaa "snippetsiä" Xcodessa:

  • https://github.com/tonyjohnston/PHP-Xcode-Autocomplete
  • lataa oikeasta reunasta Download ZIP
  • avaa Finderissa käyttäjänimesi mukainen hakemisto, avaa ruudun yläreunasta Siirry-valikko ja paina alt-pohjaan. Valitse valikkoon nyt ilmestyvä Kirjasto.
  • siirrä tai kopioi lataamasi zip-tiedostosta löytyvä hakemisto CodeSnippets hakemistoon Kirjasto/Developer/Xcode/UserData
  • käynnistä Xcode tai jos se on päällä sammuta ja käynnistä uudelleen
  • avaa php-tiedosto
  • nyt kun kirjoitat php-riviä ohjelma ehdottaa automaattisesti. Aina Xcoden avaamisen jälkeen Xcode saattaa pyörittää jonkin aikaa toimimattomana ottaessaa nämä käyttöön.
  • Xcoden asetuksista kannattaa klikata rivinumerot päälle, niin selaimen virheilmoitus osoittaa suoraan kyseiselle riville.

Ohjelmien ajaminen[muokkaa]

Yksinkertaisimmillaan .php -päätteinen tiedosto tallennetaan siihen hakemistoon johon selain suorittaa haun kun siihen viitataan selaimen osoiterivillä sisällyttäen tiedostonimeen .php -pääte. Esim. www.omadomain.fi/omatskriptit/tiedostonimi.php tai jos php:n ajaa "kotikoneella" OS X-käyttöjärjestelmässä, niin http://localhost/omatskriptit/tiedostonimi.php tai http://localhost/~käyttäjänimi/omatskriptit/tiedostonimi.php Vain tiedostot, jotka sisältävät php-tiedostopäätteen saavat PHP-tulkin käsittelyn.

PHP-internetsivun runkomallit[muokkaa]

Tällä sivulla esitetyt esimerkit sijoitetaan esimerkiksi oheiseen runkoon kohtaan php koodi tähän, jolloin niitä voidaan testata selaimessa. Tässä siis html- ja php-koodia on .php-tiedostossa sekaisin. Tallenna tiedosto päätteellä .php

<?php echo '<?xml version="1.0" encoding="ISO-8859-1"?>'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>Sivun otsikko tähän</title>
        <script>
        MAHDOLLINEN JAVASCRIPT TÄHÄN
        </script>
    </head>
    <body>
    PHP-KOODI TÄHÄN 
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
    <title>Sivun otsikko tähän</title>
        <link type='text/css' rel='stylesheet' href='style.css'/>
    </head>
	<body>
          <p>
          <?php
            PHP-KOODI TÄHÄN
          ?>
          </p>
       </body>
</html>

PHP:n sisällä[muokkaa]

Html-koodia voi tulostaa echo -komennolla php-tagien sisällä, joten ei välttämättä ole tultava ulos php-koodista. Jotta verkkosivu voi tulostaa näkyville PHP:n suorittamat, käyttäjän ohjelmoimien toimenpiteiden tulokset, ne tulee muuttaa HTML-kieleksi. Kyseessähän on ilmiö, jossa php muodostaa html-koodia eli toista tiedostoa, joka näytetään selaimessa ja tulostetaan vasta silloin näytölle. Verrattuna edelliseen otsikkoon "runkomallit", tässä .php-tiedostossa on vain php-koodia, jonka sisällä on siis html-koodia.

<?php
    echo "<html>";
    echo "<head>";
    echo "<title>Sivun otsikko tähän</title>";
    echo "</head>";
    echo <body>";
    $muuttuja = 1;    // Tämä on PHP-kieltä, jota ei tulosteta selaimessa.
    echo "<p>Muuttujan arvo on: " . $muuttuja . "</p>";    // Tulostaa Muuttujan arvo on: 1
    echo "</body>";
    echo "</html>";
?>
<p>Tämä tulostuu html-koodina</p>
<?php
    echo "<p>Tämä tulostuu php-koodista</p>";
?>

Huomioitavaa ja vinkkejä[muokkaa]

  • syntaksin perusmuoto on
<?php 
PHP-KOODI TÄHÄN 
?> 

Sitä kutsutaan myös elementiksi. Niiden sijoittelu on vapaa xhtml-koodin seassa. Syntaksia voidaan käyttää vain yhtenä rivinä html-koodin seassa tai sisällyttää tuhansia rivejä niiden väliin.

  • <? toiminto tähän ?> saattaa riittää ilman php-sanaa, jos php.ini tiedostossa tämä muoto otettu käyttöön.
  • <?="Muuttujan arvo on " . $muuttuja;?> // Tulostaa muuttujan arvon.
  • Muuttujan arvo on <?=$muuttuja;?>

    // Tulostaa muuttujan arvon.
  • Osassa ohjelmointistandardeja kehoitetaan jättämään viimeinen ?> pois, koska se saattaa aiheuttaa joillain palvelimilla ongelmia.
  • Lohko merkitään { } -merkeillä. OS X:ssa paina shift-alt-8 tai 9
  • Komennon jälkeen laitetaan puolipiste (;), jolloin koodia voidaan jatkaa seuraavalle riville.
<?php print("Teksti1");    // Tässä tarvitaan
    print("Teksti2")    // Tässä ei tarvita
?>
    • yleinen virhe on unohtaa rivin lopusta puolipiste, jolloin tulostuu esimerkiksi Parse error.

Kommentointi[muokkaa]

Kommentointi helpottaa ohjelman ylläpitoa. PHP:ssä kommentti alkaa // tai # -merkeillä. Esimerkiksi // Kommentti tähän tai # Kommentti tähän. Useampi rivi kommentoidaan /* kommentti rivit tähän */ eli samalla tavalla kuim CSS:ssä. Huomaa että tämä toimii vain <?php .. ?> elementin sisäpuolella. Muutoin kommentti tulostuu html-sivulle.

  • Html-kommentti alkaa <!-- kommentti tähän --> ja kommentti voi olla useammalla rivillä. Tämä ei tulostu html-sivua suoritettaessa.
  • Käytettäessä määrämuotoista kommentointia, on olemassa ohjelmia, jotka automaattisesti poimivat ohjeet koodista luettavaksi ilman tiedoston avaamista. Tällainen tehdään esimerkiksi /** kommentti rivit tähän */

Tietotyypit ja muuttujat[muokkaa]

  • Tietotyyppeihin (datatype) sijoitetaan arvoja, joita voidaan siirrellä tilanteesta toiseen. Niitä on useita erilaisia.
  • Nimi (identifier) ei voi alkaa numerolla. Nimeämistapa koskee muuttujia, funktioita ja käyttäjän määrittelemiä olioita. Nimi on kirjasinkokosensitiivinen ja voi sisältää ASCII merkit väliltä 127-255. Esim. muuttuja, muuttuja1, muuttuja_yksi, _MuuTTuja, Muuttuja. Nimi ei voi olla sama kuin PHP-kielen avainsanat.
  • Scope ("ulottuvuus")
    • Paikalliset muuttujat (local variables): Esim. funktiossa määritelty muuttuja on käytössä vain kyseisen funktion sisällä eli { } -merkkien rajaamilla riveillä. Funktiosta poistuttaessa, funktiossa käytetyt muuttujat arvoineen tuhoutuvat! Eli funktion sisällä oleva saman niminen muuttuja ja funktion ulkopuolella oleva saman niminen muuttuja eivät ole sama asia.
    • Funktiomuuttujat (function parameters).
      • function funktionimi($muuttuja) { //Tässä funktion parametrit "declared" sulkumerkkien sisäpuolella.
    • Globaalit muuttujat (global variables): Vastakohtana paikallisiin muuttujiin, näitä voidaan käyttää kaikkialla ohjelmassa. Mutta ole varovainen, nämä voivat saada aikaan yllätyksiä, kun unohtuu niiden globaalisuus.
$muuttuja = 1;    // muuttujan lähtöarvo on 1
function funktionnimi() {
    global $muuttuja;    // muunnetaan funktion sisäpuolella ulkopuolella jo määritelty muuttuja globaaliksi
    $muuttuja++; }   // lisätään muuttujaan 1 (arvo on nyt 2)
funktionnimi();    // kutsutaan funktiota funktion ulkopuolella
$muuttuja++;    // lisätään muuttujaan 1 funktion ulkopuolella (arvo on nyt 3)
echo $muuttuja;    // tulostuu 3

Vaihtoehto 2:
$muuttuja = 1;    // muuttujan lähtöarvo on 1
function funktionnimi() {
    $GLOBALS["muuttuja"]++;
...
    • Staattiset muutujat (static variables): Muuttuja ei menetä arvoaan poistuttaessa funktiosta.
function funktionnimi() {
    static $muuttuja = 1;    // tehdään muuttujasta staattinen
    $muuttuja++;    // muutetaan muuttujan arvoa
    echo $muuttuja; }
funktionnimi();     // tulostaa 2
funktionnimi();     // tulostaa 3
    • Superglobaalit muuttujat (superglobal variables): Muuttujia, jotka sisältyvät PHP:hen. Niistä voi hakea paljon eri tietoa ympäristöön liittyen. $_SERVER kts. esim. https://www.w3.org/CGI Seuraavat skriptit tulostavat käytettävissä olevat superglobaalit:
foreach ($_SERVER as $var => $value) { echo "$var => $value <br />"; }    // Palvelin-muuttujat
foreach ($GLOBALS as $var => $value) { echo "$var => $value <br />"; }    // Globaalit muuttujat
foreach ($_REQUEST as $var => $value) { echo "$var => $value <br />"; }    // GET, POST, eväste
foreach ($_SESSION as $var => $value) { echo "$var => $value <br />"; }

Yksittäinen:
printf("Yksi superglobaaleista: %s", $_SERVER['REQUEST_URI']);
  • $_GET Hakee selaimen osoiterivillä annetun muuttujan arvon
echo $_GET['muuttuja'];
http://www.gtwethlkjfgsdgs.fi/tiedostonimi.html?muuttuja=1    // tulostaa 1
  • $_POST Hakee internetsivulla lomakkeeseen POST-metodilla syötettyjä arvoja.
<html>
<body>
    <form action="tiedostonimi.php" method="post">
    <input type="text" name="kentannimi" size="10" value="Kirjoita jotain" />
    <input type="submit" value="Lähetäpainike" />
    </form>
</body>
</html>
<?php
    echo $_POST['kentannimi'];


  • Tavanomainen muuttuja (variable) aloitetaan $-merkillä, esimerkiksi $muuttuja.
  • Vakio määritellään define-funktiolla ja se voi olla luku, merkkijono tai boolean.
    • define("VAKIONNIMI", "Teksti1");
    • define(PII), 3.1416);
    • define("VAKIONIMI", True); //Arvo on True:lla 1 ja Falsella 0 (tyhjä).
  • Scalar-tietotyypit
    • boolean -arvo: totuus, joka on True (1, -1, 5) tai False (0) (kirjaisinkoolla ei ole väliä).
      • $muuttuja = "-5.5"; if ($muuttuja) echo "Tosi on."; //Tulostaa Tosi on.
    • kokonaisluku (integer), esimerkiksi 10 tai -10 tai heksaluvut
    • liukuluku (float), esimerkiksi 10.50 Huomaa että välissä on piste eikä pilkku.
      • $muuttuja = 5.5e3; // 5500
    • merkkijono (string), esimerkiksi "Teksti" tai 'Teksti' tai "10" Laskutoimituksia voi tehdä suoraan merkkijonoissa olevilla luvuilla koska merkkijonot laskutoimitusoperaattorin ympärillä muutetaan automaattisesti luvuiksi ja jos luvuksi muutosta ei voi tehdä se muutetaan nollaksi. Voidaan käyttää sekä ' ' tai " ".
      • $muuttuja = 1.7; $muuttuja2 = "1.5 lammasta"; $muuttuja += $muuttuja2; //Tulos 3.2. Vain kun teksti alkaa luvulla, muutoin teksti on 0.
  • Compound-tietotyypit
    • taulukko (array). Kts. aiheesta oma otsikko.
    • olio (object)
  • null -muuttuja ei sisällä arvoa. Ei ennalta annettua arvoa, erityisesti annettu arvo null, poistettu arvo unset() -funktiolla.
    • $muuttuja = Null;
  • resource.
  • is_array(), is_bool(), is_float(), is_integer(), is_null(), is_numeric(), is_object(), is_resource(), is_scalar(). Palauttaa true tai false
    • $muuttuja = 1; printf("Onko muuttuja arvoltaan $muuttuja objekti? %d", is_object()); //Tulostaa 0 eli ei ole.
    • if(is_int ( $muuttuja )){ //Testaa onko muuttuja kokonaisluku.
  • Tietotyyppien muuttaminen
    • Type Casting: (array), (bool), (boolean), (int), (integer), (object), (real), (double), (float), (string)
      • $muuttuja2 = (int) $muuttuja1; //Tietotyypin tilapäinen muuttaminen, muuttuja2 saa muuttuja1:n arvon kokonaislukuna.
      • $muuttuja = (int) 50.75; //Pyöristää alaspäin eli 50
      • $muuttuja = (int) "Teksti"; //Tulos on 0
      • $objekti = (object) "Teksti"; //Tekstistä tulle objektin attribuutti.
    • Pysyvä muuttaminen: array, boolean, float, integer, null, object, string. Onnistuneesta muutoksesta palautuu true, epäonnistuneesta false.
      • $muuttuja = 5.5; settype($muuttuja, integer); // 5
      • settype($muuttuja, "integer" );
    • Kertoo muuttujan tyypin: array, boolean, double, integer, object, resource, string, unknown
      • $muuttuja = "5.5e3"; echo gettype($muuttuja); // string

Sijoituslauseet (muuttujat)[muokkaa]

Tallennetaan merkkijono tai numero

  • $muuttuja = 10; //Kokonaislukuna (number).
  • $muuttuja = 1 + "1"; // 2
  • $muuttuja = "10"; //Merkkijonona (string).
  • $muuttuja = "Teksti";
  • $muuttuja .= " jatkuu"; //Lisää sanan jatkuu ennestään olemassa olevan muuttujan loppuun.
  • $muuttuja = sprintf("€%.2f", 10.1); //Sijoitetaan muuttujaan arvo €10.10
  • print $muuttuja++; //Tulostaa muuttujan arvon ja lisää vasta sen jälkeen arvoa yhdellä.
  • print ++$muuttuja; //Lisää muuttujan arvoa yhdellä ja tulostaa korotetun arvon.
  • $muuttuja++ on sama kuin $muuttuja = $muuttuja + 1
  • muuttuja voidaan sijoittaa useammalle riville. Tällöin käytetään jotain itse keksittyä merkintää alussa ja lopussa. Merkinnän on oltava samoin kirjoitettu alkuun ja loppuun. Loppumerkin pitää alkaa aivan rivin alusta.
    $muuttuja = <<<JOUTSEN
    Rivi 1
    Rivi 2
JOUTSEN;
  • Reference ("viittaus"): Muuttujat laitetaan viittaamaan samaan arvoon eli kun jonkun tällaisen muuttujan arvoa muutetaan, niin toisenkin arvo muuttuu automaattisesti. Kaksi merkintätapaa:
$muuttuja2 =& $muuttuja1;
$muuttuja2 = &$muuttuja1;

$muuttuja1 = "Teksti1";
$muuttuja2 =& $muuttuja1; echo $muuttuja1 . " ja " . $muuttuja2;    //Teksti1 ja Teksti1
$muuttuja2 = "Teksti2"; echo $muuttuja1 . " ja " . $muuttuja2;    //Teksti2 ja Teksti2
$muuttuja1 = "Teksti1"; echo $muuttuja1 . " ja " . $muuttuja2;    //Teksti1 ja Teksti1

Operaattorit[muokkaa]

  • Comparison operators: < > <> (erisuuri kuin) <= >= == === (yhtäsuuri ja sama tietotyyppi) != (erisuuri kuin) !== (erisuuri kuin tai eri tietotyyppi)
  • and eli &&
  • or eli || tosi kun jompi kumpi on tosi tai molemmat
  • xor tosi kun jompi kumpi on tosi mutta ei molemmat
  •  !$muuttuja tosi kun muuttuja on epätosi
  • if (strcmp($muuttuja1, $muuttuja2)){ //Vertailee merkkijonoja.

Taulukko[muokkaa]

Taulukko voi sisältää erilaisia tietotyyppejä ja myös toisia taulukoita. Ts. yksi muuttuja sisältää useita "asioita". Array() on funktio. Arvot tallennetaan taulukkoon sitomalla ne kiinni avaimeen, esim. väri - punainen tai 1 - punainen.

  • Taulukoita on
  1. Kokonaisluku ("avain") viittaa arvoon, esim. 1 - punainen
  2. Avain viittaa arvoon, esim. väri => punainen

Taulukon määrittely[muokkaa]

  • Taulukon määrittely tapahtuu $taulukko[] tai array().
    • Tyhjä taulukko saadaan aikaiseksi $muuttuja = array();
    • $taulukko = array(5, "Aasi", 'Hevonen'); // Kokonaislukuja ja merkkijonoja arvoina.
    • $taulukko[] = (5, "Aasi");
      • edellisessä avain 5 on 0 ja Aasi on 1.
  • $taulukko10[] = "Teksti1"; // Perustetaan taulukko nimeltään taulukko10, jonka ensimmäisen alkion (0) arvoksi asetetaan Teksti1.
  • $taulukko10[] = "Teksti2"; // Lisätään edelliseen taulukko10:een seuraava alkio (1) jonka arvoksi asetetaan Teksti2.
  • array_push($taulukko, 10); // Lisätään taulukkoon seuraava alkio jonka arvo on 10.
  • array_push($taulukko, "Lisättävä teksti"); // Lisätään taulukkoon seuraava alkio jonka arvo on Lisättävä teksti.
  • echo $taulukko[1]; // Tulostetaan taulukon toinen alkio (1).
  • print ( $taulukko[1] ); // Tulostetaan taulukon toinen alkio (1).
    • ei ole väliä käytetäänkö () tai {} kun taulukosta haetaan tietoa.
  • print join(", ", $taulukko); // Tulostaa taulukon avaimet pilkulla erottaen.
  • print count($taulukko); // Tulostetaan alkioiden (elements) lukumäärä.
  • sort($taulukko); // Järjestetään taulukko nousevaan järjestykseen.
  • rsort($taulukko); // Järjestetään taulukko laskevaan järjestykseen.
  • Avaimen poistaminen:
    • unset($array[avainnumero]);
    • unset ( $taulukko[1] ); // Poistaa järjestyksessä toisen alkion.
    • unset ( $taulukko["Avain1"] ); // Poistaa avaimen nimeltä Avain1.
    • unset($array); // Tyhjennetään koko taulukko
    • alkioiden poistaminen taulukosta numeroa käyttäen poistaa kyseisen alkion, mutta ei uudelleenindeksoi taulukkoa.


  • Map, "associative-taulukko" on taulukko, jossa kokonaislukujen sijaan avaimina käytetään erikseen nimettyjä avaimia. Taulukko siis koostuu avaimista (eivät ole pakollisia) ja niiden arvoista, jotka määritellään merkinnällä =>.
  • Jos avaimia ei määritellä, PHP antaa niille järjestyksessä numeron alkaen nollasta. Esimerkiksi jos taulukossa on kymmenen avaimella merkittyä alkiota aluksi ja 11. alkiolla ei ole avainta niin sen alkion numero on 0 eikä 11.
  • Avaimen muuttaminen: $taulukko[avainnumero] = "uusi arvo";
    • $taulukko["Avain1"] = "Teksti3"; // Lisätään taulukkoon alkio jonka avain on Avain1 ja sen arvo Teksti3.
    $taulukko = array("avain1" => "Teksti1", "avain2" => 10, "Teksti2", 5 );
    print ($taulukko["avain2"].$taulu1[1].$taulu1["avain1"].$taulu1[0]);    //Tulostaa 105Teksti1Teksti2

    $taulukko = array('avain1' => arvo1,
                        'avain2' => 10);
    echo $taulukko['avain2'];    // Tulostaa 10
    print ( $taulukko[Avain2] );   // Tulostaa 10
  • Taulukko toisen taulukon sisällä (multidimensional array).
    $taulukko = array(array('taulukko4', 4),
                       array('taulukko6', 6));
    echo $taulukko[1][0];  // 1 viittaa taulukkoon6 ja 0 viittaa kutoseen eli tulostaa 6

Taulukon käsittely for, while, foreach[muokkaa]

Taulukon arvot voidaan hakea kuten edellä on kerrottu. Esim. $taulunimi[avainnimi] tai sitten silmukalla.

  • jos avaimet ovat oletusnumerojärjestyksessä, ne voidaan käsitellä for ja while -silmukoilla ja foreach -komennolla.
  • FOR. For soveltuu erityisesti kun halutaan suorittaa joku etukäteen tiedetty määrä kertaa.
for($i = 0; ehto; lisäys) { mitä suoritetaan }
    $taulukko = array("Teksti1", "10", "Teksti2");
    for($i = 0; $i < count($taulukko); $i ++) {    // Aina selvitettävä taulukon pituus
        echo $taulukko[$i] . '<br/>';
    }
  • FOR - BREAK - CONTINUE eli askeltava toisto
    • BREAK pysäyttää toiston. Jos kirjoitetaan break ja jokin kokonaisluku, esimerkiksi break 5, niin se tarkoittaa että esimerkiksi testattaessa ehtolausekkeella viidenneksi sisimmässä silmukassa jotain muuttujaa ja arvo on tosi, niin viidennestä silmukasta hypätään täysin ulos. Kun taas pelkkä break toisi vain viidennestä neljänteen.
    • CONTINUE pysäyttää meneillään olevan kierroksen ja siirtyy seuraavalle kierrokselle.
//Lukumääräinen silmukka: 5 kertaa toistava silmukka.
    for($muuttuja = 0; $muuttuja < 5; $muuttuja++) {
        print ("Numero $muuttuja<br>");
    }
  • WHILE. Ei tiedetä etukäteen kuinka monta kertaa toistetaan. Toistaa kunnes asetettu ehto täyttyy eli true. Ehdon tarkastus tehdään ennen jotain tehtävää, eli tehtävää ei välttämättä tehdä yhtään kertaan. Muista poistua silmukasta (infinite loop)!
while(ehto) { mitä tehdään }
while ($muuttuja) kunnes $muuttuja on true
Tulostetaan while-silmukalla käyttäen current() ja next() -funktioita
    $taulukko = array("Avain1" => "Teksti1", "Avain2" => 10, 50, 100);
    while ($muuttuja = current($taulukko))
    {
        print(key($taulukko).": ".$muuttuja."<br/>");
        next($taulukko);
    }
  • ENDWHILE. Kuin while, mutta ei käytetä { }
    while(ehto):
        mitä tehdään
    endwhile;
  • DO WHILE. Ehdon tarkastus tehdään jälkeen jonkun tehtävän eli tehtävä suoritetaan vähintään yhden kerran. Ehdon tulos on true tai false.
    $i = 0; // esimerkiksi tätä voidaan käyttää lisänä alussa. 
    do { 
           tehdään jotain
    } while (ehto); // esimerkiksi while ($i > 0); suorittaa vain yhden kerran
  • WHILE - BREAK - CONTINUE
//Alkuehtoinen silmukka: 5 kertaa toistava silmukka.
    $muuttuja = 0;
    while($muuttuja < 5){
        print ( "Teksti<br>" );
        $muuttuja++;
    }

// Loppuehtoinen silmukka: 5 kertaa toistava silmukka.
    $muuttuja = 0;
    do{
        print ( "Teksti<br>" );
        $muuttuja++;
    }while($muuttuja < 5);
  • jos avaimet eivät ole oletusnumerojärjestyksessä, käytetään foreach() -komentoa. Se käy läpi kaikki avaimet.
  • FOREACH
     $taulukko = array("Teksti1", "Avain1" => "Arvo2");
     foreach($taulukko as $muuttuja) {
         echo $muuttuja;    // Tulostaa Teksti1 Arvo2
     }

    $taulukko = array('avain1' => 'arvo1',
                        'avain2' => 10,
                        'avain3' => 'arvo3');
     foreach ($taulukko as $avain=>$arvo) {
        echo $avain . ': ' . $arvo . '<br />';    // Tulostaa omille riveilleen avain1: arvo1 avain2: 10 avain3: arvo3
      }

Tapaus SWITCH, CASE[muokkaa]

  • switch arvon mukaan siirrytään sen mukaiseen tapaukseen (case). Break -komento lopettaa tapauksen ja jos se puuttuu tehdään seuraava tapaus kunnes tulee break tai tapaukset loppuvat. Default suoritetaan jos ei löydy kyseistä tapausnumeroa.
  • switch ($muuttuja{6}) voidaan poimia merkkijonosta jokin tietty merkki ja sen mukaan toimia. Esimerkiksi henkilötunnuksen -, +, A -mukaan oma case.
    switch(10){
        case 0:
        case 1:
            print("Tapaus 1");
            break;
        case 10:
            print("Tapaus 10");   //Toteutetaan vain tämä.
            break;
        default:
            echo "Tapaus joku muu";
    }
    $muuttuja = 2;
    switch ($muuttuja) {
        case 1:
        case 2:
        case 3:
    echo 'Muuttuja on välillä 1, 2 tai 3.';
    break;
    default:
        echo 'Muuttuja on suurempi kuin 3.';
    }
  • endswitch (ilman { } -merkkejä)
    switch(10):
        case 1:
            print("Tapaus 1");
            break;
        default:
            echo "Tapaus joku muu";
    endswitch;

Tulostus[muokkaa]

  • echo hiukan nopeampi kuin print.
  • echo "Teksti"; //Print -komennon sijaan voidaan käyttää echo
echo '<b>Lihavoitua tekstiä ja rivinvaihto</b><br>';
  • echo $muuttuja1, " ja ", $muuttuja2;
  • echo "$muuttuja1 ja $muuttuja2";
  • echo "

    Muutujan sisältö on {$muuttuja1}

    ";
  • echo "Muuttujan arvo on $muuttuja";
  • print ("Teksti");
  • echo "
    "; // Rivinvaihto
  • echo 5 * 6;
  • <?="Teksti";?>
  • print $muuttuja;
  • print $muuttuja1+$muuttuja2;
  • print "Teksti".$muuttuja1.$muuttuja2; //Tekstiä ja muuttujia yhdistetään pisteellä toisiinsa. Tämä tulostaa kaikki yhteen pötköön.
  • $muuttuja = 'abcdef'; echo 'Kolmas kirjain on ', $muuttuja{2}; //Poimitaan kaarisulkeilla merkkijonosta kolmas arvo.
  • $muuttuja = 'abcdef'; echo substr($muuttuja, 2, 2); //Poimitaan kirjaimet cd merkkijonosta.
  • $satunnaismerkkijono = substr(md5(microtime()),0,10); //Satunnainen 10 merkin merkkijono.
  • printf() tulos kohdistuu selaimelle tulostuvaan tekstiin.
    • printf("%d astetta", -50); //Tulostaa -50 astetta
    • printf("%d euroa mutta tarkasti €%f", 50, 50.3265);
    • printf("Pyöristettynä kahteen desimaaliin %.2f", 50.3265);
    • $muuttuja = 1; printf("Onko muuttuja arvoltaan $muuttuja objekti? %d", is_object()); //Tarvittaessa /$muuttuja
      • \ (shift-alt-7) eli backslash tulostaa esim. muuttujan edessä olevan $-merkin eli printf("\$muuttuja"); //Tulostaa $muuttuja
      •  %b binäärinumero, %c merkkijono jota vastaa ASCII-arvo, %d etumerkillinen desimaali, %f liukuluku, %o oktaali, %s merkkijono, %u etumerkitön desimaali, %x heksa pienellä, %X heksa suurella.
    • printf("%2\$s ensin", "kaksi", "yksi"); //Numero määrää järjestystä.
  • sprintf() tulos kohdistuu muuttujaan.
    • $muuttuja = sprintf("€%.2f", 50); // $muuttuja = €50.00


  • heittomerkeissä ( ' ' ) olevaa muuttujan arvoa ei tulosteta.
  • lainausmerkeissä ( " " ) olevan muuttujan arvo tulostetaan.
    • <?php print ( "Muuttujan arvo on: $muuttuja" ) ?>
  • \n on rivinvaihto (OS X:ssa shift-alt-7). \n ei välttämättä toimi kuitenkaan selaimessa. Ilmeisesti HTML hylkää sen. Käytä tällöin br/ kuten oheisessa esimerkissä:
print ($taulukko['kentta']."<br/>");
  • print var_dump($muuttuja); //Tulostaa muuttujan tietotyypin ja arvon.

Suomen kielen yksikkö ja monikko[muokkaa]

    $muuttuja1 = "Arvoja";
    if ($muuttuja1 == 1) {
        $muuttuja1 = "Arvo";
	}
    echo "{$muuttuja1} oli {$muuttuja1}.";

Aliohjelmat ja funktiot[muokkaa]

Funktio on "pieni ohjelma" varsinaisen ohjelman sisällä. Funktiot ovat olioita. Funktio voi sijaita samassa php-tiedostossa myös myöhemmin kuin sen kutsu tai toisessa tiedostossa eli funktioita voidaan käyttää koko ohjelmassa. PHP sisältää paljon olemassa olevia funktioita ja jos ohjelmoit lisäosaa esimerkiksi WordPressiin (WP), voit käyttää WP:n funktioita. Tiestysti ohjelmoit myös omia funktioita kun tarvitset samaa toimintoa useamman kerran.

Funktion kutsuminen[muokkaa]

Olemassa olevan funktion kutsuminen.

Funktiota kutsutaan esim. $funktionimi(); tai $muuttuja = funktionimi(lähetettäväarvo); tai $muuttuja = funktionimi($muuttuja2);
  • funktiolle voidaan lähettää yksi tai useampi arvo riippuen siitä miten funktio on ohjelmoitu.
  • kiinteä oletusarvo voidaan sijoittaa funktioon esimerkiksi seuraavasti: function funktionimi($muuttuja1, $muuttuja2=10). Parametrit sijoitetaan järjestyksessä funktion muuttujiin alkaen vasemmalta.
  • funktiolle lähetettävä arvo on funktiossa paikallinen arvo eli kutsuttaessa funktiota alkuperäinen lähetetty muuttujan arvo ei muutu. Funktiolla on siis oma nimiavaruus.
  • jos funktion toiminnan halutaan muuttavan alkuperäistä muuttujan arvoa, käytetään & -merkkiä muuttujan edessä. Esim. function funktionimi(&$muuttuja); Tällöin kyseessä on viitemuuttuja.
// Tulostetaan funktiolle lähetetty teksti.
    function funktionimi($muuttuja) {
        echo $muuttuja;
    }
    funktionimi("Tulostetaan tämä");   //Kutsutaan funktiota nimeltä funktionimi arvolla Tulostetaan tämä.

// Funktio muuttaa funktiolle lähetetyn arvon.
    function funktionimi(&$muuttuja) {   //Muutetaan luku 10 luvuksi 15 ja palautetaan se.
        $muuttuja = 15;
    }
    $muuttuja = 10;
    funktionimi($muuttuja);   //Kutsutaan funktiota nimeltä funktionimi arvolla 10.
    echo $muuttuja;   // Funktio on muuttanut arvoksi 15.
  • RETURN - Funktio palauttaa lopetettuaan toimintansa arvon sitä kutsuneelle. Jos funktiossa ei ole return-lausetta, se ei palauta mitään arvoa vaan palaa kutsuneeseen kohtaan. Pelkällä return-lauseella funktio palauttaa yhden arvon palatessaan kutsuneeseen kohtaan.
function funktionimi($muuttuja) {    //Tässä funktion parametrit "declared" sulkumerkkien sisäpuolella.
    return $muuttuja * $muuttuja;
}
echo funktionimi(10);   // Tulostaa 100.

Vaihtoehto 2:
function funktionimi($muuttuja) {
    $muuttuja = $muuttuja * $muuttuja;
    return $muuttuja;
}

Funktion kirjoittaminen[muokkaa]

Tehdään oma funktio.

Funktion perusmuoto on function funktionimi(parametrit) { mitä tehdään; } Edellä function kertoo, että kyseessä on omatekoinen funktio. Nimessä pienillä ja isoilla kirjaimilla on merkitystä, myös numeroita, väliviivaa ja alaviivaa voi käyttää. Parametreja ilman tai tarpeen mukaan.
    function nayta_nimi() {
           echo "Nimi";
           }; 
        nayta_nimi();

PHP-funktioita[muokkaa]

Merkkijonon käsittely[muokkaa]

  • strlen() - palauttaa merkkijonon merkkien lukumäärän.
echo strlen("Viisi"); // Tulostaa 5
  • strpos() - etsii merkkijonosta halutun merkkijonon ja palauttaa arvon sijainnista mistä löytynyt etsitty alkaa
echo strpos("Viisi", "iis"); // Tulostaa 1
echo strpos("Viisi", "siis"); // Tulostaa false (ei siis tulosta mitään)
if (strpos("Viisi","siis") === false) { echo "Viisi ei sisällä 'siis'"; }
  • strtolower () - muuntaa merkkijonon pieniksi kirjaimiksi
echo strtolower("Viisi"); // Tulostaa viisi
  • strtoupper() - muuntaa merkkijonon isoiksi kirjaimiksi
echo strtoupper("Viisi"); // Tulostaa VIISI
  • substr() - palauttaa merkkijonosta tietyn osan. Ensimmäinen merkki on 0.
echo substr("Viisi", 1,3); // Tulostaa iis

Matemaattisia[muokkaa]

  • rand() - satunnaisluku
echo rand(); // Tulostaa satunnaisen luvun
echo rand(0,10); // Tulostaa satunnaisen luvun väliltä 0-10
  • round() - pyöristää desimaaliluvn
echo round(5.333); // Tulostaa 5
echo round(5.333, 1); // Tulostaa 5.3

Oliot (objects), luokka (class)[muokkaa]

Niin kutsuttu olio-ohjelmointi (Object-oriented programming, OOP) tarkoittaa, että muodostetaan luokkia apuna käyttäen olioita, jotka voivat sisältää funktioita ja muuttujia. Olio siis koostuu erilaisesta tiedosta ja toiminnoista. PHP:n funktiot ja taulukot ovat myös olioita. Olio-ohjelmoinnilla muodostetaan tarvittava "olio", jota voidaan monistaa lukemattomia kertoja.

  • Olioista puhuttaessa funktioita (functions) kutsutaan metodeiksi (methods) ja muuttujat (variables) kuuluvat olioihin ominaisuuksina (properties), attribuutteina (attributes) ja ?kenttinä? (fields).
  • Olioita voidaan luoda käyttämällä luokkia (classes) (object constructor) ja näitä luokilla muodostettuja olioita kutsutaan instansseiksi eli esiintymiksi eli ilmentymiksi (instances), joka siis edustaa luokkaa.
  • "On siis luokkaan kuuluvia instansseja joilla on ominaisuuksia."
  • Olio on siis ohjelmointiskripti, joka tekee jotain ja sitä kutsutaan sitten funktion ulkopuolelta tarvittaessa.
  • Esimerkiksi jokainen maapallon ihminen on olio (object) ja kaikilla on samat ihmisoikeudet (metodit), mutta heillä on yksilöllinen geeniperimä (ominaisuus). Ihmisillä on siis kaikille yhteisiä ominaisuuksia ja yksilöllisiä ominaisuuksia. Syntyessään uusi ihminen lisätään luomalla uusi ihmis-luokan instanssi.
Luokka: class luokanNimi { }    // Määrittää uuden luokan nimeltä luokanNimi
Instanssi: $instanssi = new luokanNimi();    // Luo uuden instanssin luokkaan nimeltä luokanNimi
Ominaisuus: 
    public $ominaisuus;    // Luodaan tyhjä oinaisuus
    public $ominaisuus = false;
    public $ominaisuus = 10;    // Luodaan ominaisuus sisältäen arvon 10
  • Konstruktori: Metodi, jolla lisätään erilaisia olioita, joka käytännössä rakentaa olion annetuista arvoista. Tätä funktiota kutsutaan: new luokanNimi(mahdolliset parametreja); Konstruktori on siis osa luokkaa, jonka sisällä se on. __construc(). Kaksi alaviivaa peräkkäin. "Tämä siis ottaa vastaan funktiota kutsuttaessa lähetetyt parametrit ja sijoittaa ne. $this käytetään ominaisuuksien lisäämiseen luokassa, se ottaa vastaan funktion lähettämän parametrin ja on olio, jota käsitellään. ->ominaisuus on olion varsinainen ominaisuus."
    public function __construct($ominaisuus1, $ominaisuus2) { 
        $this->ominaisuus1 = $ominaisuus1;
        $this->ominaisuus2 = $ominaisuus2;
    }
  • Metodi:
    public function funktionnimi(mahdollisesti parametreja) {
        tehdään jotain
    }
  • Inheritance: Luokka voi olla jonkun toisen luokan pohjalta mukailtu. Eli tällä "alaluokalla" (child class, subclass) on ylemmän isäntäluokan (parent class, superclass) metodeja ja ominaisuuksia. Alaluokka muodostetaan extends-komennolla.
    class isäntäluokanNimi { public $ominaisuus = 10; }
    class alaluokanNimi extends isäntäluokanNimi { }
    • Alaluokka voi ylikirjoittaa isäntäluokan metodeja ja ominaisuuksia.
    class isäntäluokanNimi { public $ominaisuus = 10; }
    class alaluokanNimi extends isäntäluokanNimi { $ominaisuus = 15; }
    • Isäntäluokka voi estää alaluokan metodin ylikirjoituksen.
    class isäntäluokanNimi { final public function funktionimi(); return "Lähetetyt ominaisuudet ovat..."; }
  •  :: ja Static: Luokkan metodeja ja ominaisuuksia voi käyttää ilman että on lisätty luokan instanssia. Komento on static.
    class luokanNimi {
        public static $muuttuja = 10;
        public static function metodinimi() { echo "Joopa joo"; }
        }
    echo luokanNimi::$muuttuja;    // Tulostaa 10
    luokanNimi::metodinimi();    // Tulostaa Joopa joo
  • Const: Luokalla on oma scope, jonka sisällä käytetään tiettyjä muuttujia. Const-muuttujat eivät ala $-merkillä.
    class luokanNimi {
        const muuttuja = true;
    }
    if (luokanNimi::muuttuja) { echo "Arvo on true"; }    // Tulostaa Arvo on True
    class luokanNimi {    // Voisi olla esim. class Ihminen
        public $ominaisuus1;    // Lisätään ominaisuus (olion muuttuja) (esim. asuinpaikka).
        public $ominaisuus2;
        public $ominaisuus3;
        
        public function __construct($ominaisuus1, $ominaisuus2) {   // Luodaan olio annetuilla parametreilla.
            $this->ominaisuus1 = $ominaisuus1; 
            $this->ominaisuus2 = $ominaisuus2;
        }
        
        public function metodinimi() {    // Lisätään metodi (olion funktio), tässä ominaisuudessa ei käytetä $-merkkiä! 
            return "Lähetetyt ominaisuudet ovat " . $this->ominaisuus1 . " ja " . $this->ominaisuus2 . " ja " .$this->ominaisuus3;
        }
    }
    
    // Luodaan uusi olio ($muuttuja) johon lisätään instanssi nimeltä $muuttuja (esim. uusi henkilö).
    // Luodaan uusi luokanNimi instanssi ja tallennetaan se muuttujaan $muuttuja
    // Parametrit lisätään ominaisuuksina.
    // Kutsutaan luokanNimi -luokan __contruct() -metodia parametreilla Arvo1 ja Arvo2.
    $muuttuja1 = new luokanNimi('Arvo1', 'Arvo2');
    $muuttuja1->ominaisuus3 = "Lisätään arvo tällä tavoin";
    // Luodaan toinenkin olio
    $muuttuja2 = new luokanNimi('Arvo1', 'Arvo2');
    
    // Kutsutaan $muuttuja-olion metodia nimeltä metodinimi.
    echo $muuttuja1->metodinimi();    // Tulostaa Lähetetyt ominaisuudet ovat Arvo1 ja Arvo2 ja Lisätään arvo tällä tavoin

Olioihin liittyviä PHP-funktioita[muokkaa]

  • is_a - selvittää onko joku olio jonkun luokan instanssi.
if (is_a($muuttuja1, "luokanNimi")) { echo "Kuuluu luokkaan luokanNimi."; }
  • property_exists() - selvittää onko oliolla tietty ominaisuus (ei siis ominaisuuden arvoa).
if (property_exists($muuttuja1, "ominaisuus2")) { echo "Oliolla on tämä ominaisuus."; }
  • method_exists() - selvittää onko oliolla tietty metodi.
if (method_exists($muuttuja1, "metodi")) { echo "Oliolla on tämä metodi."; }

Moduulit (include, require)[muokkaa]

Toinen tiedosto, joka sisältää aliohjelman, tekstiä, koodia tms. voidaan liittää osaksi .php-tiedostoa. Tämä voi olla esimerkiksi muuttujia, vakioita tai aliohjelmia. Näin usein tarvittavaa aliohjelmaa ei esimerkiksi aina tarvitse kirjoittaa uudestaan vaan se voidaan hakea sopivaan kohtaan. Tämä muistuttaa esimerkiksi Pythonin kirjastotoimintoa. Tällä vältetään myös virheitä ja on helpompi ylläpitää ohjelmistoa. .inc-tiedostopääte on tarkoitettu tällaisten liitettävien tiedostojen tunnisteeksi. Nämä tiedostot eivät siis välttämättä toimi itsestään. Toki liitettävä tiedosto voi olla esimerkiksi .txt -päätteinen.

    //Noudetaan samasta hakemistosta jossa pyytävä php-tiedosto sijaitsee.
    include("tiedostinimi.inc");   //Jatkaa suoritusta mahdollisesta virheestä huolimatta.
    require("tiedostonimi.inc");   //Kaatuu mahdolliseen virheeseen ja lopettaa ohjelman suorituksen.
  • Huomioi tekstin merkistön koodaus ääkkösiä käytettäessä jos tiedostosta tuodaan tekstiä! Eli tiedosto jota olet liittämässä, millä merkistökoodauksella se on tallennettu. Tämän mukainen merkistön ohje pitää lisätä .php-tiedostoon, johon se tuodaan. Tällöin se näkyy selaimessa oikein.
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>

Syöttö lomakkeelta[muokkaa]

PHP saa tietoa käyttäjältä nettisivuilta esimerkiksi lomakkeiden avulla, jotka ovat kenttiä, valikkoja yms.

  • Katso miten lomaketta käytetään PHP:n ja Smartyn kanssa yhdessä, sivulta Smarty.

Syötteen käsittely[muokkaa]

  • lomake määritellään xhtml -koodina kuten kohdassa Lomake on esitetty.
  • lomaketiedot vastaanotetaan merkkijonona $_GET tai $_POST -metodeilla taulukkotyyppiseen muuttujaan.
  • lomakkeeseen määritelty tiedosto (action=) voi olla sama missä lomake muodostetaan tai joku muu .php -tiedosto joka käsittelee lomakkeesta saadun tiedon.
  • lommakkeesta saatu tieto käsitellään esimerkiksi seuraavasti:
print $_GET["kenttänimi"];
  • useampi arvo kerätään samaan muuttujaan nimeämällä lomake käyttämällä nimessä [] -merkkejä. Esimerkiksi name = "kenttänimi[]". Huomaa että lukeminen taulukosta tapahtuu esimerkiksi foreach -komennolla.
//Otetaan samaan muuttujaan tiedot kentistä.
<form action="tiedostonimi.php" method="get">
<p>
<input id="kenttaninimi" type="text" name="kenttanimi[]" size="25"/>
<input id="kenttaninimi" type="text" name="kenttanimi[]" size="25"/>
</p>

<p>
<input type = "submit" name = "painike" value = "Lähetä" />
</p>
</form>

<?php
    foreach($_GET["kenttanimi"] as $muuttuja){
        print $muuttuja;
    }
?>

Syötteen tarkastus[muokkaa]

Lomakkeen tarkastuksen voi tehdä php-silmukalla tai javascriptillä. Javascript -esimerkki ja lomakepohja löytyvät tämän sivun esimerkeissä sivun alaosassa.

//Pyydetään syötettä uudestaan niin kauan kunnes annetaan syötteeksi kirjain a
<?php
    $muuttuja = false;
    if(isset($_GET["kenttanimi"])){
        if($_GET["kenttanimi"] != "a") //Jos syöte ei ole a kysytään uudestaan.
            $muuttuja = true;
    }
    if(!isset($_GET["kenttanimi"]) || $muuttuja){ ?>

<form action="tiedostonimi.php" method="get">
<p>
<label for="kenttanimi">Kenttä: </label>
<input id="kenttaninimi" type="text" name="kenttanimi" size="25"/>
</p>
<p>
<input type = "submit" name = "painike" value = "Lähetä" />
</p>
</form>

<?php }
    else{
    print("Kenttään kirjoitettiin: ").$_GET["kenttanimi"];
    }
?>

Lomake[muokkaa]

Lomake on XHTML -koodia ja ei siis tule <?php .. ?> -merkkien sisään.

//Lomakkeen muoto.
<form action="kutsuttava_tiedostonimi.php" method="get">
...kentät, painikkeet ja tekstikentät yms. tähän...
</form>

<input type = "submit" name = "painike" value = "Lähetä" />   //Painike

//Peruskenttä
<label for = "kenttanimi">Kenttä: </label>
<input id = "kenttanimi" type = "text" name = "kenttanimi" size = "25"/>

//Tekstikenttä
<p>
<label for = "kenttanimi">Tekstikenttä</label><br/>
<textarea id = "kenttanimi" name = "kenttanimi" cols = "25" rows = "2"></textarea>
</p>

//Radiopainike, kaksi valintaa.
<label for = "muuttuja1">Valinta1</label>
<input id = "muuttuja1" type = "radio" name = "Valinnannimi1" value = "muuttuja1"/>
<label for = "muuttuja2">Valinta2</label>
<input id = "muuttuja2" type = "radio" name = "Valinnannimi1" value = "muuttuja2"/>

Lomakkeen arvojen siirto PHP-koodiin ja päinvastoin[muokkaa]

Tämä skripti hakee php-tiedostostosta arvot lomakkeeseen, vastaanottaa käyttäjän arvot, siirtää ne takaisin php-tiedostoon käsiteltäväksi ja lataa sivun uusilla arvoilla. Toisin sanoen tämä on taulukkolaskentaohjelma (excel) verkkosivulla. WordPressissä lisää tämä esimerkiksi käytössä olevan teeman functions.php -tiedostoon ja sivulla kutsu sitä [taulukko_laskenta]

<?php
add_shortcode('taulukko_laskenta', 'taulukkolaskenta_ss');  // Kaikki muuttujat pitää alkaa tässä määritellyn mukaan, nyt ss_
function taulukkolaskenta_ss()
{
if (isset($_POST['ss_value1'])) $ss_value1 = $_POST['ss_value1'];  // Siirretään sivulta tullut tieto muuttujaan
if (isset($_POST['ss_value2'])) $ss_value2 = $_POST['ss_value2'];
$ss_result = ($ss_value1 + $ss_value2);  // Tässä tehdään arvojen laskentaa
?>

<style type="text/css">
Tähän tarpeen mukaan taulukon tyyliin vaikuttava css
</style>

<form method='post' action='<?php echo get_permalink(); ?>'>
<input type="submit" value="Laskepainike"/>

<div class="tr">
<span class="td"><input type="text" name="ss_value1" value="<?php echo $ss_value1 ?>"/></span>
<span class="td"><input type="text" name="ss_value2" value="<?php echo $ss_value2 ?>"/></span>
<span class="td"><input type="text" value="<?php echo $ss_result ?>"/></span>
</div>

</form> 
<?php
}

Tiedoston lataus nettisivun kautta hakemistoon[muokkaa]

Tiedoston siirtäminen käyttäjältä palvelimelle. Toiminto on kaksivaiheinen. Aluksi tiedosto siirretään väliaikaiseen kansioon, josta se on siirrettävä lopulliseen hakemistoon.

  • muista asettaa kirjoitus tiedostoon -oikeus hakemistolle, johon tiedosto tallennetaan. OS X:ssa esim. Finder:ssa Luku ja kirjoitus käyttäjä, staff, everyone.
SKRIPTI VAATII KORJAUSTA JA OHJEISTUSTA
<html>
<body>
<form action = "testi3.php" method = "post" enctype = "multipart/form-data">
<input type = "hidden" name = "MAX_FILE_SIZE" value = "300000"/>
<input type = "file" name = "tiedostonimi"/>
<br>
<input type = "submit" name = "painike" value = "Lähetä"/>
</form>
</body>
</html>

<?php
    $tiedostopolku = "hakemisto_johon_tallennetaan/".$_FILES['tiedostonimi']['name'];   //Määritetään hakemisto.
    if(move_uploaded_file($_FILES['tiedostonimi']['tmp_name'], $tiedostopolku)){   //Siirretään lopulliseen sijaintiin.
        print "Tiedosto on siirretty.";
    } else{
        print "Tiedoston siirto epäonnistui. Syykoodi: ";   //Käsitellään virhetilanteet.
        echo $_FILES['tiedostonimi']['error'];
    }

Tiedostopolut[muokkaa]

Varsinaisen PHP-ohjelmointikielen omaan php.ini -asetustiedostoon voidaan määritellä polku, josta PHP hakee esimerkiksi .inc -tiedostoja. Oletuksena se on piste (.) eli se hakemisto jossa suoritettava php-tiedosto on. Vain PHP:n käynnistyessä luetaan php.ini -tiedosto.

NÄMÄ ON TARKISTAMATTA
vi /etc/php.ini
include_path=".;c:\Users\kayttajanimi\Sites\yhteiset" # erotellaan . ja yhteiset hakemisto puolipisteellä
/etc/init.d/httpd restart
//PHP-koodissa voidaan korvata php.ini -tiedoston polku.
ini_set('include_path', 'c:\Users\käyttäjänimi\Sites\yhteiset');

JOS If[muokkaa]

Jos - sitten - muutoin. Jos vastaus ehtoon on kyllä, koodi { } -sulkeiden sisäpuolella toteutetaan, muutoin toteutetaan else.

if( $muuttuja > 5 ) { 
    echo "Suurempi kuin 5"; 
}
else {
    echo "Pienempi kuin 5;
}
if ($muuttuja == 5 || $muuttuja ==10) {
echo 'Muuttuja on 5 tai 10';
}
  • Esimerkiksi <?php if (($is_front) && (theme_get_setting('slideshow_display','teema'))): ?> saa aikaan sen että slideshow näytetään etusivulla jos saadaan TRUE arvo is_front JA slideshow_display -muuttujista. Muilla sivuilla slideshow ei näy.
    //Kun yksi suoritettava lause per ehto.
    if ($muuttuja)
    echo 'Tosi<p>';
    else
    echo 'Epätosi<p>';

    //Kun useita suoritettavia lauseita per ehto käytetään aaltosulkeita { }, esimerkki 1
    $muuttuja = 0;
    if($muuttuja == 1) {
        print "Luku on 1";
    } elseif($muuttuja > 2) {
        print "Luku on kahta suurempi.";
    } else {
        print "Luku on joku muu.";
    }

    // Kun useita suoritettavia lauseita per ehto käytetään aaltosulkeita { }, esimerkki 2
    $muuttuja = 0;
    if ($muuttuja == 1)
    print("Luku on 1");
    else
    {
        if ($muuttuja > 2)
            print("Luku on kahta suurempi.");
        else
            print("Luku on joku muu.");
    }

    // True arvolla testaaminen.
    if($muuttuja){
        print("Arvo on nolla.")

Palvelin[muokkaa]

    echo $_SERVER['HTTP_HOST']   //Www-palvelimen nimi.
    echo $_SERVER['PHP_SELF']   //URL-osoite, esim. /~käyttäjänimi/suoritettavatiedosto.php

    //Tulostetaan ENV-muuttujan kentät.
    foreach ($_ENV as $avain => $muuttuja)
    echo "$avain: $muuttuja
";

Sivustolta toiselle siirtyminen[muokkaa]

Sijoittamalla seuraava koodi sivun alkuun voidaan tehdä uudelleenohjaus.

<?php
    header('Location: /~käyttäjänimi/yhteiset/kohdetiedosto.php');
    exit;
    ?>

Yleistä tiedon tallentamisesta sivustoissa[muokkaa]

Käyttäjän vieraillessa sivustolla syntyy tietoa jota voi olla tarpeen säilyttää väliaikaisesti tai pysyvämmin. Väliaikainen tallentaminen tulee kysymykseen kun esimerkiksi käyttäjä siirtyy sivulta toiselle sivustossa ja jo kertynyttä tietoa halutaan käyttää seuraavalla sivulla hyväksi. Pysyvämpää tarvetta on kun halutaan käyttää tietoja esimerkiksi vuoden päästä käyttäjän palatessa samalle sivustolle. Tieto voidaan tallentaa palvelimelle tai käyttäjän käyttämän selaimen kautta käyttäjän laitteen muistiin. Tieto voidaan tallentaa palvelimelle tietokantaan tai tiedostojärjestelmään väliaikaisesti tai pysyvästi. Huomioitavaksi tulee tallennuskapasiteetin määrä käyttäjämäärien lisääntyessä. Tässä esitellään lomakkeeseen piilotettu tieto, istunto ja eväste. Normaalisti HTTP-protokolla ei tallenna tietoja vaan tieto häviää kun sivulta poistutaan toiselle sivulle vaikka oltaisiin samassa sivustossa.

Lomakkeeseen piilotettu tieto[muokkaa]

Normaalin lomakkeen joukkoon sijoitetaan käyttäjälle näkymätön kenttä, joka voi sisältää haluttuja tietoja.

<input type="hidden" name="piiloteksti" value="tähän_piiloarvo" />

Istunto[muokkaa]

Istunnon aikana eli kun käyttäjän selain on auki (?ei haittaa vaikka poistuu sivustolta välillä?) tietoa voidaan tallentaa SESSION-muuttujaan ja käyttää sieltä. Käyttäjän sulkiessa selaimen, istunto päättyy ja tieto häviää. Istunto on oletusarvoisesti PHP:n asetuksissa 180 minuuttia eli jos käyttäjä ei tuona aikana käytä sivua tai sivuja joille istunto-olio sisältyy, istunto-olio tuhoutuu automaattisesti myös tällöin. Muuttujaa ei lähetetä selaimelle, vaan se pysyy aina palvelimella (vrt. eväste). Muuttujalle annetaan perustettaessa nimi ja tämä nimi välitetään ainoastaan käyttäjän selaimelle. Turvallisempi keino on välittää nimi evästeessä, mutta se voidaan välittää myös URL:ssa. Muuttuja on heti käytettävissä.

Istunto-muuttujan asettaminen[muokkaa]

    $_SESSION['istuntonimi'] = "istunnonsisalto";

Istunto-muuttujan käyttäminen[muokkaa]

  • Muuttuja on kutsuttava aina uudestaan sivulla funktiolla session_start() Tällöin tarkistetaan löytyykö muuttuja evästeestä, lomakkeesta tai URL:sta. Jos löytyy, alustetaan muuttujataulukko löydetyillä muuttujilla. session_start() sijoitetaan ennen HTML-tagia. Istuntoon voidaan siis viitata myös muilta sivuilta!
  • php.ini -tiedostoon voidaan asettaa session_autostart on (oletus off) jolloin start() -funktiota ei tarvita.
  • muuttujaa voidaan käyttää esimerkiksi: print("Istuntonimen sisältö: ".$_SESSION['istuntonimi']);
    //Testataan löytyykö istunto-muuttuja.
    session_start();
    if (isset($_SESSION['istuntonimi']))
        print("Istuntonimen sisältö: ".$_SESSION['istuntonimi']);
    else
        print("Istuntonimeä ei löytynyt.");

Istunto-muuttujan poistaminen[muokkaa]

Muuttujan poistamisesta palvelimelta huolehditaan esimerkiksi Kirjaudu ulos -toiminnon yhteydessä. Näin muuttuja ei jää palvelimelle muiden luettavaksi.

    unset($_SESSION['istuntonimi'];   //Poistetaan vain istuntonimi -niminen.
    session_unset();   //Poistetaan kaikki istuntomuuttujat.

Eväste (cookie)[muokkaa]

Eväste on palvelimelta käyttäjän selaimelle lähetetty tekstitiedosto. Se voi sisältää tietoja jotka helpottavat käyttäjän sivuilla käyntiä vaikka sivustosta poistutaan välillä. Tällöin eväste tallennetaan käyttäjän laitteelle esimerkiksi kovalevylle. Kun käyttäjä vierailee uudestaan sivustolla, eväste lähetetään palvelimelle ja php-ohjelma tarpeen mukaan hyödyntää edellisillä kerroilla tallennetun tiedon. Evästeellä voi olla määrätty elinikä, oletuksena on sivustolla oloaika eli istunto. Käyttäjät voivat poistaa evästeitä selaimen asetuksista ja lukea niiden sisältöä. Selaimiin on määritetty yleinen evästeiden enimmäiskoko.

Evästeen asettaminen[muokkaa]

  • eväste asetetaan tiedostoon niin että se on ennen ensimmäistä HTML-riviä ja riviä: <?php echo '<?xml version="1.0" encoding="ISO-8859-1"?>'?>
  • eväste on käytettävissä vasta kun sivu selaimessa ladataan uudestaan.
  • eväste on $_COOKIE -taulukossa.
  • pakollinen tieto on ainoastaan evästeen nimi.
  • jos aikaa ei määritellä, eväste on voimassa vain istunnon ajan. time()+ss*mm*tt*pv eli time()+60*60*24*15 on 15 päivää.
  • / tarkoittaa että eväste vaikuttaa koko domainiin. Tarvittaessa voidaan määrittää alikansioita.
  • esimerkiksi domain.fi tai .domain.fi asettaa evästeen vaikuttamaan myös alidomaineissa.
  • rivin viimeinen arvo: 0 = lähetetään suojaamattomassakin yhteydessä, 1 = lähetetään salatussa yhteydessä eli HTTPS-yhteyden kautta.
<?php
    setcookie("evastenimi", "evasteensisaltö", time()+60*60*24*30, "/", "localhost", 0);
?>

Evästeen luku[muokkaa]

Luku tapahtuu taulukkoon.

    if(isset($_COOKIE['evastenimi']))
    echo "Eväste löytyi. Sisältö: ".$_COOKIE['evastenimi'];

PHP ja MySQL[muokkaa]

Katso sivu PHP ja MySQL.

PHP ja Word (docx)[muokkaa]

  1. Tee esim. seuraava hakemistorakenne palvelimelle. Kansiot 755, tiedostot 644.
  2. public_html/kansio1/vsword-master
    1. pura vsword-master-kansioon https://github.com/vench/vsword vsword-master.zip
    2. lisää kansio1 -kansioon alla oleva html-php -koodi esim. tiedostoksi tiedostonimi.php. Korvaa echo rivillä olevat pienempikuinmerkki ja suurempikuinmerkki merkeillä < ja >
  3. Anna selaimessa www.palvelin.fi/kansio1/tiedostonimi.php
  4. Päivitä palvelimen kansio1 -kansio ja lataa sinne ilmestynyt docx-tiedosto omalle koneelle ja avaa Wordilla.
<?php echo '<?xml version="1.0" encoding="ISO-8859-1"?>'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Sivun otsikko</title>
</head>
<body>

<?php
require_once 'vsword-master/vsword/VsWord.php'; 

VsWord::autoLoad();

$doc = new VsWord(); 
$parser = new HtmlParser($doc);
$parser->parse( '<h1>Otsikko</h1>' );
$parser->parse( '<p>Tekstikappale</p>' );
$parser->parse( '<h2>Taulukon otsikko</h2> <table> <tr><td>Sarake 1</td><td>Sarake 2</td></tr> </table>' );
$parser->parse( $html );

echo 'pienempikuinmerkki pre suurempikuinmerkki'.($doc->getDocument() -> getBody() -> look()).'pienempikuinmerkki /pre suurempikuinmerkki';

$doc->saveAs( 'testitiedosto.docx' );
?>

</body>
</html>
Lähde esim. https://www.phpclasses.org/blog/post/315-Create-Microsoft-Word-DOCX-files-from-HTML-in-PHP-Part-1-Simple-Example.html

PHP ja PDF (pdf)[muokkaa]

Tässä esimerkissä käytetään apuna FPDF Library -kirjastoa, joka muodostaa PDF-dokumentin.

  1. Tee esim. seuraava hakemistorakenne palvelimelle. Kansiot 755, tiedostot 644.
  2. public_html/kansio1/fpdf
    1. pura fpdf-kansioon http://www.fpdf.org/en/dl.php?v=181&f=zip tai uusin versio
      1. Virheilmoituksen 'FPDF error: Some data has already been output, can't send PDF' välttämiseksi tee fpdf.php -tiedostoon seuraava muutos
        1. Lisää rivin function Output($dest=, $name=, $isUTF8=false) { jälkeen seuraava: ob_clean();
    2. lisää kansio1 -kansioon alla oleva html-php -koodi esim. tiedostoksi tiedostonimi.php.
  3. Anna selaimessa www.palvelin.fi/kansio1/tiedostonimi.php
    1. PDF-dokumentti avautuu samaan selainikkunaan/-välilehteen.
<?php echo '<?xml version="1.0" encoding="ISO-8859-1"?>'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Sivun otsikko</title>
</head>
<body>

<?php
require('fpdf/fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Teksti');
$pdf->Output();
?>

</body>
</html>
http://www.fpdf.org/en/tutorial/tuto1.htm

Esimerkkejä[muokkaa]

Henkilötunnus[muokkaa]

Tekee henkilötunnuksesta pisteillä erotetun merkkijonon ja kertoo sukupuolen.

<?php
    $henkilotunnus = '061213A123B';
    $pp = substr($henkilotunnus, 0, 2);
    $kk = substr($henkilotunnus, 2, 2);
    $vv = substr($henkilotunnus, 4, 2);
    
    switch ($henkilotunnus{6})
    {
        case '+': $vuosisata = 1800; break;
        case '-': $vuosisata = 1900; break;
        case 'A': $vuosisata = 2000; break;
    }
    $syntymaaika = $pp.".".$kk.".".($vuosisata+$vv)."<br/>";
    echo $syntymaaika;
    
    $sukupuoli = $henkilotunnus{9} % 2;
    if ($sukupuoli)
    echo 'Mies<p>';
    else
    echo 'Nainen<p>';
?>

Lomakkeen tarkastus ja kohdistus JavaScriptillä[muokkaa]

Huomaa että JavaScript tulee sijoittaa head-tagien väliin. Tabindex määrittelee missä järjestyksessä kentästä toiseen siirrytään jos käyttäjä painaa sarkain-näppäintä.

<body>

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script language="JavaScript">
function kohdista()   //Kohdistus.
{
    document.lomake.nimi.focus();
}

function tarkista(lomake)   //Tarkistus.
{
    if (lomake.nimi.value.length == 0)
    {
        alert("Nimi on pakollinen");
        lomake.nimi.focus();
        return false;
    }
    lomake.submit();
}
</script>
</head>

<body onLoad="kohdista();">

<form name="lomake" method="POST" action="lomakkeen_käsittelevä_tiedostonimi.php">
<table border="1">

<tr>
<td>Tunnistenumero</td>
<td><input type="text" name="tunnistenumero" size="10" tabindex="1">ei pakollinen</td>
</tr>

<tr>
<td>Nimi</td>
<td><input type="text" name="nimi" size="100" tabindex="2"></td>
</tr>

<tr>
<td>Valinta</td>
<td>
<select size="1" name="Valinta" tabindex="3">
<option value="Valinta1">Valinta 1</option>
<option selected value="Valinta2">Valinta 2</option>
</select>
</td>
</tr>

<tr>
<td><input type="button" value="Lähetä" name="Lähetä" tabindex="4"
onClick="tarkista(this.form)"></td>
<td><input type="reset" value="Tyhjennä" name="btnTyhjenna" tabindex="5"></td>
</tr>
</table>
</form>

</body>

-