Mysql och Php

(2003-06-24)

Inledning

Med hjälp av Mysql och Php kan man lätt skapa en hel del användbara funktioner till sin webbsida, och eftersom det börjar bli vanligare att man har tillgång till dessa program så kommer här en liten guide.

Vad ska sparas?

Mysql är en databas, ett program som kan spara saker och sedan låta en ta fram precis de saker man vill ha i den ordning man önskar. Det första du ska fundera på är vad du vill spara. Vill du spara namn, ort och kommentar? Kanske också klockslag? Du bestämmer, men kom ihåg att om du vill kunna rensa bort gamla inlägg eller kunna sortera i den ordning sakerna lagts till så måste du ha med tidpunkten. Mysql lagrar bara det du säger åt den.

Hur ska det lagras?

Nästa steg är att välja i vilken av Mysqls kategorier som sakerna du vill spara passar. Följande grundläggande typer finns:

KolumntypBeskrivning
CHARBokstäver, exmpelvis ett namn eller en ort.
DATETIMEDatum och klockslag.
INTHeltal, exempelvis antal besök.
TEXTText, exempelvis en kommentar eller ett inlägg.

När man har en sak av typen CHAR måste man också ange det maximala antalet bokstäver den kan bestå av inom parentes.

Exempel:

Säg att vi vill spara namn, ort, kommentar och klockslag. För att kunna spara någonting i Mysql måste man först skapa en tabell. Skapa tabell gör man med kommandot CREATE TABLE. Därefter skriver man först namnet på tabellen och sedan räknar man upp namnet på de saker man vill lagra och vilken mysql-typ de ska vara av. I vårt exempel blir det:

CREATE TABLE lista
(namn CHAR(30), ort CHAR(30), kommentar TEXT, klockslag DATETIME);

Detta skapar alltså en tabell med namnet lista. (Radbrytningen är bara för läsbarhetens skull.)

Att prata med Mysql i Php

Steg ett är att ansluta till Mysqlservern:

mysql_connect("localhost", "användarnamn", "lösenord");

"Localhost" innebär att Mysqlservern finns på samma dator som webbservern, vilket ofta är fallet, men är det inte så är det bara att du byter ut det mot Mysqlserverns namn. Användarnamn och lösenord ska du få av den som administrerar servern. Har du servern på din egen dator bestämmer du lösenordet själv i Mysql. Har du inte valt något fungerar det troligen med "root" som användarnamn och "" som lösenord.

Steg två är att välja en databas (du kan ha flera i Mysql):

mysql_select_db("databasens_namn");

Har du ännu ingen databas kan du istället skapa en med kommandot CREATE DATABASE. Detta kommando, precis som CREATE TABLE, är ett SQL-kommando som man alltså kör mot Mysqlservern. För att köra SQL-kommandon i Php så gör man så här (efter att man kört mysql_connect):

mysql_query("SQL-kommandot");

Om vi nu i det här fallet vill skapa en databas som heter listor blir det alltså: mysql_query("CREATE DATABASE listor");

När databasen är skapad får man använda mysql_select_db enligt ovan för att välja den, och när vi har en databas vald kan vi köra vårt CREATE TABLE-kommando för att skapa tabellen. Även detta sker med php-funktionen mysql_query.

Att lagra i Mysql

Så, vi har en databas och vi har vår tabell. Dags att stoppa in lite information i den. SQL-kommandot för detta är INSERT INTO och så här ser ett exempel ut:

mysql_query("
INSERT INTO lista (namn, ort, kommentar)
VALUES ('Kalle', 'Fjollträsk', 'Det här min kommentar.')
");

(Observera att jag bara har gjort radbrytningar för tydlighetens skull, i själva verket kan man ha allt på samma rad om man vill.)

Hämta värden från HTML-formulär

För att det ska bli intressant att lagra någonting i tabellen så bör vi ju ge besökare en möjlighet att skriva in något. Här är ett litet exempel på hur ett formulär ser ut:

<form method="post" action="lagra.php">
Namn: <input type="text" name="namn"><br>
Ort: <input type="text" name="ort"><br>

Kommentar: <textarea name="kommentar" cols="40" rows="4"><br>
<input type="submit" value="Spara">
</form>

På första raden står det action="lagra.php" och det innebär att lagra.php kommer att få besökarens värden skickade till sig när besökaren trycker på knappen. Vi ska nu alltså skapa en fil, lagra.php, vars enda uppgift blir att spara det besökaren matat in i databasen.

<?php
  // Ansluter till Mysql. Måste alltid finnas i alla php-filer
  // som använder Mysql. Kom ihåg att byta ut användarnamn och
  // lösenord.
  mysql_connect("localhost", "användarnamn", "lösenord");

  // Här väljer vi vilken databas vi ska använda.

  mysql_select_db("databasens_namn");
  
  // Alla värden som besökaren matat in läggs i variabeln
  // $_POST, under namnet som fanns i HTML-formuläret. Vi
  // ger dem här lite enklare namn.
  $namn = $_POST['namn'];
  $ort = $_POST['ort'];
  $kommentar = $_POST['kommentar'];

  // Nu kan vi med hjälp av SQL-kommandot INSERT INTO
  // lagra dessa värden:
  mysql_query("INSERT INTO lista (namn, ort, kommentar) VALUES
    ('$namn', '$ort', '$kommentar')
    ");

  // Allt klart. Då ska vi bara skicka iväg besökaren till en
  // annan sida, för här i lagra.php visas ju ingenting, den sparar
  // bara.
  header("Location: visa.php");
?>
Sammanfattning:

För att ge en besökare möjlighet att mata in något som sedan sparas behöver vi alltså först ett formulär i HTML-kod, där besökaren kan skriva. Sedan behöver vi lite php-kod (lagra.php) som kan anropa databasen och skicka över det som besökaren skrivit så det lagras.

Nu är det dags att kika på hur vi kan hämta saker ur databasen och därmed visa vad som lagrats.

Att hämta från Mysql

När man vill plocka ut information ur en databas använder man SQL-kommandot SELECT. Man anger först vilka saker man vill hämta, sedan från vilken tabell och slutligen om man vill göra ett urval samt sortera. I vårt fall kanske vi vill ta fram namn, ort och kommentar sorterat efter klockslag.

SELECT namn, ort, kommentar FROM lista
ORDER BY klockslag

Raden ovan hämtar ut alla rader ur tabellen. Skulle vi exempelvis bara vilja se de rader där namnet är "Johan" så blir det:

SELECT namn, ort, kommentar FROM lista
WHERE namn = 'Johan'

Dags att sätta ihop det här med lite php-kod. Precis som tidigare använder vi funktion mysql_query för att att skicka kommndot till databasen, men den här gången vill vi ju få något tillbaka, och där kommer $result in i bilden:

$result = mysql_query("SELECT namn, ort, kommentar
FROM lista ORDER BY klockslag DESC");

"Desc" betyder att sorteringen ska vara fallande, dvs den senaste kommentaren kommer först. För att plocka ut informationen ur $result kan man använda mysql_fetch_array i en loop:

while ($r = mysql_fetch_array($result))
{
  // Här får ut informationen, en rad i taget
  // i variablerna: $r['namn'] $r['ort'] och
  // $r['kommentar']
}

Nästa steg blir att fylla på med lite HTML-kod för att skriva ut informationen:

<table>
<?php
  while ($r = mysql_fetch_array($result))
  {
    echo('<tr><td>');
    echo($r['namn']);
    echo('</td><td>');
    echo($r['ort']);
    echo('</td><td>');
    echo($r['kommentar']);
    echo('</td></tr>');
  }
?>

</table>

Kategorier

Start / Datorer / Databas /


Fler artiklar