Takaisin php-ohjelmoinnin etusivulle


PHP: Viisi yksinkertaista php-toimintoa nettisivuille

Pyrithän aina siihen, että tekemäsi nettisivut noudattavat ainakin näitä standardeja:

Valid XHTML 1.0 Transitional Valid CSS!


Muistathan, että yllä olevien linkkien tarkoitus on: a) antaa itsellesi mahdollisuus vaivattomasti tarkistaa sivusi, b) antaa sivullasi vierailijoille mahdollisuus tarkistaa sivusi "laatu".

Nettisivuja tekiessäni olen usein päätynyt seuraavaan johtopäätökseen: yksin tekiessä on tärkeää osata käyttää yksinkertaisimpia ja helpoimmin toteutettavia ratkaisuja. Tätä periaatetta noudattaen aloitan php-tutoriaalien sarjanikin tutustumalla viiteen mahdollisimman yksinkertaiseen, mutta hyödylliseen php-toimintoon.

Vaikka php on myös olio-ohjelmointikieli, niin pitäydyn tässä ensimmäisessä oppaassani puhtaasti funktiopohjaisissa toteutuksissa. Tämä toimintatapa kuvastaa yleisemminkin suhtautumistani ohjelmointiprojekteihini: pyrin valitsemaan kulloiseenkin tehtävään parhaiten sopivat työkalut. Jos en koe tarvitsevani ohjelmintitehtävässäni esim. luokkarakenteita, en niitä keinotekoisesti yritä toteutukseeni lisätäkään.

Olio-ohjelmoinnin sijaan erittäin sopiva ohjelmointitekninen menetelmä yksinkertaisiin php-projekteihin on kirjoittaa php-koodi omaan ulkoiseen php-tiedostoon. Tällöin php-koodia ei tarvitse lisätä itse xhtml-sivulle kuin muutama rivi, eikä xhtml-lähdekoodin luettavuus kärsi. Tätä pikku projektiani varten tallensin php-funktioni tiedostoon basic-php-functions.php, jonka lähdekoodin annan kirjoitukseni lopussa, mutta nyt itse esimerkkeihini:



1) Kellonajan tulostaminen nettisivuille

Aloitetaan php-kielen esittely mahdollisimman yksinkertaisella kellonajan nettisivuille tulostavalla esimerkillä. Tulostuksen suorittaa funktio printTime:


function printTime()
{
	echo(date("h:i:s"));
}                     
            


Kun oheisen funktion tallentaa omaan ulkoiseen basic-php-functions.php -tiedostoon ja kutsuu sitä nettisivuillaan seuraavasti

Kello on nyt 
<?php
	require('basic-php-functions.php'); 
	printTime();
?>            
            


niin nettisivuille tulostuu kellonaika seuraavasti:

Kello on nyt 01:08:41

Yllä olevassa kellossa on kuitenkin vielä olennainen puute: se ei päivity itsestään. Päivämäärän tapauksessahan tämä ei ole mikään ongelma, koska harvempi sivustoilla vierailija on kiinnostunut sekunnin välein päivittyvästä päivämäärästä, mutta sekuntikellon on eri asia.

Tämän sekuntikello-ongelman ratkaiseminen tarjoaakin erinomaisen mahdollisuuden demonstroida käytännön nettiohjelmointia, jossa xhtml, css, php ja javascript nivoutuvat hienolla tavalla yhdeksi kokonaisuudeksi. Sekuntikello onkin toteutettavissa kätevimmin JavaScript-koodilla kuin php-koodilla.

Aloitettaan kellon kasaaminen lisäämällä nettisivujen xhtml-koodiin haluttuun kohtaan tyhjä div-elementti:


<div id="timeDiv">
</div>
            


Seuraavaksi lisätään div-elementin tyylimuotoilut sivua vastaavaan css-tiedostoon:


#timeDiv
{
	position: static;
	width: 150px;
	height: 30px;
	font: normal normal bold 18px arial;
	border: double 5px #0000FF;
	text-align: center;
	margin:  0px 0px 0px 0px;
	padding:  5px 0px 5px 0px;
}
            


Nyt on aika muotoilla elementin päivittävä javaScript-funktio, jonka voi lisätä joko ulkoiseen javaScript (.js, usein suositeltavin tapa) tiedostoon tai sivun head-osioon, kunten olen tällä sivulla tehnyt alla olevalle koodille:


<script language="JavaScript" type="text/javascript">
<!--            
	function updateclock()
	{
		var thetime=new Date();

		var nhours=thetime.getHours();	
		var nmins=thetime.getMinutes();
		var nsecn=thetime.getSeconds();
	
		// add a zero in front of numbers<10
		nmins = checkTime(nmins);
		nsecn = checkTime(nsecn);
	
		var timeDivObj        = document.getElementById('timeDiv');
		timeDivObj.innerHTML  = nhours+": "+nmins+": "+nsecn;
	}

	function startclock()
	{
		setInterval('updateclock()',1000);
	}

	function checkTime(i)
	{
		if (i<10) {
			i = "0" + i;
		}
  		return i;
	}

	startclock();
-->
<script/>                
			


On tärkeää huomata php- ja JavaScript-kellojen perimmäinen ero: php-toteutus ottaa aikansa palvelimelta ja JavaScript-toteutus käyttää käyttäjän koneen osoittamaa aikaa. Tämä heijastaa myös php- ja JavaScript-kielien käyttötarkoitusten eroa: php-kieli on palvelinohjelmointia varten, JavaScript on selainohjelmointia varten.

Yllä olevalla tavalla toteutettu kellomme näyttää nyt tältä:



2) Sivut päivitetty teksti.

Tämänkin pystyy toteuttamaan sivulleen vaikkapa ainoastaan yhdellä php-koodirivillä, mutta muunnan tässä esimerkissäni tekstin suomenkieliseksi, jotta voin samalla esitellä myös if-lauseen käytön php-kielessä. Toteutukseni on alla funktiossa pageModified:


            
function pageModified()
{
	$year = date("Y",getlastmod());
	$mon  = date("n",getlastmod());
	$day  = date("j",getlastmod());
	
	if( $mon == "1")
	{
		$mon = "tammikuuta";
	}
	else if( $mon == "2")
	{
		$mon = "helmikuuta";
	}
	else if( $mon == "3")
	{
		$mon = "maaliskuuta";
	}
	else if( $mon == "4")
	{
		$mon = "huhtikuuta";
	}
	else if( $mon == "5")
	{
		$mon = "toukokuuta";
	}
	else if( $mon == "6")
	{
		$mon = "kesäkuuta";
	}
	else if( $mon == "7")
	{
		$mon = "heinäkuuta";
	}
	else if( $mon == "8")
	{
		$mon = "elokuuta";
	}
	else if( $mon == "9")
	{
		$mon = "syyskuuta";
	}
	else if( $mon == "10")
	{
		$mon = "lokakuuta";
	}
	else if( $mon == "11")
	{
		$mon = "marraskuuta";
	}
	else if( $mon == "12")
	{
		$mon = "joulukuuta";
	}
	
	echo("Tämä sivu on päivitetty " . $day . ". " . $mon . " " . $year . ".
"); }


Yllä oleva funktio tulostaa nettisivuille tekstin:

Tämä sivu on päivitetty 15. syyskuuta 2009.




3) Tiedon lukeminen xml-tiedostosta ja tulostamien osaksi xhtml-sivua tulevaksi taulukoksi.

Flash-opppaissani käyn näytän kuinka helppoa xml-tiedostoihin tallennetun tiedon lukeminen on ActionScript 3:lla. Ei liene myöskään suuri yllätys, että myös php-kielessä xml-tiedostojen lukeminen on tehty erittäin helpoksi.

Ennen kuin esittelen itse php-toteutukseni haluan korostaa kuinka hyödyllistä xml-tiedostojen käyttäminen on:

a) Nettisivuja tehtäessä on usein järkevää erotella sivun toteuttava koodi (xhtml-tiedosto), sivun tyylimuotoilu (css-koodi) ja sivun tietosisältö (xml-tiedosto tai tietokannat) erillisiin tiedostoihin ja toteutustapoihin. Tämä mahdollistaa sen, että eri tahot voivat tuottaa toisistaan riippumatta nämä lopulliseksi nettisivuksi kasattavat komponentit. Tällöin riittää, että ohjelmoijat tuntevat eri komponenttien väliset rajapinnat ja osaavat toteuttaa oman komponenttinsa. Vastaava komponenttiajattelu on hyödyllistä myös yksin työskennellessä, sillä on paljon helpompaa työskennellä kerrallaan yhden komponentin parissa kuin kaikkien kolmen yhtäaikaa.

b) Yhdistelmällä xml- ja php-kieliä saadaan aikaiseksi dynaamiset nettisivut, jolloin nettisivuille tulostuvaa tietoa voidaan muuttaa ilman, että itse xhtml-koodia tarvitsee muuttaa. Esim. hiihtokilpailujen tulokset olisi helppo lisätä osaksi nettisivuja tallentamalla ne hyvin muotoiltuun xml-tiedostoon. Sama periaate toimii päivitettäessä nettisivuja tietokantoihin tallennetulla informaatiolla.

Tallensin tätä esimerkkiä varten kolmen digikuvaamani perhosen nimitiedot tiedostoon ten-data.xml:



<?xml version="1.0" encoding="utf-8"?>
<root>
	<butterfly>
		<finnish>
			Amiraali
		</finnish>
		<scientific>
			Vanessa atalanta
		</scientific>
		<english>
			Red Admiral
		</english>
		<swedish>
			Amiral
		</swedish>	
	</butterfly>

	<butterfly>
		<finnish>
			Angervohopeatäplä
		</finnish>
		<scientific>
			Brenthis ino
		</scientific>
		<english>
			Lesser marbled fritillary
		</english>
		<swedish>
			Älggräspärlemorfjäril
		</swedish>	
	</butterfly>

	<butterfly>
		<finnish>
			Haapaperhonen
		</finnish>
		<scientific>
			Limenitis populi
		</scientific>
		<english>
			Poplar Admiral
		</english>
		<swedish>
			Aspfjäril
		</swedish>	
	</butterfly>
</root>
            
            


Yllä olevan xml-tiedoston tagien nimet ovat tätä esimerkkiäni varten keksimiäni. HUOMATKAA: xml-tiedostoissa ei sinällään ole mitään ihmeellistä tai vaikeaa. Käytännössä xml-tiedosto on vain (useinmiten) tiedonsäilömiseen tarkoitettu, järkevästi muotoiltu, tiettyjä sääntöjä noudattava, tekstitiedosto. xml-tiedostojen hienous onkin nimenomaan niiden yksinkertaisuudessa ja helppokäyttöisyydessä.

Pienenä piikkinä nykyajan työhakemusten ja CV:den täyttäville kirjainlyhenteille kehottaisinkin kaikkia yllä olevan lukeneita (jotka eivät vielä ole laittaneet) laittamaan CV:hinsä maininnan xml-osaamisesta.

Nyt kun taulukkoon tulostettavat tiedot ovat olemassa xml-tiedostossa on aika tehdä tiedot xml-tiedostosta nettisivulle tulostava php-funktio printXMLTable:


function printXMLTable($fname)
{
	$xml = simplexml_load_file($fname);
	
	echo($fname);
	
	echo("<table class=\'xml_table\'>");
	
	echo("<tr class=\'xml_table_tr\'>");
	echo("<td class=\'xml_table_td\'>");
	echo("Suomenkielinen nimi:");
	echo("</td>");
	echo("<td class=\'xml_table_td\'>");
	echo("Tieteellinen nimi:");
	echo("</td>");
	echo("<td class=\'xml_table_td\'>");
	echo("Englanninkielinen nimi:");
	echo("</td>">;
	echo("<td class=\'xml_table_td\'>");
	echo("Ruotsinkielinen nimi:");
	echo("</td>");
	echo("</tr>");
	
	
	foreach ($xml->butterfly as $bf) {
		echo("<tr class=\'xml_table_tr\'>");
		foreach ($bf->children() as $child) {
			echo("<td class=\'xml_table_td\'>");
			echo($child);
			echo("</td>");
		}
		echo("</tr>");
	}

	echo("</table>");
	
}                  
            


Yllä oleva erittäin yksinkertainen funktio printXMLTable riittää xml-tiedostoon tallennettujen tietojen tulostamiseksi nettisivuilla näkyväksi table-elementiksi.

Kuten yllä olevasta koodista näkee olen käyttänyt taulukon muotoilemiseksi table, tr ja td -elementeille class-attribuuttia ja piilottanut näin itse tyylimuotoilut järkevään tapaan css-tiedostoon tallennettaviksi riveiksi:


table.xml_table
{
	position: static;
	margin: 0px 0px 0px 0px;
	padding: 0px 0px 0px 0px;
	width: 650px;
	font: normal normal normal 12px arial;
	border: solid 2px #000000;
}

tr.xml_table_tr
{
	margin: 0px 0px 0px 0px;
	padding: 0px 0px 0px 0px;
}

td.xml_table_td
{
	margin: 0px 0px 0px 0px;
	padding: 0px 0px 0px 0px;
	background-color: #99CCFF;
	
}            
 			           
            

Lopputuloksena on alla näkyvä xml-tiedostosta luettava taulukko:

Suomenkielinen nimi:Tieteellinen nimi:Englanninkielinen nimi:Ruotsinkielinen nimi:
Amiraali Vanessa atalanta Red Admiral Amiral
Angervohopeatäplä Brenthis ino Lesser marbled fritillary Älggräspärlemorfjäril
Haapaperhonen Limenitis populi Poplar Admiral Aspfjäril




4) Yksi käytetyimmistä php-skripteistä on tulostaa php-koodin avulla kalenteri omille nettisivuilleen. Minäkin olen lisännyt kalenterin omille nettisivuilleni, joten esittelen tässä esimerkissäni nyt sen lähdekoodin:

function printCalender()
{
 	$today     = getdate();
	$firstDay  = getdate(mktime(0,0,0,$today['mon'],1,$today['year']));
	$lastDay   = getdate(mktime(0,0,0,$today['mon']+1,0,$today['year']));
	$firstwday = $firstDay['wday'];
	$lastwday  = $lastDay['wday'];
	$currentdate = $today[mday];
	
	if($firstwday == 0)
	{
		$firstwday = 7;
	}
	if($lastwday == 0)
	{
		$lastwday = 7;
	}
	
	$mon = $today['mon'];
	
	if( $mon == "1")
	{
		$mon = "Tammikuu";
	}
	else if( $mon == "2")
	{
		$mon = "Helmikuu";
	}
	else if( $mon == "3")
	{
		$mon = "Maaliskuu";
	}
	else if( $mon == "4")
	{
		$mon = "Huhtikuu";
	}
	else if( $mon == "5")
	{
		$mon = "Toukokuu";
	}
	else if( $mon == "6")
	{
		$mon = "Kesäkuu";
	}
	else if( $mon == "7")
	{
		$mon = "Heinäkuu";
	}
	else if( $mon == "8")
	{
		$mon = "Elokuu";
	}
	else if( $mon == "9")
	{
		$mon = "Syyskuu";
	}
	else if( $mon == "10")
	{
		$mon = "Lokakuu";
	}
	else if( $mon == "11")
	{
		$mon = "Marraskuu";
	}
	else if( $mon == "12")
	{
		$mon = "Joulukuu";
	}
         
	echo '<table class="pvmTable">';
	echo '  <tr class="dateField"><td colspan="7">'.$mon." - ".$today['year']."</td></tr>";
    echo '<tr class="daysField">';
	echo '  <td>Ma</td><td>Ti</td><td>Ke</td><td>To</td>';
	echo '  <td>Pe</td><td>La</td><td>Su</td></tr>';

	// Display the first calendar row with correct positioning
	echo '<tr class="numbers_row">';
	
	$actday = 1;
	for($i=1;$i<$firstwday;$i++)
	{
    	echo '<td> </td>';
		$actday++;
    }
	
	$dayindex=1;
    for($i=$actday;$i<=7;$i++)
	{
		if ($dayindex == $today['mday']) 
		{
			$class = ' class="actday"';
		}		 
		else 
		{
			$class = ' class="numbers_td"';	
		}
        echo "<td$class>$dayindex</td>";
		$dayindex++;
	}
	echo '</tr>';
	
	//Get how many complete weeks are in the actual month
	$fullWeeks = floor(($lastDay['mday']-$dayindex)/7);
	for ($i=0;$i<$fullWeeks;$i++)
	{
		echo '<tr>';
		for ($j=0;$j<7;$j++)
		{			
			if ($dayindex == $today['mday']) 
			{
				$class = ' class="actday"';
			} 
			else 
			{
				$class = ' class="numbers_td"';
			}
			echo "<td$class>$dayindex</td>";
			$dayindex++;
		}
		echo '</tr>';
	}
	
	//Now display the rest of the month
	if ($dayindex <= $lastDay['mday'])
	{
		echo '<tr>';
		for ($i=0; $i<7;$i++)
		{
			
			if ($dayindex == $today['mday']) 
			{
				$class = ' class="actday"';
			} 
			else 
			{
				$class = ' class="numbers_td"';
			}
			if ($dayindex <= $lastDay['mday'])
			{
				echo "<td$class>$dayindex</td>";
			}
			else 
			{
				echo '<td> </td>';
			}
			$dayindex++;
		}
        echo '</tr>';
	}
	echo '</table>';
}     
            
           
            


Yllä oleva koodi on melko pitkähkö, joka johtuu siitä, että itse kalenteri-tablen generoiminen ei ole ihan suoraviivainen ongelma (kuukausissa on eri määrä päiviä, kuukaudet alkavat eri viikonpäivinä, kuukausissa on eri määrä viikkoja, jne...) Kuitenkin itse php-koodissa on vain muutama oleellinen kohta: a) päivämäärä haetaan getdate-funktiolla, b) echo-funktion kutsuilla tulostetaan taulukon (table) muodostavat xhtml-elementit nettisivulle, 3) tulostan funktiossa table, tr ja td -elementeille class-attribuutin, jonka avulla voin asettaa taulukon tyylimuotoilut omassa stylesheet (.css) -tiedostossa.

Hyvän koodaus tavan mukaan yllä olevan table-taulukon muotoilut on hyvä laittaa omaan css-tiedostoonsa:

table.pvmTable
{
	background: #6699FF url('pics/tableBg20.jpg');
	width: 200px;
	height: 150px;
	margin: 0px;
	padding: 0px;
}

tr.dateField
{
	text-align:center;
	font: normal normal bold 12px arial;
}

tr.daysField
{
	font: normal normal normal 10px arial;
}

tr.numbers_row
{
	font: normal normal normal 10px arial;
}

td.numbers_td
{
	font: normal normal normal 10px arial;
}

td.marked_td
{
	font: normal normal normal 10px arial;
	background-color: #FFFF00;
}

td.marked_actday_td
{
	font: normal normal normal 10px arial;
	background-color: #FFFF00;
}

td.actday
{
	font: normal normal normal 10px arial;
	background-color:#FFFFCC;
}            
            
            
Yllä olevin css-asetuksin kalenteri näyttää tältä (ulkoasu on css-koodin avulla helppo sopeuttaa omille nettisivuille):

Lokakuu - 2017
MaTiKeTo PeLaSu
      1
2345678
9101112131415
16171819202122
23242526272829
3031     






5) Koska php-kielen ensisijainen käyttötarkoitus on nimenomaan tarjota palvelinpuolen toiminnallisuutta nettisivuille, lienee sopivaa ottaa viimeiseksi esimerkiksi vieraskirjan toteuttaminen nettisivuille.

"Isot pojat" totettavat vieraskirjansa erilaisten tietokantaratkaisujen avulla, mutta pitäydyn tässä yksinkertaisuuden ja jo edellä esittelemäni xml-tiedostojen vuoksi xml-pohjaisessa toteutuksessa. Etuna tässä ratkaisussa on lisäksi se, ettei tällaisen vieraskirjan omaavalla palvelimella tarvitse olla tietokantatukea, php-tuki riittää. Lisäksi normaalin vieraskirjan tapauksessa xml-tiedosto on aivan tarpeeksi hyvä tapa säilöä tietoa, sillä onhan siinäkin tiedot säilötty rakenteellisesti hyvin.

Luodaan vieraskirjaa varten ensin xhtml-lomake (form), jonka avulla käyttäjä voi antaa haluamansa palautteen. Huomautan tässä yhteydessä, että lomakkeen voi laatia myös flashilla / ActionScript 3:lla, koska vastaavanlainen php-toteutus toimii niidenkin kanssa. xhtml-sivuille lisättävän xhtml-lomakkeen koodi on


<div id="guestDiv">

<form action='saveForm.php' onsubmit='send_form();' method='post' id="guestForm">
	Nimi: <input type='text' name='name' size='20'><br />
	Viesti:<br />

	<textarea name='comment' rows='5' cols='40'></textarea><br />
	<input type='submit' name='submit' value='Lähetä'>
</form> 
<br /><br />
           
<a name="notes"></a>
<?php
	loadForm();
?>
            
</div>
            
            


Hyvän koodaustavan mukaisesti laitetaan taas lomakkeen ja lomakkeen sivältävän div-elementin muotoilut css-tiedostoon:


#guestDiv
{
	position: static;
	width: 500px;
	font: normal normal bold 14px arial;
	font-family: "Comic Sans MS", arial;
	text-align: left;
	margin:  0px 0px 0px 150px;
	padding:  0px 0px 0px 0px;
}

#guestForm
{
	position: static;
	margin:  0px 0px 0px 0px;
	padding:  0px 0px 0px 0px;
}          
            
            
Toteutetaan seuraavaksi php-koodin avulla käyttäjän antaman palautteen tallentaminen xml-tiedostoon. Olen kirjoittanut formin action-atribuuttiin tiedoston nimen, joka ajetaan kun lomake lähetetään. Ajettava php-koodi on siis tässä tiedostossa saveForm.php:

<?php
$Name 		= $_POST["name"];
$Comment 	= $_POST["comment"];
	
$Comment = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>", $Comment);
	
$Name 		= stripslashes($Name);
$Comment 	= stripslashes($Comment);

if( $Name != '' && $Comment != '')
{	
	$xmlName       = "GuestBook.xml";
	$xml           = simplexml_load_file($xmlName);	
	
	$noteText         = "<name>" . $Name . "</name><comment>" . $Comment . "</comment>";
	$xmlNoteNode      = $xml->addChild("note");
	$xmlNameNode      = $xmlNoteNode->addChild("name",$Name);
	$xmlCommentNode   = $xmlNoteNode->addChild("comment",$Comment);
		
	$xml->asXML("GuestBook.xml");
}

header("Location: php-perusfunktiot.php#notes");
?>            
            
            
            


Jälleen ei voi kuin ihmetellä kuinka php-kielen avulla voi muutamalla koodirivillä saada tiedot tallennettua xml-tiedostoon.

Tämän jälkeen jäljelle jää vain vieraskirjan sisällön tulostaminen nettisivuille. Tämä onnistuu vaikkapa tiedostoon basic-php-functions.php tallentamani funktion

function loadForm()
{
	$xmlName = "GuestBook.xml";
	$xml = simplexml_load_file($xmlName);
	
	foreach ($xml->note as $notes) {
		foreach ($notes->children() as $child) {
			
			if($child->getName() == "comment")
			{
				echo("Viesti: ");
				echo($child);
				echo("<br /><br /><br />");
			}
			else
			{
				echo("Nimi: ");
				echo($child);
				echo("<br />");
			}			
		}
	}	
} 
            


Vieraskirja on nyt valmis, mutta siinä on vielä kiusallinen ominaisuus: se ei muistuta käyttäjää kenttien jäädessä tyhjäksi. Tämä käyttäjän antaman syötteen tarkistus on kätevintä tehdä jo käyttäjän nettiselaimessa, joten kätevin työkalukin tämän suorittamiseen on JavaScript-funktio, jonka voi laitaa laukeamaan lomakkeen onsubmit-attribuutista.

Itse send_form-funktio on lyhyt ja se huomauttaa käyttäjää ainoastaan tyhjästä syötteestä. Samalta pohjalta olisi kuitenkin helppo tehdä paljon edistyneempiä syöteentarkastajia.


function send_form()
{
    var valid = true;

    if ( document.getElementById("nameID").value == "" )
    {
        alert ( "Nimikenttä ei saa olla tyhjä!" );
        valid = false;
    }
	
	if ( document.getElementById("commentID").value == "" )
    {
        alert ( "Viestikenttä ei saa olla tyhjä" );
        valid = false;
    }
	
	if( valid == false)
    	return;
		
	return true;
}
            
            


Lupasin antaa tässä oppaassa käyttämäni php-funktiot oppaani lopussa, joten tässä ne ovat tiedostossa basic-php-functions.txt (Muuta tiedoston nimi .php-loppuiseksi ja lisää koodin ensimmäiseksi riviksi <?php ja viimeiseksi riviksi ?>).

1 päivitys oppaaseeni: Kiitos Hp:lle hyvästä ja asiantuntevasta alla olevasta palautteesta (lisäsin Hp:n tekstiin virheellisen toteutukseni karsimat äö-kirjaimet). Juuri tuollaisen palautteen vuoksi näitä "oppaita" jaksaa tehdä (koska näissä oppii kaikki osapuolet, myös itse).

Sitten virheeseeni php-koodissa. hyödylliseen ereg_replace-funktioon kannattaa tutustua vaikka osoitteessa http://fi.php.net/ereg_replace (Sen sijaan, että itse alkaisin selittää funktiota jota en täysin ymmärrä, jätän asia minua viisaammille). Joka tapauksessa tuon linkin perusteella kokeilin laittaa viestikirjaani ominaisuuden korvata kaikki http:// alkuiset tekstit linkeillä. Ja tuo näyttää toimivan! Ja se yksi koodirivi joka tuon korvauksen tekee on


$Comment = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>", $Comment);
            


No, php-koodi ei ole aina mukavan helppotajuisen näköistä, mutta tehokkaasti tuo asiansa hoitaa.

Muutenkin Hp:n kommentit xhtml:stä ja css:stä ovat lukemisen arvoiset.

Omista kokemuksistani, näiden standardien seuraamisessa voisin ottaa pari esimerkkiä. Ehkä hauskin (tai surullisin) esimerkkini on valid css-logon lisäämisestä. Esim. Tämän sivun css-validointia vastaavalla sivulla annetaan linkkiosoite:

Kyseisellä sivulla pyydetään lisäämään linkkiteksti:

http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fwww.talaakso.fi
%2Fsuomi%2Fohjelmointi%2Fphp%2Fphp-perusfunktiot.css&profile=css21&usermedium=all&warning=1
            
, mutta ei varoiteta että & merkit linkissä pitää korvata &amp; kirjoituksella, jotta xhtml-validaattori ei valita tuosta. Eli siis lisäämällä sokeasti valid css-tunnuksen sivuilleen voi samalla poistaa valid xhtml-tunnuksen sivuiltaan. No, ei tuolle hirveän montaa kertaa jaksa nauraa. Näitä vastaavia leikkaa/liimaa -ongelmia on etenkin linkkiosoitteiden ja img-tagin alt-attribuutin puuttumisten kanssa.

css-tiedostojen kanssa minua on eniten harmittanut se, että paljon käyttämässäni osittainen läpinäkyvyys muotoilussa ei tueta standardia, vaan joudun joka kerta kirjoittamaan (leikkaamaan/liimaamaan) kolme eri varsiota nettiselaintuen varmistamiseksi:


/* for IE */
filter:alpha(opacity=80);
/* CSS3 standard */
opacity:0.8;
/* for Mozilla */
-moz-opacity:0.8;            
            


Käytännössä kaikki kolme versiota ovat identtisiä, mutta ne kuitenkin kirjoitetaan eri tavalla, ei kovin kätevää! Ja tietenkään tuo ei ole enää validia css:ää.

Eli johtopäätöksenä äskeisestä. Standardien noudattamisessa täytyy yrittää käyttää tervettä maalaisjärkeä. Sillä ei ole mitään mieltä tehdä standardin mukaiset sivut, jotka näkyvät vain harvoille sellaisina kuin ne pitääkin näkyä.

Mutta yleisellä tasolla standardien noudattaminen on järkevää: a) se vähentää omaa turhaa työtä (joka syntyy erilaisten vaihtoehtoisten toteutustapojen koodaamisesta), b) se palkitsee myös muita järkevästi standardeja noudattavia.

Takaisin PHP-ohjelmoinnin etusivulle