first commit
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/config.php';
|
||||
|
||||
@mkdir(DATA_DIR, 0755, true);
|
||||
$db = new PDO('sqlite:' . DATA_DIR . '/guestbook.db');
|
||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
$db->exec('CREATE TABLE IF NOT EXISTS entries (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
msg TEXT NOT NULL,
|
||||
ts INTEGER NOT NULL
|
||||
)');
|
||||
|
||||
$isHtmx = isset($_SERVER['HTTP_HX_REQUEST']);
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$name = trim($_POST['name'] ?? '');
|
||||
$msg = trim($_POST['msg'] ?? '');
|
||||
if ($name !== '' && $msg !== '') {
|
||||
$stmt = $db->prepare('INSERT INTO entries (name, msg, ts) VALUES (?, ?, ?)');
|
||||
$stmt->execute([mb_substr($name, 0, 40), mb_substr($msg, 0, 500), time()]);
|
||||
}
|
||||
if (!$isHtmx) {
|
||||
header('Location: /guestbook.php');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$rows = $db->query('SELECT name, msg, ts FROM entries ORDER BY id DESC LIMIT 50');
|
||||
|
||||
function render_entries(iterable $rows): void {
|
||||
foreach ($rows as $r) { ?>
|
||||
<div class="entry">
|
||||
<b><?= htmlspecialchars($r['name']) ?></b>
|
||||
<span class="date"><?= date('Y-m-d', $r['ts']) ?></span>
|
||||
<p><?= nl2br(htmlspecialchars($r['msg'])) ?></p>
|
||||
</div>
|
||||
<?php }
|
||||
}
|
||||
|
||||
if ($isHtmx) {
|
||||
render_entries($rows);
|
||||
exit;
|
||||
}
|
||||
|
||||
require __DIR__ . '/inc/header.php';
|
||||
?>
|
||||
<h1>guestbook</h1>
|
||||
|
||||
<form hx-post="/guestbook.php" hx-target="#entries" hx-swap="innerHTML"
|
||||
method="post" action="/guestbook.php">
|
||||
<input name="name" placeholder="name" maxlength="40" required>
|
||||
<textarea name="msg" placeholder="say something…" maxlength="500" required></textarea>
|
||||
<button type="submit">sign</button>
|
||||
</form>
|
||||
|
||||
<div id="entries">
|
||||
<?php render_entries($rows); ?>
|
||||
</div>
|
||||
|
||||
<?php require __DIR__ . '/inc/footer.php'; ?>
|
||||
Reference in New Issue
Block a user