Tiny Perl CMS
Datum: 2020/11/14
Ik heb een klein, basis CMS systeem gemaakt in perl. Voornamelijk om perl uit te testen.
Het is eenorm eenvoudig, het heeft ook nog geen admin interface, dus zoals het script nu is moet je pagina’s meteen in de databank aanmaken.
Hieronder zie je de sourcecode.
#!/usr/bin/perl
use warnings;
use strict;
use CGI;
use DBI;
my $driver = "mysql";
my $database = "database_naam";
my $dsn = "DBI:$driver:database=$database";
my $userid = "database_user";
my $password = "database_password";
my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;
my $cgi = CGI->new;
print $cgi->header;
# header
print <<'EOF';
<!DOCTYPE="html">
<html>
<head>
<title>TinyPerlCMS</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta charset="UTF-8" />
</head>
<style>
body {
max-width: 800px;
padding: 1em;
border: 1px solid black;
margin: 0 auto;
}
img {
max-width: 100%;
}
</style>
<body>
EOF
my $p = $cgi->param('p') || '1'; # default id 1, de homepage
my $sth = $dbh->prepare("SELECT content, title
FROM pages
WHERE id = ? LIMIT 1"); #limit 1, voor de zekerheid
$sth->execute( $p ) or die $DBI::errstr;
if ($sth->rows == 0){
print "<h1>Error 404: Page not found</h1><p>The page you where looking for was not found. <a href='?p=1'>Go to the homepage</a></p>";
} else {
while (my @row = $sth->fetchrow_array()) {
my ($content, $title ) = @row;
print "<h1>$title</h1>\n $content\n";
if ($p != '1'){ # check als het niet de homepage is, om link naar homepage te tonen
print '<a href="?p=1">Back</a>'
}
}
}
$sth->finish();
#footer
print <<'EOF';
</body>
</html>
EOF
exit 0;
database structuur:
CREATE TABLE `pages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(64) NOT NULL, -- grote kan aangepast worden
`content` varchar(10000) NOT NULL, -- grote kan aangepast worden
PRIMARY KEY (`id`)
)