Guide 3 av 3

Databas och PHP

Med en databas kan din sajt spara saker - en gästbok, blogginlägg, poäng i ett spel. Du har en MariaDB-databas (samma som MySQL) och PHP 8.5.

1. Skapa databasen

  1. Logga in i panelen och klicka på DB i menyn högst upp.
  2. Klicka på Skapa databas.
  3. Fyll i ett namn på databasen och ett användarnamn, t.ex. sajt för båda. Panelen sätter ditt kontonamn först, så de blir <namn>_sajt.
  4. Välj ett lösenord (eller låt panelen slumpa ett) och skriv upp det. Klicka på Spara.
Värd
localhost
Databas
<namn>_sajt
Användare
<namn>_sajt
Lösenord
det du valde

Databasen nås bara från din sajt på servern (värd localhost) - inte från din egen dator.

2. Skapa en tabell med phpMyAdmin

Öppna https://<namn>.idun-hosting.se/phpmyadmin/ och logga in med databasens användarnamn och lösenord. Välj din databas till vänster, klicka på fliken SQL och kör:

CREATE TABLE gastbok (
  id       INT AUTO_INCREMENT PRIMARY KEY,
  namn     VARCHAR(50)  NOT NULL,
  meddelande VARCHAR(500) NOT NULL,
  skapad   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3. Koppla upp från PHP

Lägg inloggningsuppgifterna i en egen fil, db.php, i public_html:

<?php
// db.php - uppkopplingen mot databasen
$pdo = new PDO(
    'mysql:host=localhost;dbname=<namn>_sajt;charset=utf8mb4',
    '<namn>_sajt',          // användare
    'DITT-LÖSENORD',
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);

4. En enkel gästbok

Skapa gastbok.php i samma mapp:

<?php
require 'db.php';

// Nytt inlägg? Frågetecknen (?) gör att ingen kan lura databasen (SQL-injektion).
if ($_SERVER['REQUEST_METHOD'] === 'POST' && trim($_POST['namn'] ?? '') !== '') {
    $stmt = $pdo->prepare('INSERT INTO gastbok (namn, meddelande) VALUES (?, ?)');
    $stmt->execute([trim($_POST['namn']), trim($_POST['meddelande'] ?? '')]);
    header('Location: gastbok.php');   // ladda om, så att inlägget inte skickas två gånger
    exit;
}

$inlagg = $pdo->query('SELECT namn, meddelande, skapad FROM gastbok ORDER BY skapad DESC')->fetchAll();
?>
<!doctype html>
<html lang="sv">
<head><meta charset="utf-8"><title>Gästbok</title></head>
<body>
  <h1>Gästbok</h1>
  <form method="post">
    <input name="namn" placeholder="Namn" maxlength="50" required>
    <textarea name="meddelande" placeholder="Meddelande" maxlength="500"></textarea>
    <button>Skicka</button>
  </form>
  <?php foreach ($inlagg as $i): ?>
    <p><strong><?= htmlspecialchars($i['namn']) ?></strong> (<?= $i['skapad'] ?>)<br>
       <?= nl2br(htmlspecialchars($i['meddelande'])) ?></p>
  <?php endforeach; ?>
</body>
</html>

Öppna https://<namn>.idun-hosting.se/gastbok.php och skriv ett inlägg.

Säkerhet - viktigt!

Om något går fel