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
- Logga in i panelen och klicka på DB i menyn högst upp.
- Klicka på Skapa databas.
- Fyll i ett namn på databasen och ett användarnamn, t.ex.
sajtför båda. Panelen sätter ditt kontonamn först, så de blir<namn>_sajt. - Välj ett lösenord (eller låt panelen slumpa ett) och skriv upp det. Klicka på Spara.
localhost<namn>_sajt<namn>_sajtDatabasen 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!
- Använd alltid
preparemed?när något användaren skrivit ska in i en SQL-fråga. Bygg aldrig frågan med"... WHERE namn = '$namn'". - Skriv ut med
htmlspecialchars()allt som användare har skickat in, annars kan någon lägga in eget JavaScript på din sida. - Visa inte felmeddelanden för besökare när sajten är klar - de kan avslöja lösenord och filnamn.
- Spara aldrig lösenord i klartext. Bygger du en inloggning: använd
password_hash()ochpassword_verify().
Om något går fel
- Vit sida? PHP-fel visas inte alltid. Lägg
ini_set('display_errors', 1); error_reporting(E_ALL);överst i filen medan du felsöker - och ta bort det sedan. - "Access denied"? Kontrollera att användarnamn och databasnamn börjar med ditt kontonamn och ett understreck.
- Loggar: i panelen under WEBB hittar du loggarna för din sajt (ikonen vid din domän).