PHP.ee
 php.ee   linuxator.com   whee 
07.02.12 / 23:27
  Artiklid
  » Algajaile
  » Andmebaasid
  » Varia
  » Graafika
  » Advanced
Logi sisse:
< nimi
< pass
Unustasid passi?
Kas eelistad võimalusel PHP koodi objektorienteeritult kirjutada?
 Jah, see teeb töö lihtsamaks
 Jah, see on lihtsalt lahe
 Nii ja naa, ei tunne erilist võitu
 Ei, mõttetu ajakulu
 Ei oska objektorienteeritult progeda
Tulemused
Liitu listiga!
Telli PHP uudiskiri
Nimi:
Email
Kasutame PHP 'd - mida sellega teha saab?
Martin Rebane

Võib arvata, et enamus inimesi ei lepi PHP kasutamisel pelgalt echo'ga. Seetõttu vaatame, kust edasi minna.

Kriitikute soovil märgin ära, et õpetusest arusaamiseks peaks kõigepealt HTMLi ka oskama :)

Teeme tõeliselt dünaamilise lehekülje


OK, hakkame peale. Esiteks teeme selgeks, misasi on include. Nimelt selle keelekonstruktsiooni abil hakkame me oma html-dokumenti muutma. Vaatame, kuidas see töötab:

include("failinimi.inc.php");

...ja nii lihtne see ongi. Kui ülalolev koodirida PHP faili kirjutada, siis PHP asendab selle osa failiga failinimi.inc.php. Kuidas sellest nüüd kasu lõigata?

Oletame, et me soovime luua lehe kümne luuletusega, aga meil pole mingit soovi valmis treida kümmet erinevat lehte. Alustame tükkidest ja teeme valmis lehe ülaosa:

<html>
<head>
<title>Luuleleht</title>
</head>
<body>

Ja salvestame selle faili ära, nimeks paneme tal head.inc.php - inc laiend näitab, et tegu on lisatava failiga, see on lihtsalt selguse huvides, kuna see fail ise php'd ei sisalda, võiks ta nimi olla ka head.inc või head.html või lihtsalt head.

Nüüd teeme valmis ka lehekülje alaosa.

</body>
</html>

..ja nimetame selle bottom.inc.php

Samuti teeme valmis kümme lehte luuletustega 1.inc.php,...,10.inc.php
Ja asume tõsise töö kallale - kirjutame faili index.php. Alustame luuletuse valikust, puhas html(mida tegelikult ei olegi vajadust php abil esitada):

PHP kood:


 
<?php
echo'<form action='.$PHP_SELF.' method="post">
<select name="luuletus">
<option value="">Palun vali luuletus!</option> <!-- tyhi valik -->
<option value="1">Esimene luuletus</option>
...siia vahele kõik vahepealsed...
<option value="10">Kümnes luuletus</option>
</select>
<input type="submit" value="GO">
</form>'
;
?>



Kõigepealt vaatame <form action=""> osa - $PHP_SELF tähendab, et <form>'i väärtused antakse edasi samale lehele, $PHP_SELF annab meile selle lehe nime, millel PHP parasjagu töötab. Kui meie lehe nimi on index.php, siis $PHP_SELF väärtus on '/index.php'; '/'tähistab kataloogiteed failini.
Tähele tuleb panna veel seda, et <select>'i nimi on 'luuletus' ja igal 'optionil' on oma 'value' ehk väärtus. PHP seisukohast loeb see, milline on väärtus(value), see mis on option-märgendite vahel, ei ole PHP'le tähtis. Asi näeb välja nii:

test

Nüüd, kui külastaja luuletuse valib ja nupule vajutab, satub ta tagasi samale lehele, kusjuures tal "on kaasas" muutuja $_POST['luuletus']. Oletame, et küljastaja soovis näha viiendat luuletust ja submittis vormi, sel juhul $_POST['luuletus']==5

Kõigepealt peame me muidugi veenduma, et see numbriline väärtus tal ka tõepoolest on ja siis käitume vastavalt:

PHP kood:


 
$luuletus
=(int)$_POST['luuletus'];
//kontrollime, kas luuletus on valitud
if ($luuletus>0) 
{
    include("$luuletus.inc.php");  //kui on, siis lisame
}



$luuletus=(int)$_POST['luuletus']; kirjutasime koodi selleks, et vältida h2xx0rdamist. Nimelt (int) kindlustab, et meil on tegu arvuga. Juhul kui $_POST['luuletus'] väärtus oleks näiteks "5tere", siis peale int'iga üle käimist on ta kõigest "5".

Selle koodi lisasime faili lõppu, enne ?> märgendit ning selle tulemusena lisatakse siia lehele fail 5.inc.php, mis teatavasti sisaldab luuletust nr 5.

Aga me tegime ju ka failid head.inc.php ja bottom.inc.php! Miks? Eraldi selleks, et kui me tahaks lehe allserva panna näiteks kirja 'Copyright 2001 Minaise', siis teame kohe, kuhu see lisada tuleb, pole koodi sees tuhnimist, vaid võtame kohe lahti faili bottom.inc.php
Kui meil on aga palju lehti sama lõpuga, siis võime igaühele lõppu lisada sama faili ja kui selle sisu muuta tahame, muudame ainult ühte faili, mitte kõiki eraldi.

Tagasi koodi juurde. Peale seda, kui lisasime ka head.inc.php ja bottom.inc.php, näeb kood välja nii:

PHP kood:


 

<?php
include("head.inc.php");

echo
'<form action='.$PHP_SELF.' method="post">
<select name="luuletus">
<option value="">Palun vali luuletus!</option> //Tühi valik
<option value="1">Esimene luuletus</option>
...siia vahele kõik vahepealsed...
<option value="10">Kümnes luuletus</option>
</select>
<input type="submit" value="GO">
</form>'
;

//kindlustame, et tegemist oleks ikka numbriga
$luuletus=(int)$_POST['luuletus'];

//kontrollime, kas luuletus on valitud
if ($luuletus>0) 
{
    include("$luuletus.inc.php");  //kui on, siis lisame
}

include(
"bottom.inc.php");
?>


Nagu sa märgata võisid, on include seekord loogeliste sulgude{} vahel, kuigi ta on ainuke rida, mis täita tuleb. See tuleneb sellest, et include ei ole tavaline php funktsioon, vaid keelekonstruktsioon ja seetõttu peab ta alati, kui teda kasutatakse tingimuslausetes, olema loogelistes sulgudes.


Kuna include tööpõhimõte on selline, et lisatava faili alguses lõpetab PHP teksti töötlemise ja jätkab seda alles faili lõpus, siis koodi, mis lisatavas failis on, ei töödelda. Selleks, et seda teha, on lisatavas failis php-märgendid uuesti avada (<?php) ja sulgeda (?>) vaja. Näiteks:

echo("tere");

..on brauseris näha täpselt ülalnäidatud kujul, aga:

<?php
echo"tere";
?>

..on brauseris kõigest 'tere'.


Arvatavasti on include kõige parem võimalus see, et teda kasutades saab asendada raamidega leheküljed(mis minu arvates on oi-kui-koledad) ilma suure lisatööta terviklehtedega.

Siit saad endale selle näite koodi: include.txt

Artikli kommentaarid

O