Kirjautuminen

Haku

Tehtävät

Oppaat: PHP-ohjelmointi: Osa 3 - if-rakenne

  1. Osa 1 - Johdanto
  2. Osa 2 - Muuttujat
  3. Osa 3 - if-rakenne
  4. Osa 4 - for-silmukka
  5. Osa 5 - Taulukot
  6. Osa 6 - Lomakkeet
  7. Osa 7 - Nettisivusto
  8. Osa 8 - Lisää silmukoista
  9. Osa 9 - Tiedostot
  10. Osa 10 - Omat funktiot
  11. Osa 11 - Istunnot
  12. Osa 12 - Tietokannat
  13. Osa 13 - Tietoturva
  14. Osa 14 - Olio-ohjelmointi
  15. Osa 15 - Kuvien luonti
  16. Osa 16 - Säännölliset lausekkeet
  17. Osa 17 - Merkistöt
  18. Osa 18 - PHP:n ongelmat

Kirjoittaja: Antti Laaksonen (2011).

Ohjelmoinnissa tulee usein tarvetta suorittaa erilainen koodi tilanteesta riippuen. Esimerkiksi jos käyttäjä antaa oikean salasanan, hän pääsee kirjautumaan sisään, mutta jos salasana on väärä, tulee virheilmoitus.

Tässä oppaassa käsiteltävän if-rakenteen avulla koodin toiminnan saa riippumaan muuttujista. Ideana on asettaa koodin suoritukselle ehtoja, joissa on mukana muuttujien arvoja. Esimerkiksi ehto $salasana == "kissa" vaatii, että muuttujan $salasana arvona on "kissa".

if-rakenne

if-rakenteen yksinkertaisin muoto on seuraava:

if (ehto) {
    koodi
}

Ideana on, että ohjelma suorittaa if-rakenteen sisällä olevan koodin vain silloin, kun alussa oleva ehto pitää paikkansa. Seuraava esimerkki selventää asiaa:

if ($nimi == "Aapeli") {
    echo "Terve, vanha kuoma!";
}

Nyt jos muuttujan $nimi sisältö on "Aapeli", koodi tulostaa viestin "Terve, vanha kuoma!" Jos sisältö on jotain muuta, koodi ei tee mitään.

Lisäämällä if-rakenteeseen else-osan voi myös kertoa, mitä koodin tulee tehdä silloin, kun ehto ei pidä paikkaansa:

if (ehto) {
    koodi
} else {
    koodi
}

Tätä vastaa seuraava esimerkki:

if ($nimi == "Aapeli") {
    echo "Terve, vanha kuoma!";
} else {
    echo "Kuka kumma olet...";
}

Nyt koodi tulostaa viestin "Kuka kumma olet...", jos muuttujassa $nimi on jotain muuta kuin "Aapeli".

Laajin if-rakenteen muoto on seuraava:

if (ehto) {
    koodi
} elseif (ehto) {
    koodi
} elseif (ehto) {
    koodi
...
} else {
    koodi
}

Tässä suoritetaan ensimmäinen koodi, jota vastaava ehto pitää paikkansa. Jos mikään ehdoista ei pitä paikkansa, suoritetaan else-osassa oleva koodi. Tarvittaessa else-osa voi myös puuttua lopusta.

Seuraava esimerkki esittelee if-rakenteen laajinta muotoa:

if ($nimi == "Aapeli") {
    echo "Terve, vanha kuoma!";
} elseif ($nimi == "Maija") {
    echo "Heisulivei!";
} elseif ($nimi == "Uolevi") {
    echo "Tsaukki, taukki!";
} else {
    echo "Kuka kumma olet...";
}

Koodi tervehtii Aapelia, Maijaa ja Uolevia omilla tavoillaan. Jos käyttäjän nimi ei ole mikään näistä kolmesta, koodi tulostaa tekstin "Kuka kumma olet..."

Ehdot

Tavallisimmat ehdot ovat seuraavat:

ehtomerkitys
A == BA on sama kuin B
A != BA ei ole sama kuin B
A <> BA ei ole sama kuin B

Merkinnät <> ja != tarkoittavat täysin samaa.

Lukuarvoihin liittyvät myös seuraavat ehdot:

ehtomerkitys
A < BA on pienempi kuin B
A <= BA on pienempi tai sama kuin B
A > BA on suurempi kuin B
A >= BA on suurempi tai sama kuin B

Merkintä && vaatii, että kaksi ehtoa pitävät molemmat paikkansa. Esimerkiksi ehto $tunnus == "aapeli" && $salasana == "kissa" vaatii, että tunnus on "aapeli" ja salasana on "kissa".

Merkintä || vaatii, että jompikumpi tai molemmat kahdesta ehdosta pitävät paikkansa. Esimerkiksi ehto $ika < 0 || $ika > 120 vaatii, että ikä on alle 0 tai yli 120.

Merkintä ! muuttaa ehdon käänteiseksi. Esimerkiksi ehto !($nimi == "aapeli") tarkoittaa samaa kuin ehto $nimi != "aapeli".

Joskus täytyy huomioida myös vertailtavan arvon tyyppi, jolloin tarvitaan seuraavia ehtoja:

ehtomerkitys
A === BA on sama ja samaa tyyppiä kuin B
A !== BA ei ole täysin sama kuin B

Esimerkiksi ehto 0 == "0" on tosi, koska molemmat arvot ovat nollia, mutta ehto 0 === "0" on epätosi, koska 0 on luku ja "0" on teksti. Vastaavasti 0 == false on tosi, koska 0 voidaan tulkita totuusarvoksi false, mutta 0 === false on epätosi, koska 0 on luku ja false on totuusarvo.

Seuraavat esimerkit selventävät, miten ehtoja muodostetaan käytännössä.

Esimerkki: Ikätarkistus

Seuraava esimerkki kysyy käyttäjältä ikää ja tarkistaa, että se on järkevä (vähintään 0 ja korkeintaan 120).

<!DOCTYPE html>
<html>
  <head>
    <title>Ikätarkistus</title>
  </head>
  <body>
    <form action="ikatarkistus.php" method="post">
      Kuinka vanha olet? <input type="text" name="ika"> <br>
      <input type="submit" value="Lähetä">
    </form>
  </body>
</html>

Koodi tarkistaa ensin, onko muuttujassa $ika liian pieni tai liian suuri arvo. Jos ei ole, niin arvon täytyy olla sopiva.

<?php
$ika = $_POST["ika"];
if ($ika < 0) {
    echo "Et voi olla alle 0-vuotias!";
} elseif ($ika > 120) {
    echo "Et voi olla yli 120-vuotias!";
} else {
    echo "Kiitos tiedosta!";
}
?>

Kokeile koodia

Esimerkki: Tunnus ja salasana

Seuraava esimerkki kysyy käyttäjältä tunnuksen ja salasanan. Jos tunnus on "aapeli" ja salasana on "kissa", koodi tervehtii käyttäjää. Huomaa lomakkeessa oleva password-tyyppinen kenttä, jonka ansiosta kirjoitettu salasana ei näy selaimessa.

<!DOCTYPE html>
<html>
  <head>
    <title>Tunnus ja salasana</title>
  </head>
  <body>
    <form action="salasana.php" method="post">
      Tunnus: <input type="text" name="tunnus"> <br>
      Salasana: <input type="password" name="salasana"> <br>
      <input type="submit" value="Kirjaudu">
    </form>
  </body>
</html>

Nyt if-rakenteen ehto vaatii, että muuttujassa $tunnus on merkkijono "aapeli" ja muuttujassa $salasana on merkkijono "kissa":

<?php
$tunnus = $_POST["tunnus"];
$salasana = $_POST["salasana"];
if ($tunnus == "aapeli" && $salasana == "kissa") {
    echo "Tervetuloa!";
} else {
    echo "Häivy pois!";
}
?>

Kokeile koodia


Kirjoita kommentti

Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta