PHP-skola

Inledning
Innan du börjar
Konfigurering
Ditt första script
Variabler
Arrays
If, Else, While och For
Funktioner
Att bolla variabler mellan sidor
Referenser

 



24/08-03 | Niklas "Nicke." Berggren | f1restorm@hotmail.com


Inledning

PHP, vad är det egentligen? Vad används det till? Är det svårt? Behöver jag en bok?

Detta är frågor som ofta ploppar upp på 64bits forum. Jag har här tänkt förklara grundläggande PHP, lite hur det fungerar, vad variabler, arrayer, funktioner är och viktigast av allt: hur du lär dig själv!

Till att börja med tänkte jag förklara vad PHP är och vad det kan göra för dig. PHP är absolut inte, motsatt vanlig tro, något som helst substitut för HTML, däremot kan PHP generera dynamisk HTML åt dig. Dynamisk HTML innebär att koden tar olika form med hänsyn till vissa villkor, t.ex. ditt IP, innehållet i en databas, antalet aktiva besökare på sidan etc.
Att jämföra PHP med HTML eller javascript går helt enkelt inte, eftersom den förstnämnda används för att generera data, de två senare används vid presentationen, vilka båda har genererats av din PHP-kod. PHP har aldrig med layout etc. att göra direkt, men däremot generarar den HTML åt dig som i sin tur har med layouten att göra.

Ytterligare en skillnad är att en browser aldrig ser röken av korrekt PHP-kod, istället tolkar din webserver php-koden och skickar den resulterande koden/texten till browsern. HTML/javascript tolkas av din browser. PHP kallas serverside medans HTML/javascript kallas clientside. Logiskt, inte sant?
PHP behöver nödvändigtvis inte användas i samarbete med en webserver, utan är ett fullfjädrat scriptspråk i sig som kan användas för att uträtta saker på din dator i form av ett shellscript t.ex. Det vanligaste användningsområdet för PHP är otvivelaktligen på en webserver för att generera HTML, vilket främst är vad jag tänkte skriva om.

Varför skulle du vilja använda dig av PHP? Det beror på. Om du vill lägga upp en sida med information om isbjörnar och medföljande bilder på din tama isbjörn så behöver du troligen inte använda dig av PHP, så länge du vill att sidan ska se identisk ut för alla besökare. Vill du däremot använda dig av en databas för att publicera någonting? Eller kanske ha en enkel besöksräknare? Då kan PHP vara något för dig.

Innan du börjar

Det finns egentligen bara en sak du måste kunna innan du börjar koda PHP, det är HTML. Jag kan referera dig till lithers inlägg på webdesigndelen av 64bits forum om du inte har något vidare grepp om detta.
Saker som är mycket bra att ha åtminstone lite erfarenhet av sedan tidigare är programmeringsspråken C, perl eller java. PHP och C/java har en väldigt lik syntax och flera funktioner med samma namn och syfte. Detta är inget krav, det går utmärkt att lära sig PHP utan kunskaper i annat än HTML sedan tidigare men det blir så mycket enklare med bara lite C-kunskap. Lite grundläggande kunskap i hur en webserver fungerar är verkligen inte i vägen heller.

Konfigurering

ag förutsätter nu att du har PHP installerat och klart, behöver du hjälp med installationen kan du läsa thr/threats guide här på 64bits. Använder du dig av windows har jag ingen erfarenhet av detta, men det ska inte vara några svårigheter så länge du följer instruktionerna. IIS kan jag inte ge någon som helst hjälp med, och om du är rädd om din dator borde du inte överväga att använda det. Jag rekommenderar Apache som webserver, den finns gratis på www.apache.org
Konfigureringsfilen heter php.ini och lägger sig som standard i /usr/local/lib på ett *nix system och i din windowskatalogs system-katalog på en windowsdator.
Det finns inte allt för mycket här av intresse egentligen, så jag tar inte upp allt.
Det första av intresse vi stöter på är under avdelningen "Data Handling". Du kan här välja att sätta register_globals till On. Detta gör det lite enklare för dig att hantera variabler som skickas mellan sidor men samtidigt blir din kod lite osäkrare. Detta är inte att rekommendera, det är bättre om du lär dig koda "ordentligt" snarare än halvfuska, och få osäker kod. Alternativet är inte svårt.
Nästa intressanta del är upload_max_filesize. Denna inställning låter dig reglera hur stora filer du vill ta emot via HTTP-upladdning. PHP kan ta emot filer och behandla dem. Om du vill kan du t.ex. göra ett script som tar emot filer och parkerar i en katalog. Filuppladdning är knappast det första du kommer koda, och 2 MB som är standard är oftast tillräckligt.
Som ni ser finns det ganska mycket att göra i php.ini men inget som du behöver bekymra dig över.

Ditt första script

Då så, ska jag skippa snacket och börja visa kod kanske?
En mycket grundläggande sida i HTML brukar se ut som följer;

<html>

	<head>
		<title>Sidtitel</title>
	</head>
	<body>
		Innehåll på sidan
	</body>

</html>

Känns det bekant? Om nej, kan du sluta läsa nu. Känns det däremot igen så börjar vi med PHP, jag demonstrerar här ett script som ger samma output.

<?php
	echo "<html> \n";
	echo "\t<title>Sidtitel</title>\n";
	echo "\t\t<title>Sidtitel</title>\n";
	echo "\t</head>\n";
	echo "\t<body>\n";
	echo "\t\tInnehåll på sidan\n";
	echo "\t</body>\n";
	echo "</html>";
?>

Spara ovanstående som filnamn.php och kör igång via din webserver så ser du resultatet. Ganska identiskt med HTML-exemplet, inte sant?

Har du programmerat bara litegrann i C förut så känns det ganska bekant eller hur?
Då bryter jag ned koden i bitar och förklarar den för er.
"<?php" aktiverar (i brist på bättre ord) php-språket i din fil, så länge du inte skriver den motsatta taggen "?>" så är det PHP som gäller, inte HTML.
Innan jag går för långt in i det här får jag påminna om att <?php inte är en vanlig HTML-tagg, den tolkas istället av din webserver, som i sin tur skickar resultatet. En webbrowser ser aldrig röken av din PHP-kod.
Det här exemplet använder bara en sk. construct, nämligen echo, som jag tänkte förklara först eftersom det kommer vara bland det främsta du använder i dina första script.
Echo skriver helt enkelt ut vad som finns mellan citationstecknen. Det första echo-exemplet ser ut som följer; echo "<html>\n";. Ni kan enkelt gissa att den skriver tecknen "<html>". Vad ni kanske inte kan gissa är att \n ger en ny rad och att \t ger en ny tabbning. Dessa är inte nödvändiga, men det får din resulterande HTML att se mer strukturerad ut.

En enda echo kan användas över flera rader för att undvika en \n om du ska skriva ut ett större stycke, som såhär;

<?php
	echo "Rad Ett.<br>

	Rad Två.";
?>

På så sätt slipper du alla dessa "\n" samt att skriva "echo" om och om igen.

Det finns inget som hindrar dig att använda HTML ihop med PHP. Se följande exempel.

<html>
	<head>
		<title>Sidtitel</title>

	</head>
	<body>
		<?php
			echo "Innehåll på sidan";
		?>
	</body>
</html>

De första 5 raderna är vanlig HTML som du känner igen allt för väl, raderna 6, 7 och 8 däremot är PHP. "<?php" säger åt din webserver att det nu är PHP som gäller, nästa rad säger åt din webserver att skriva ut texten "Innehåll", den 8:e raden säger åt din server att PHP inte längre är aktuellt. Enkelt, inte sant?

Variabler

Då så, föregående 2 kodexempel gjorde ingenting åt dig som HTML inte hade kunnat göra, där var PHP fullständigt onödigt. Nu ska jag börja visa lite mer intressant kod.
Har du sysslat med matematik på ens låg nivå vet du vad en variabel är och vad ordet betyder, så jag tänker inte gå in på att förklara vad en variabel är.
En variabel i PHP identifieras av ett dollartecken, $, framför variabelnamnet. Se följande exempel;

<html>
	<head>

		<title>Sidtitel</title>
	</head>
	<body>
		<?php
			$hej = "Hej på er!";
			echo $hej;
		?>
	</body>

</html>

I variabeln $hej sparas värdet "hej på er", efter det använder vi constructen echo för att skriva ut innehållet i $hej. Variabler kan innehålla både siffror och texter (strängar). Vill du spara texter i en variabel får du använda citationstecken som i exemplet, vill du däremot spara t.ex. värdet 5 i en variabel behövs det inte, då ser det helt enkelt ut såhär;
$fnuffra = 5;

Man talar om att det finns fyra typer av variabler; integers, floats, strings och booleans.
En integer är ett heltal, en float är ett tal med decimaler, en string är en textsträng och en boolean kan bara ha två värden, sant eller falskt (TRUE, resp. FALSE).

Arrays

En array är en slags variabel, fast den kan innehålla flera värden samtidigt. Du kan se det som såhär; en variabel är en hylla med ett fack, du lägger precis vad du vill i det facket. En array är en hylla med flera fack. Du kan lägga en siffra i ett fack, en text-sträng i ett annat fack, men det är fortfaranda samma hylla. Se följande:

<?php
	$array[0] = 6;
	$array[1] = 8;
	$array[2] = -3;
?>

Variabeln heter $array, men nu har vi deklarerat 3 st fält, 0, 1 och 2, som innehåller ett värde var.

En array behöver inte nödvändigtvis ha ett numrerat fält, utan kan även ha ett namn.

<?php
	$array['Namn'] = "Claes Nilsson";
	$array['Address'] = "StorStadsVägen 12, Storstaden";
?>

Varför skulle du då vilja ha en array? Av flera anledningar faktiskt. Bland annat kommer frågan om struktur upp igen. I ovanstående exempel hade du kunnat använda $namn = "Claes Nilsson" och $address = "StorStadsVägen12, Storstaden", eller hur? Detta är sant, men tänk om du hade 20 olika namn att arbeta med? Titta på följande:

<?php
	$namn[0] = "Claes Nilsson";
	$namn[1] = "Mona Kroon";
	$namn[2] = "Asterix";
	$namn[3] = "Obelix";

	$address[0] = "StorStadsVägen 12, Storstaden";
	$address[1] = "The WestSide, New York";
	$address[2] = "Den galliska byn";
	$address[3] = "Den galliska byn";
?>

Det ser mycket bättre ut än att ha 8 olika variabler med halvknepiga namn på eller hur?

If, Else, While och For

Om du kodat C förut känner du igen dessa fyra, de används på precis samma sätt.
En if-sats utför en jämförelse mellan två variabler, eller en variabel och ett värde.
Se följande exempel;

<html>
  <head>
    <title>PHP-kåd</title>

  </head>
  <body>
    <?php
      $variabel = 7;
      if($variabel == 7) {
        echo "Variabeln är 7\n";
      }
      else {
        echo "Variabeln är inte 7\n";
      }
    ?>
  </body>
</html>

Scriptet utför följande;
Först sätter scriptet variabeln $variabel till siffran 7, efter det utför den en jämförelse med hjälp av en if-sats. Har du läst den minsta gnutta engelska kan du nog gissa vad som händer. Först kollar scriptet om $variabel är lika med 7, stämmer detta så utför scriptet vad som nu finns mellan måsvingarna. I detta fallet skriver den ut texten "Variabeln är 7".
Else fungerar som en slags komplettering för if, den utför någonting om if-satsen ovanför inte skulle stämma. Om $variabel hade varit 9 hade vad som finns mellan måsvingarna i else-satsen skrivits ut, i det här fallet "Variabeln är inte 7".
I fortsättningen kommer jag inte visa de öppnande HTML-taggarna i mina exempel eftersom de är överflödiga, jag antar att ni fattat galoppen ;)

Om du vill kontrollera om två saker är identiska så använder du dubbla lika-med tecken, men du är inte begränsad till att jämnföra likhet, se följande tabell för en lista med s.k. operatorer.

==Lika med
!=Inte lika med
<=Mindre eller lika med
>=Större eller lika med
<Mindre än
>Större än

Ett while-block utför även den en jämförelse, men inte riktigt på samma sätt som ett if-block.

<?php
  $fnuffra = 10;
  while($fnuffra >= 4) {
    echo "$fnuffra <br />\n";
    $fnuffra = $fnuffra-1;
  }
  echo "Klar";
?>

Följande kod borde vara ganska enkel att förstå. Först sätts variabeln $fnuffra till värdet 10, efter det kommer ett while-block som säger att så länge $fnuffra är större än värdet 4 så ska vad som finns mellan måsvingarna utföras. 10 är som bekant större än 4 så scriptet kommer utföra vad som finns mellan måsvingarna. Den skriver ut värdet i fnuffra, vilket är 10, och drar sedan bort 1 från $fnuffra. $fnuffra är nu 9. 9 är större än 4 så vad som finns mellan måsvingarna utförs igen. Scriptet kommer fortsätta så här ända tills $fnuffra är 3, vilket inte är lika med eller större än 4. Då skrivs texten "Klar".

<?php
  for($i = 1; $i <= 12; $i++) {
   echo "Hej nr. $i <br />\n";
  }
?>

Här demonstreras ett for-block, vilket kan se lite knepigt ut. Kortfattat säger ovanstående kodstycke: "Sätt $i till ett, Medan $i är mindre eller lika med 12 så utförs vad som finns mellan måsvingarna, när ett varv är klart ökas $i med ett."
Just $i++ betyder "öka med ett". Ett $i-- betyder "minska med ett" och det hade gått lika bra med $fnuffra = $fnuffra-1 som $fnuffra-- i while-exemplet.
Resultatet av ovanstående kommer se ut som så här:

Hej nr. 1
Hej nr. 2
Hej nr. 3
Hej nr. 4
...
Hej nr. 11
Hej nr. 12

Varför skulle du vilja använda while eller for? Ibland händer det att du vill upprepa saker flera gånger och då är for() användbart. Jag visade tidigare hur arrays kan användas, nu kan vi använda for eller while för att leta info i en array.
Vi går tillbaka till mitt exempel med namn och addresser i varsin array, Vi återanvänder samma array och gör något lite mer vettigt med den; vi vill ha addressen till Asterix.

<?php
	$namn[0] = "Claes Nilsson";
	$namn[1] = "Mona Kroon";
	$namn[2] = "Asterix";
	$namn[3] = "Obelix";

	$address[0] = "StorStadsVägen 12, Storstaden";
	$address[1] = "The WestSide, New York";
	$address[2] = "Den galliska byn";
	$address[3] = "Den galliska byn";
	
	for($raknare = 0; $raknare <= 3; $raknare++) {
		if($namn[$raknare] == "Asterix") {
		   echo "Asterix har addressen $address[$raknare]";
		}
	}
?>

Här sätter vi först namn och addresser för några exempel, sedan kan vi på 5 rader kod hitta Asterix address.
I for-loopen sätts $raknare till noll först, och kollar om $namn[0] är "Asterix", detta stämmer ju inte, eftersom det är Claes Nilsson som är på nollan, så ingenting händer, samma gäller när $rakna är 1.
När $rakna är 2 däremot, så stämmer ju att $namn[2] är "Asterix", scriptet skriver då ut Asterix address från $address[2] och loopar vidare tills $rakna är 4, då loopen är slut.

Funktioner

En funktion kan i mångt och mycket jämnföras med en fabrik. Den tar in råvara och spottar ut en färdig produkt.
Tänk dig att du har en korvfabrik, den tar in råvara i form av kött och slaggprodukter, och spottar ut korv som ser smått ätbar ut, en funktion fungerar likadant!
En funktion tar emot variabler och data, och gör vad du vill göra med den. Här följer ett enkelt exempel på en funktion som tar emot ett tal, ökar talet med 12, och skickar ut resultatet av det.

<?php
	function Foo($tal) {
		$tal = $tal+12;
		return $tal;
	}
?>

Visst är det enkelt? Jag bryter nu ner koden åt er och förklarar den.
Rad ett deklarerar en funktion som heter Foo, den vill ta emot en variabel, som den kallar $tal. Rad två behöver ingen närmare förklaring och rad 3 skickar tillbaka resultatet till vem som kallade på funktionen.
Okay, vi har vår fabrik nu, då kan vi ge den lite arbete.

<?php
	$tal = 19;
	$nytt_tal = Foo($tal);
	echo $nytt_tal;
?>

Raden som lyder "$nytt_tal = Foo($tal)" innebär att i variabeln $nytt_tal kommer resultatet från funktionen Foo sparas. Vad som finns inom parentesen är vad vi skickar till vår funktion, i det här fallet heltalet 19. Väl inne i vår fabrik (funktion) ökas talet med 12 och resultatet 31 skickas tillbaka och skrivs ut. Inga svårigheter, eller hur?

PHP har en enorm massa användbara inbyggda funktioner, jag demonstrerar här en hembakad funktion som använder sig av en av de inbyggda funktionerna. Det är ju som såhär att vår funktion Foo inte kan veta att det är ett tal den tar emot, om den skulle ta emot t.ex. en text-sträng skulle ickebra saker(tm) hända. Så, vi använder oss av två av de inbyggda funktionerna för att kolla om det är ett heltal (integer) funktionen tagit emot.

<?php
		function Foo($tal) {
			if(is_int($tal) == TRUE) {
				$tal = $tal+12;
			}
			else {
				die("$tal är inte ett heltal!");
			}
			return $tal;
		}
?>

Vad händer här då? i den nya if-satsen används den inbyggda funktionen "is_int", den tar emot en variabel och undersöker om den är ett heltal, är detta sant (TRUE) så ökar den talet med 12 och skickar tillbaka resultatet.
Skulle $tal däremot inte vara sant utförs det som finns i else-blocket, den inbyggda funktionen "die" körs igång som berättar att variabeln $tal inte är ett heltal. Funktionen die() gör att allt slutar jobba, du får helt enkelt se texten inom citationstecknen, text-stringen, som skickades till die().

Att bolla variabler mellan sidor

Nu så, nu har du, förhoppningsvis, kunskapen att hantera variabler, du vet vad arrays och funktioner är. Du vet hur du utför en jämförelse mellan t.ex. två variabler. Men att skapa en sida med PHP är ofta lite poänglöst om du inte kan ta emot data från dina besökare. Detta är det sista jag kommer försöka lära ut.
För att en besökare ska kunna interagera med din sida måste han/hon ha någon metod att skicka data på, t.ex. via en HTML-form.
Här följer ett exempel på två sidor, den ena skickar data till den andra. Vi använder oss av ett enkelt textfält.
Först visar jag en sida du skickar data från;

<form method="post" action="mottagare.php">

	<input type="text" name="skickat">
	<input type="submit" value="Skicka">
</form>

Som ni ser behövs ingen PHP för att skicka data.
Här följer php-kod för filen mottagare.php för att kunna spara det som skickats i variabler.

<?php
	$mottaget = $_POST["skickat"];

	echo $mottaget;
?>

Arrayen $_POST är en s.k reserverad array, en array som alltid finns där och trycker, även om du inte har deklarerat den själv.
Du känner nu igen ett namngivet fält i en array när du ser det, här hämtade vi datan som fanns i fältet "skickat", och sparar I variabeln $mottaget. Hade fältet vi skickade från hetat t.ex. "data" hade det som skickats återfunnits i $_POST["data"]

POST är det vanligaste och säkraste sättet att skicka data på, ett enklare sätt att skicka data på men som inte är lika säkert är genom metoden GET.
GET kan användas för att skicka data via länkar, en länk som ser ut som såhär skickar GET-data;

<a href="fil.php?namn=12">Länk</a>

Du hämtar datan på samma sätt som post, fast med den fördefinerade arrayen $_GET.

Du har även en tredje enkel metod att bolla data mellan sidor med; cookies/sessioner. Den svenska staten har i all sin vishet beslutat sig för att göra användandet av cookies mycket krångligare, då bara terrorister, våldtäktsmän och annat löst folk använder dem. När du behärskar PHP lite bättre vet du också hur man undervisar sig själv, jag tänker därför lämna kapitlet cookies åt dig att lära, jag är då ingen nätterrorist.

Referenser

Nu när du behärskar grunderna i PHP kommer du ha mycket lätt att lära dig själv hur det fungerar. PHP har nämligen en av tidernas bästa manual. Den är lättläst, enkel att förstå och översatt i flera språk. Behöver du t.ex. manipulera en databas? Titta på hjälpen under MySQL, MSSQL eller PostgreSQL-kapitlen i manualen. Behöver du funktioner för att leka med lokala filer eller kataloger? Ta dig en titt i "directory functions" och "filesystem functions" kapitlen.

Manualen återfinnes på addressen http://www.php.net/manual, och finns även i offline-version för oss stackare som knegar oss fram på modem.

Hur tolkar man manualen då? Jag tar här ett enkelt exempel från manualsidan för funktionen strlen().
Överst på sidan får vi en beskrivning som lyder: "strlen - Get string length". Det var väl inte svårt? Då tar vi nästa del
"int strlen (string str)" står det, vad betyder detta? jo, det ska jag förklara. "int" innebär att funktionen skickar tillbaka en integer, ett heltal. strlen är, som du förstår, namnet på funktionen och "string str" står för att den förväntar sig en variabel i form av en text-sträng. Längst ned står det "Returns the length of string."
Ofta står det ett exempel på hur man använder funktionen, just det här exemplet visar inget exempel eftersom beskrivningen är mycket kort och funktionen utför en så enkel syssla.

Det finns de som tycker att du borde läsa en bok om du börjar programmera/scripta i ett helt nytt språk, men ärligt talat så är PHP såpass enkelt att du inte kommer behöva en. Manualen och communityn som finns där ute är allt du nånsin behöver! tro mig!

Skulle du få problem efter att ha letat i manualen så finns det en enorm community med PHP-kodare över globen, bland annat ett litet gäng här på 64bits som svarar på dina ev. frågor. Men det är klart, efter att ha läst det här har du inte längre några problem eller hur?
Ett tips bara i all välmening innan du frågar, det ser mycket bättre ut om du visar kod som inte fungerar så att vi kan hjälpa dig felsöka den snarare än en fråga som lyder "Hur kodar jag en gästbok i PHP"? Har du åtminstone försökt ser det så mycket bättre ut.


24/08-03 | Niklas "Nicke." Berggren | f1restorm@hotmail.com