Erinevus lehekülje "Php" redaktsioonide vahel
(→foreach) |
(→Trükkimine) |
||
239. rida: | 239. rida: | ||
Teksti ja muutujate väärtuste ekraanile trükkimiseks kasutatakse käske echo, print ja printf. Käsud echo ja print on praktiliselt sarnased, väljatrükitav tekst tuleb kirjutada nende järele jutumärkide (") vahele. Näiteks trükib skript välja teksti, muutuja nimed ja nende väärtused | Teksti ja muutujate väärtuste ekraanile trükkimiseks kasutatakse käske echo, print ja printf. Käsud echo ja print on praktiliselt sarnased, väljatrükitav tekst tuleb kirjutada nende järele jutumärkide (") vahele. Näiteks trükib skript välja teksti, muutuja nimed ja nende väärtused | ||
+ | <source lang=php> | ||
$a = "Mari"; | $a = "Mari"; | ||
$b = 5; | $b = 5; | ||
249. rida: | 250. rida: | ||
"; | "; | ||
print "\$a = $a"; | print "\$a = $a"; | ||
+ | </source> | ||
echo või print argumendiks olev tekst võib ulatuda üle mitme rea tingimusel, et viimase lõpus on semikoolon (;). Soovides trükkida muutuja väärtuse asemel tema nime, tuleb põgeda $ tagurpidi kaldkriipsuga (\) nagu \$a. | echo või print argumendiks olev tekst võib ulatuda üle mitme rea tingimusel, et viimase lõpus on semikoolon (;). Soovides trükkida muutuja väärtuse asemel tema nime, tuleb põgeda $ tagurpidi kaldkriipsuga (\) nagu \$a. |
Redaktsioon: 9. aprill 2010, kell 13:01
Sisukord
Sissejuhatus
PHPd kasutatakse dünaamiliste veebilehtede loomiseks. PHP töötab veebiserveris ning väljastab tavalist HTML teksti. PHPd võib näiteks kasutada selleks, et vahendada andmebaasi läbi veebi.
Andmebaasi kasutavate skriptide kirjutamisel tuleks arvestada järgmist
- andmebaasipäringud tuleb sooritada võimalikult korrektselt, näiteks selliselt, et andmete sorteerimine ja filtreerimine toimub SQLi vahenditega, mitte hiljem skriptis
- sisestades andmebaasi uusi andmeid või muutes olemasolevaid, kontrollige skriptis eelnevat nende sobivust, näiteks, et poleks lubatud sisestada arvulisse andmevälja teksti
PHP skript
PHP skripti moodustavad käsud kirjutatakse <?php ja ?> märkide abil otse HTML faili, kusjuures faili nime lõpus peab olema .php. Näiteks sellise sisuga fail php.php.
<html>
<body>
<h1><?php echo "Tere päevast!"; ?></h1>
<p>
<?php
/* see on kommentaar, mida PHP mootor ignoreerib */
echo "Mina olen PHP skritp!";
?>
</p>
</body>
</html>
on samaväärne HTML-tekstiga
<html>
<body>
<h1>Tere päevast!</h1>
<p>Mina olen PHP skritp.</p>
</body>
</html>
Ekraanile kuvatakse tekst
Tere päevast! Mina olen PHP skritp.
Veebiserver asendab <?php ja ?> märkide vahel asuva PHP käskude jada nende käivitamisel tekkinud väljundiga, antud juhul siis echo käskude väljundiga.
PHP käsud peavad lõppema semikooloniga (;) nagu
echo "Tere päevast!";
PHP skripti sisse saab kirjutada kommentaare eristades nad sarnaselt C keele traditsioonile /* ja */ märkidega muust tekstist
/* see on kommentaar mida PHP mootor ignoreerib */
Samuti kommenteerib '//' välja järgneva teksti kuni seda märget sisaldava rea lõpuni
echo "Tere Priit"; // siin trükitakse välja tekst "Tere Priit"
Muutujad ja väärtuse omistamine
PHP skriptis saab kasutada arvulist ja tekstitüüpi muutujaid, samuti massiive ning teha nendega tehteid. Muutuja nime alguses on dollar ($), millele järgneb alakriips või tähemärk (a-z, A-Z) ning seejärel võib nimes sisalduda ka numbreid (0-9). PHP eristab väikesi ja suuri tähti. Näiteks on korrektne muutuja nime märkida selliselt
$kordaja_1
Muutuja tüüpi ei pea enne kasutamist defineerima, piisab muutujale väärtuse omistamisest, mida tehakse võrdusmärgi abil. Näiteks omistame muutujaile väärtused ja teeme mõne tehte
<?php
$a = -15.5; $b= 20;
$c = $a + $b;
?>
<?php
echo "$a korda $b on $c";
?>
Negatiivset arvu peab alustama -märgiga ning pealekomakohti eraldatakse ennekomakohtadest punktiga.
Pange tähele, et <?php ja ?> märkide vahel kasutatud muutujad omavad endisi väärtusi ka siis, kui neid hiljem uuesti kasutada mõnes järgmises samas dokumendis asuvas <?php ja ?> märkide vahel olevas PHP skriptis.
<?php
$d = "muinas";
$e = "jutt";
$f = $d.$e;
echo "sõnesid $d ja $e saab kokku ühendada, tulemuseks on $f";
?>
Sõnedega (ingl. k. string) tegelemisel on põhiliseks tehteks nende sobivas järjekorras kokkuühendamine. Allpool näitame, kuidas sõne osadeks lahutada jms.
Omistamisel saab kasutada
$a = 5; $a = $a + 4;
asemel samaväärset kuid lühemat kirjaviisi
$a = 5; $a += 4;
Muutujale saab omistada operatsioonisüsteemi käsu väljundit kasutades graaviseid. Käsk antakse kasutaja httpd õigustes. Näiteks omistame muutujale $aeg väärtuseks süsteemi aja
$aeg=`date`;
Aritmeetilised tehted
Aritmeetilisi tehteid
- "+, -" - liitmine ja lahtutamine
- "*, /, %" - korrutamine, jagamine ja jääk
tehakse arvväärtustega. Näiteks
<?php
$a = 3.5;
$b = 2;
$korrutis = $a * $b;
echo "$a ja $b korrutis on $korrutis";
?>
Kui arvutuses kasutada täisarvu ja komakohtadega arvu, siis tulemus sisaldab samuti komakohti.
Juhtstruktuurid
Skripti käigu suunamiseks kasutatakse juhtstruktuure, mis valivad järneva tegevuse vastavalt seatud tingimustele. Tingimusi esitatakse võrdlustehete <,>, <=, >=, ==, != abil. Võrdlustehete tulemusi (tõene, väär) saab omakorda kombineerida loogiliste tehete (and, or, xor, ! $a - not $a) abil.
Loogalisi sulge ({, }) kasutatakse käskude grupeerimiseks plokiks, mis täidetakse või täidetakse korduvalt.
if
if konstruktsiooni abil saab valida kahe võimaliku tegevuse vahel sõltuvalt tingimuse täidetusest.
Võrdleme kahte arvu omavahel
$a = 5; $b = 6;
if ($a > $b) {
print "$a on suurem kui $b";
} else {
print "$a on väiksem või võrdne $b-ga";
}
Kombineerides kahte tingimust loogilise tehtega võrdleme arve nulliga
$a = 5; $b = 6;
if ($a > 0 and $b > 0) {
print "$a ja $b on nullist suuremad";
} elseif ($a < 0 and $b < 0) {
print "$a ja $b on nullist väiksemad";
} else {
print "$a ja $b on mõlemad nullid või erimärgilised";
}
for
for-konstruktsiooni abil saab täita sama plokki käske kontrollitud arv kordi, kuni tingimus on tõene. Näiteks kirjutab skript ekraanile arvud ühest viieni
for ($i = 1; $i < 6; $i++)
{
echo "$i
";
}
$i=$i++ on samaväärne nagu $i=$i+1.
Sama tulemuse väljastab ka selline skript
$i = 1;
for (;;) {
if ($i > 5) {
break;
}
print $i;
$i++;
}
for (;;) vastab lõpmatule kordusele, kusjuures break annab käsu tulla kordusest välja.
while
while konstruktsiooni puhul täidetakse plokki seni, kuni tingimus on tõene. Trükime arvud ühest viieni välja ka while'i abil
$i = 1;
while ($i <= 5) {
print $i++;
print ++$i;
print
;
}
Tulemuseks on
13 35 57
See näide demonstreerib ka eel- (++$i) ja järel- ($i++) inkrementeerimist.
- eel-inkrementeerimisel (++$i) suurendatakse muutuja väärtust enne ja allest siis kasutatakse seda, näiteks trükitakse
- järel-inkrementeerimisel ($i++) kasutatakse enne muutuja väärtust, näiteks trükitakse ja alles siis suurendatakse muutuja väärtust
do ... while
do ... while konstruktsioon on sarnane while'ga, erinedes selle poolest, et tingimust kontrollitakse peale ploki täitmist. Seega täidetakse plokki vähemalt üks kord. Näiteks trükime välja arvud ühest viieni
$i = 0;
do {
print $i;
} while ($i>0);
foreach
foreach - konstruktsioon võimaldab mugavalt täita plokis olevaid lauseid iga massiivi elemendi jaoks. Näiteks väärtustame viie-elemendilise massiivi $m ning trükime selle elemendid välja
$m = array ("Jaan", "Peeter", "Marta", "Laura");
$i=1;
foreach ($m as $element) {
print $i++.". $element
";
}
Trükkimine
Teksti ja muutujate väärtuste ekraanile trükkimiseks kasutatakse käske echo, print ja printf. Käsud echo ja print on praktiliselt sarnased, väljatrükitav tekst tuleb kirjutada nende järele jutumärkide (") vahele. Näiteks trükib skript välja teksti, muutuja nimed ja nende väärtused
$a = "Mari";
$b = 5;
$c = -2;
$korrutis = $b * $c;
echo "$b korda $c on
võrdne
$korrutis";
print "
";
print "\$a = $a";
echo või print argumendiks olev tekst võib ulatuda üle mitme rea tingimusel, et viimase lõpus on semikoolon (;). Soovides trükkida muutuja väärtuse asemel tema nime, tuleb põgeda $ tagurpidi kaldkriipsuga (\) nagu \$a.
Kui kasutada jutumärkide asemel ülakomasid, ei asendata muutujaid nende väärtustega
$b = 5; $c = -2; $korrutis = $b * $c; echo '$b korda $b on $korrutis';
Soovides vormistada (format) väljundit paindlikumalt, tuleb kasutada käsku printf, mille süntaks on sarnane C vastavale käsule. Näiteks teeme arvutused ja trükime välja muutujate väärtused kahe pealekomakohaga
$b = 1.3; print "< pre >"; while ($b < 5) { printf ("%3.2f%6.2f\n", $b, $b*$b++); } print "< /pre >";
%6.2f tähendab, et trükkimisel tuleb korrutisele $b*$b++ vastav väli hoida vähemalt kuue positsiooni laiune, millest kaks on pealekomakohad. Vaikimisi täidetakse tühjad kohad tühikutega ja joondatakse paremale poole, so tühikud sisestatakse väärtusest vasemale. Siin on asjakohane kasutada HTMLi pre-tagi, sest muidu "sööb" brauser tühikud ära. Tulemus
1.30 1.69 2.30 5.29 3.30 10.89 4.30 18.49
Funktsiooni defineerimine
Kasutaja saab ise lisaks olemasolevatele funktsioone juurde meisterdada. Näiteks tekitame funktsiooni korruta(), mis vajab kahte arvulist argumenti, korrutab need omavahel ning tagastab tulemuse.
$a = 2; $b = 3; $tulemus = korruta($a, $b); print "$a * $b on võrdne $tulemus"; function korruta ($a, $b) { $korrutis = $a * $b; $a = 10; $b = 15; return $korrutis; }
Tulemus
2 * 3 on võrdne 6
Vaikimisi antakse funktsioonile üle muutuja väärtus, nagu näites. St kuigi funktsiooni sees defineeritakse $a ja $b väärtused ümber, ei mõjuta see skripti muutujate $a ja $b väärtusi. Need on sisuliselt erinevad muutujad, kuigi neil on samad nimed.
Soovides aga funktsiooni seest muuta skripti muutujaid, tuleb anda funktsioonile üle muutuja viide. Selleks kirjutatake muutuja nime ette ampersand (&)
$a = 2; $b = 3; $tulemus = korruta(&$a, &$b); print "$a * $b on võrdne $tulemus"; function korruta ($a, $b) { $korrutis = $a * $b; $a = 10; $b = 15; return $korrutis; }
Tulemus
10 * 15 on võrdne 6
Üldiselt peetakse puhtamaks stiiliks, kui funktsioon ei muuda skripti muutujaid, sest nii on teinekord keerukas võimalikke vigu leida. Operatsioonid sõnedega
PHP pakub vahendeid tegeleda sõnedega (ingl. k. string). Näiteks ühendame kokku kaks sõnet, omistades tulemuse muutujale $koos
$a = "Tere,"; $b = " mina siin"; $koos = $a.$b;
Käsuga strlen saab leida sõne pikkuse tähemärkides
$sone = "Taavet ja Koljat"; $pikkus = strlen ($sone);
Käsk strstr tagastab sõne, mille väärtuseks on tähemärgid alates leitud sõnest kuni lõpuni, näiteks
$email = 'priit@zoo.edu.ee'; $domain = strstr ($email, '@'); print $domain;
tagastab @zoo.edu.ee.
Sõnest eraldab osa käsk substr, näiteks eemaldame kõik peale esimese tähemärgi
$domain = "@zoo.edu.ee"; $domaininimi = substr ($domain, 1)
$domaininimi väärtuseks saab zoo.edu.ee.
Veebivormidega tegeledes kasutatakse tihti sarnase struktuuriga sõnesid "nimi=Villem&vanus=25&elukoht=Tartu+linn". Käsu parse_str abil on lihtne omistada muutujaile vastavad väärtused
$str = "nimi=Villem&vanus=25&elukoht=Tartu+linn"; parse_str($str); echo "$nimi"; echo "$vanus"; echo "$elukoht";
Massiiv
Massiivi tüüpi muutujat märgitakse sarnaselt tavalise muutuja nimega, kuid tema kasutamisel peab arvestama, et tegu on massiiviga. Näiteks defineerime massiivi ja trükime välja selle elemendid
$mass = array ("Priit", "Jaan", "Memm", "Kana", "Ivo"); $a = current ($mass); do { print "$a "; } while ($a = next ($mass));
funktsioon current tagastab massiivi esimese elemendi väärtuse; next järgmise elemendi väärtuse.
Omades sõnet
$sone = "Priit Jaan Memm Kana Ivo";
saab selle teisendada tühikute kohalt massiiviks käsuga split
$mass = split (" +", $sone);
kus " +" on regulaaravaldis. Kui tulevase massiivi elemente eraldaks üks tühik, võiks kasutada sarnaselt käsku explode.
$sone = "Priit Jaan Memm Kana Ivo"; $mass = explode (" ", $sone);
Vastupidiselt, massiivi saab ühendada sõneks käsuga join
$mass = array ("Priit", "Jaan", "Memm", "Kana", "Ivo"); $sone = join (":", $sone);
tulemuseks on sõne
Priit:Jaan:Memm:Kana:Ivo
Massiivi üksikute elementide poole saab pöörduda indeksi abil, indekseerimine algab nullist. Näikeks trükime üle ühe välja massiivi elementide väärtused
for ($i=0; $i < sizeof ($mass); $i+=2) { print "$i. $mass[$i] "; }
Funktsioon sizeof tagastab massiivi elementide arvu ning konstruktsioon $i+=2 suurendab iga kordusega muutuja $i väärtust kahe võrra. Konstruktsioon $mass[$i] abil pöördutakse massiivi $mass $i-nda elemendi poole.
Käsk array_pop tagastab massiivi viimase elemendi väärtuse ja eemaldab ta massiivist
$mass = array ("Priit", "Jaan", "Memm", "Kana", "Ivo"); $viimane = array_pop ($mass);
Käsk array_shift tagastab massiivi esimese elemendi väärtuse ning eemaldab ta massiivist; ülejäänud elemendid nihutatakse ühe positsiooni võrra ettepoole
$mass = array ("Priit", "Jaan", "Memm", "Kana", "Ivo"); $viimane = array_shift ($mass);
Sarnaselt lisatakse masiivi algusse ja lõppu elemente käskudega array_unshift array_push
$mass = array ("Priit", "Jaan", "Memm", "Kana", "Ivo"); $elementide_uus_arv = array_unshift ($mass, "Laine", "Jaa"); $elementide_uus_arv = array_push ($mass, "Leo", "Liina");
Tulemuseks on massiiv ("Laine", "Jaa", "Priit", "Jaan", "Memm", "Kana", "Ivo", "Leo", "Liina"), kusjuures mõlemad käsud tagastavad väärtusena uue massiivi elementide arvu.
Assotsiatiivne massiiv
Tavalises massiivis saab üksikute elementide poole pöörduda kasutades elemendi indeksit, mis on täisarvuline ja algab nullist. Defineerime massiivi
$massiiv[0] = "Jaan"; $massiiv[1] = "Peeter"; $massiiv[2] = "Laur";
Näiteks pöördume teise elemendi poole
print "$massiiv[1]";
Assotsiatiivse massiivi puhul võib see indeks olla ka tekstiline. Assotsiatiivse massiivi puhul nimetatakse indeksit võtmeks ja seda, millega võti on seotud, väärtuseks. Defineerime massiivi
$inimesed["Priit"] = "21"; $inimesed["Jaan"] = "54";
ning pöördume teise elemendi poole
print "$inimesed["Jaan"];
Tulemusena tagastatakse väärtus 54.
Assotsiatiivsus tähendab, et andmed on sisuliselt paarikaupa seotud: näiteks nimi ja vanus. Esitame terviklikuma näite
$inimesed = array ("Priit" => "21", "Jaan" => "54", "Memm" => "67", "Kana" => "82", "Ivo" => "14"); while (list ($nimi, $vanus) = each ($inimesed)) { print "$nimi $vanus
"; }
Pikema massiivi korral võib selle sisu ulatuda üle mitme rea tingimusel, et viimase rea lõpetab semikoolon (;) nagu näites.
Esimesel kahel real defineeritakse massiiv $inimesed. Seejärel kasutatakse while kordust massiivi väärtuste väljatrükkimiseks. each tagastab iga kord kaks väärtust, mis omistatakse käsuga list muutujaile $nimi ja $vanus.
Teisendame tavalise massiivi assotsiatiivseks
$inimesed = array ("Priit", "21", "Jaan", "54", "Memm", "67", "Kana", "82", "Ivo", "14"); for ($i=0; $i < sizeof ($inimesed); $i+=2) { $ass_mass[$inimesed[$i]] = $inimesed[$i+1]; } while (list ($nimi, $vanus) = each ($ass_mass)) { print "$nimi $vanus "; }
Käsuga array_keys saab assotsiatiivsest massiivist kätte kõik võtmed, tagastatakse tavaline massiiv võtmenimelisi väärtusi
$inimesed = array ("Priit" => "21", "Jaan" => "54", "Memm" => "67", "Kana" => "82", "Ivo" => "14"); $votmed = array_keys ($inimesed); for ($i=0; $i < sizeof($votmed); $i++) { print "$votmed[$i]
"; }
Emaili saatmine
Saab seda teha mail funktsiooni kasutades näiteks sarnase skriptiga
<?PHP $to = "kasutaja@test.ee"; $subject = "TEST SUBJECT"; $message = "Hello! \n"; $message .= "More blah blah blah \n"; $message .= "blah blah blah blah blah blah blah blah blah \n"; $headers = "From: kasutaja@test.ee \r\n" . "Reply-To: kasutaja@test.ee \r\n" . "X-Mailer: PHP/" . phpversion(); mail($to, $subject, $message, $headers); echo $headers; ?>
MySQL-andmebaasiga suhtlemine
PHP pakub vahendid MySQL-andmebaasiga suhtlemiseks. Järgnevas näitame, kuidas kasutada MySQL palas tarvitatud andmebaasi puhul. Andmebaasiga suhtlemiseks peab PHP skript kõigepealt näitama andmebaasiserveri nime, kasutajanime, parooli ning kasutatava andmebaasi nime. Praktiliselt tähendab see, et need väärtused tuleb sisestada PHP skripti avatekstina, mis pole aga tingimata ebaturvaline, kuna PHP skripti ennast veebikoha külastaja ei näe.
Andmebaasi kirjete kuvamine
Skript kuvab kõigi andmebaasi kirjete sisu
// Ühendume andmebaasiserveriga $ab = mysql_connect("www.zoo.edu.ee", "zoo", "zooparool"); // valime andmetabeli mysql_select_db("zoo",$ab); // esitame päringu $tulemus = mysql_query("SELECT * FROM inimesed",$ab); print "< pre >"; // kuni päringutulemuste lõppemiseni täidame nendega // assotsiatiivse massiivi $rida ning trükime selle elementide väärtused while ($rida = mysql_fetch_array($tulemus)) { printf ("%12s %15d %15s\n",$rida["nimi"], $rida["vanus"], $rida["elukoht"]); } print "< /pre >";
Andmebaasi kirjete lisamine
Skript lisab andmebaasi kirje
<?php if ($submit) { // Ühendume andmebaasiserveriga $ab = mysql_connect("www.zoo.edu.ee", "zoo", "zooparool"); // valime andmetabeli mysql_select_db("zoo",$ab); // kirjeldame päringu $sql = "INSERT INTO rahvas VALUES ('$nimi','$vanus','$elukoht')"; // teostame päringu $tulemus = mysql_query ($sql); echo "< p >Asi valmis!< p >"; } ?> < form method= "post" action="<?php echo $PHP_SELF ?>" > Nimi:< input type= "textbox" name="nimi" >< br > Vanus:< input type= "textbox" name="vanus" >< br > Elukoht:< input type= "textbox" name="elukoht" >< br > < input type="submit" name= "submit" value= "Sisestan andmed" > < /form >
Näide illustreerib ka ühte PHP skriptidele iseloomulikku asjaolu - skript kutsub ennast ise taas välja. Nimelt pole esmakordsel skripti brauserisse laadimisel ilmselt veel vajutatud submit nuppu ja seetõttu on muutuja $submit väärtustamata. Tingimuse if ($submit) plokk jäetakse täitmata ja esitatakse ainult vorm. Vormi ACTIONiks oleva muutuja $PHP_SELF väärtus on alati võrdne skripti URLiga, näiteks http://www.zoo.edu.ee/skript.php. Täites vormi ja valides OK kutsutakse seesama PHP skript välja, kuid muutuja $submit on nüüd väärtustatud ja seetõttu täidetakse if tingimusele järgnev plokk. See plokk suhtleb andmebaasiga.
Andmebaasi ühendus lõpetatakse automaatselt peale skripti täitmise lõppu.
PostgreSQLi andmebaasiga suhtlemine
PHP pakub vahendid PostgreSQLi andmebaasiga suhtlemiseks. Järgnevas näitame, kuidas kasutada PostgreSQLi palas tarvitatud andmebaasiga. Andmebaasiga suhtlemiseks peab PHP skript kõigepealt näitama andmebaasiserveri nime, kasutajanime, parooli ning kasutatava andmebaasi nime. Praktiliselt tähendab see, et need väärtused tuleb sisestada PHP skripti avatekstina, mis pole aga tingimata ebaturvaline, kuna PHP skripti ennast veebikoha külastaja ei näe.
Andmebaasi kirjete kuvamine
Skript kuvab kõigi andmebaasi kirjete sisu
// Ühendume andmebaasiserveriga $ab = pg_connect ("host=www.zoo.edu.ee user=zoo dbname=zoo password=zooparool") // esitame päringu $tulemus = pg_exec ($ab, "SELECT * FROM inimesed"); $ridu = pg_numrows($tulemus); print "< pre >"; // kuni päringutulemuste lõppemiseni täidame nendega // assotsiatiivse massiivi $rida ning trükime selle elementide väärtused for ($i = 0; $i < $ridu; $i++) { $rida = pg_fetch_array($tulemus, $i); printf ("%12s %15d %15s\n", $rida["nimi"], $rida["vanus"], $rida["elukoht"]); } print "< /pre >";
Andmebaasi kirjete lisamine
Skript lisab andmebaasi kirje
<?php if ($submit) { // Ühendume andmebaasiserveriga $ab = pg_connect ("host=www.zoo.edu.ee user=zoo dbname=zoo password=zooparool"); // kirjeldame päringu $sql = "INSERT INTO inimesed VALUES ('$nimi','$vanus','$elukoht')"; // teostame päringu $tulemus = pg_exec ($ab, $sql); } ?> <form method="post" action="<?php echo $PHP_SELF ?>"> Nimi:<input type="Text" name="nimi">
Vanus:<input type="Text" name="vanus">
Elukoht:<input type="Text" name="elukoht">
<input type="OK" name="submit" value="Sisestan andmed"> </form>
Näide illustreerib ka ühte PHP skriptidele iseloomulikku asjaolu - skript kutsub ennast ise taas välja. Nimelt pole esmakordsel skripti brauserisse laadimisel ilmselt veel vajutatud submit nuppu ja seetõttu on muutuja $submit väärtustamata. Tingimuse if ($submit) plokk jäetakse täitmata ja esitatakse ainult vorm. Vormi ACTIONiks oleva muutuja $PHP_SELF väärtus on alati võrdne skripti URLiga, näiteks http://www.zoo.edu.ee/skript.php. Täites vormi ja valides OK kutsutakse seesama PHP skript välja, kuid muutuja $submit on nüüd väärtustatud ja seetõttu täidetakse if tingimusele järgnev plokk. See plokk suhtleb andmebaasiga.
Andmebaasi ühendus lõpetatakse automaatselt peale skripti täitmise lõppu.