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
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).
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