PHP/MySQL

Hämta data

Vi ska genom att göra om sidan med Nikes träningsschema för att visa hur all denna data kan ligga i en databas. Vi börjar med att endast titta på vad som finns i databasen, för att senare också lägga till och ta bort saker. Vi tänker oss en liten databas med data om Nike.

Databasservern heter localhost (alltså den egna servern) och databasen heter nike.

$connection = mysql_connect ("localhost", "nike", "password");
mysql_select_db("nike");

Tabellen traning innehåller vilken aktivitet som hör till vilken veckodag och är en mycket enkel tabell. Här nedan visas all data som just nu finns i tabellen. Det är tabellen traning som vi ska arbeta med istället för den vektor som informationen tidigare fanns i.

Måndag  | Kattjakt
Tisdag  | Spårning
Onsdag  | Sök
Torsdag | Lydnad
Fredag  | Spårning
Lördag  | Lekar
Söndag  | Lydnad/Språning

Efter att ha kopplat upp mot databasservern och databasen går vi vidare med själva hämtningen av information. När vi frågar efter data får vi som resultat en vektor med de rader som uppfyller vår fråga (t ex "ge all data för dagen Måndag"). Det finns bra stöd i PHP för att gå igenom och hämta ut precis de saker man vill ha ur den. Det går att göra på flera olika sätt och här är ett exempel:

$query = "SELECT * from traning";
$result = mysql_query($query, $connection);

För att koden ska bli renare skapar vi först frågan i variabeln query som är en sträng. Frågan är

"SELECT * from traning"

vilket betyder "hämta all rader i tabellen traning". Funktionen mysql_query tar två argument, frågan som ska ställas och den databaskoppling som vi vill använda. Vi använder den koppling som vi nyss skapade.

Det svar vi får från databasen lagras i vektorn result. Resultatvektorn innehåller nu ett antal rader och ser ut enligt följande:

mysql> select * from traning;
+----+---------+------------------+
|id  | dag     | aktivitet        |
+---------+------------------+----+
| 1  | Måndag  | Kattjakt d       |
| 2  | Tisdag  | SpÕrning         |
| 3  | Onsdag  | S÷k              |
| 4  | Torsdag | Lydnad 1         |
| 5  | Fredag  | SpÕning          |
| 6  | Lördag  | Lekar            |
| 7  | Söndag  | Lydnad/Sprarngin |
+---------+------------------+----+

Varje rad i vektorn som vi får ut innehåller alltså data om träningsdata för en viss dag. I nästa steg ska vi gå igenom dessa rader och skriva ut dem på webbsidan med hjälp av PHP. Dessutom finns ett id i databasen som unikt pekar ut en rad, men mer om detta lite senare.

$row = 0;

while (mysql_numrows($result) > $row) {

  $day = mysql_result($result, $row, 'dag');

  $activity = mysql_result($result, $row, 'aktivitet');

  echo "<TR>";
	  echo "<TD>";
	 	 echo $day;
	  echo "</TD>";
	
	  echo "<TD>";
	  	echo $activity;
	  echo "</TD>";

  echo "</TR>";

$row++;
}

Vi ska titta lite närmare på delarna. Först skapar vi variabeln row som vi ger värdet 0. Den ska hjälpa oss att hålla reda på vilken rad i resultatvektorn vi befinner oss. Sen tar vi reda på hur många rader det finns i resultatvektorn med funktionen mysql_numrows. Med en while-sats tittar vi om vi har några rader kvar i resultatet genom att jämföra hur många rader det fanns med våran egen räknevariabel.

while (mysql_numrows($result) > $row) { 
	... gör massa saker ...
$row++;
}

Programmet kommer att gå igenom while-satsen om det finns rader kvar och utföra koden som står inom kodblocket. På slutet räknas variabeln row upp med ett och while-satsen testas igen.

Inne i kodblocket sker en rad saker. Först plockas de värden som vi är intresserade av ut för att sedan skrivas ut på ett snyggt sätt. De värden som vi är intresserade av är den dagen och aktiviteten.

$day = mysql_result($result, $row, 'dag');

$activity = mysql_result($result, $row, 'aktivitet');

Funktionenen mysql_result används för att plocka ut ett visst värde ur resultatvektorn. Funktionen tar tre argument. Det första är själva resultatvektorn, den andra vilken rad vi ska titta på och det tredje vilket värde vi letar efter i just den raden. Tänk på numreringen börjar från 0 i en vektor (och därför har vi också satt variabeln row till 0 för att börja på första raden).

$day = mysql_result($result, $row, 'dag');

Precis som tidigare (samma sida i PHP-delen) lägger vi allt detta i en tabell. När alla data är framtagna skriver vi ut dessa i en TABLE uppdelad i TR och TD. Varje rad i resultatet blir en egen rad även i HTML. Vi får följande

Resultat

på webbsidan. Vi får en prydlig webbsida som resultat utan att själv behöva skriva ut alla dessa data för varje veckodag. PHP gör jobbet åt oss!

Hur hela PHP-sidan med HTML-kod och allt ser ut ser du här

Kod

Vi har alltså skrivit skelettet till HTML-sidan själva och låtit PHP generera resten med hjälp av den data som fanns i databasen.