Datenbank basierte Linkseite
Funktionsweise
In den Zeilen 3 bis 6 werden die benötigten Perl Module eingebunden.
In den nachfolgenden Zeilen bis 46 finden sich vorkonfigurierte Variablen zur Hintergrundfarbe,
anzuzeigendes Logo, Button um zur Homepage zurückzukehren und die Pfade bzw URL's zu den Bildern,
den Admintools , URL zur Homepage und natürlich die notwendigen Definitionen zur MySQL Datenbank.
Wird nun das Skript mit dem Querystring ?admin= aufgerufen, ist die Bedingung in Zeile
50 erfüllt, und es wird ein Redirect zur URL des Admintools der Kategorienverwaltung ausgelöst.
Ansonsten geben wir zuerst einen gültigen HTTP_Header sowie eine Überschrift bestehend aus Logo und
Rückkehr Button zur Homepage aus (Unterprogramm http_header Zeilen 113-136). Danach
(Zeilen 56 bis 74) lesen wir die Gruppenbezeichnungen aus der Tabelle link_kat ein und
geben das Ganze in einer Zeile als Links aus, wobei die Verknüpfung zum später zu erstellenden Anker
über die Gruppenid erfolgt.
Gleichzeitig speichern wir die Daten im Hash %kat mit der Gruppenbezeichnung als
key und der Gruppenid als value. Die Ausgabe der Links erfolgt in den Zeilen
76-92. Hier sortieren wird den Hash %kat zuerst nach Gruppennamen. Geben den Gruppennamen
als Überschrift aus und die Gruppenid als Anker. Dann lesen wir alle zu dieser Gruppenid gehörenden Datensätze
aus der Datenbank, sortieren nach Anzeigename und geben den Link und das zugehörige Erstellungsdatum aus.
Das Ganze wiederholen wir so oft noch Daten im Hash stehen.
Der Link ist eigentlich so angelegt, das beim Klicken ein neues Fenster geöffnet wir. Das ist eigentlich schon
alles.
Das Skript
Das Programm steht als Text Datei hier zum Download bereit.
1 #!/usr/bin/perl -w
2
3 use CGI qw/:standard :netscape/;
4 use strict;
5 use CGI::Carp qw/fatalsToBrowser/;
6 use DBI;
7
8 ###############################################
9 # Copyright 1999 Dr Thomas Wieland
10 # wieland@thwieland.de
11 # für www.perl-stammtisch.de
12 ###############################################
13
14 # Hintergrundfarbe
15 my $bgrdcl = '#EEEEEE';
16
17 # Titel der Seite
18 my $page_title = "Linkseite";
19
20 # Bild für die Überschrift
21 my $title_gif = "linklogo.gif";
22
23 # Bild für den Homepagebutton
24 my $homepage_gif = "homepage.gif";
25
26 # Pfad zu den Bildern ausgehend vom Root Verzeichnis des httpd
27 my $icons = '/images';
28
29 # Adresse des Adminskripts (zum Löschen von Einträgen)
30 my $adminurl = 'http://localhost/cgi-bin2/mydir/kat_admin.cgi';
31
32 # Url der Homepage
33 my $homeurl = 'http://localhost/';
34
35
36 # Variablen für Datenbank
37 my ($dbh, $sth, $sql, $row);
38 my $db_type = 'mysql';
39 my $port = 0;
40 my $hostname = "localhost";
41 my $db_name = 'perl_stammtisch';
42 my $DB_DSN = "DBI:$db_type:$db_name:$hostname:$port:";
43 my $DB_USER = "Benutzer für die Datenbank";
44 my $DB_PASSWD = "Password für die Datenbank";
45 my $Tab_Links = 'links';
46 my $Tab_Link_Kat = 'link_kat';
47
48
49 # Falls Parameter admin zum Adminskript umlenken
50 if (defined param('admin')) {
51 print redirect(-uri => $adminurl);
52 } else {
53
54 &http_header;
55
56 my %kat = undef;
57 # Datenbank Verbindung herstellen
58 $dbh = DBI->connect($DB_DSN, $DB_USER, $DB_PASSWD,
59 { RaiseError => 1 } );
60
61 # Zeile mit Links zu den einzelnen Kategorien erzeugen
62 $sql = qq[ SELECT * FROM $Tab_Link_Kat ORDER BY gruppe ];
63 $sth = $dbh->prepare($sql);
64 $sth->execute();
65
66 print "<center>|";
67 while ($row = $sth->fetchrow_arrayref) {
68 print b(" "),
69 a({href => "#".$row->[1]},$row->[1]),
70 b(" |");
71 $kat{"$row->[1]"} = $row->[0];
72 }
73 print "</center>",br;
74 $sth->finish;
75
76 my $kategorie = undef;
77 foreach $kategorie (sort(keys %kat)) {
78 # Überschrift und Anker
79 print "<blockquote>\n",a({name => $kategorie}),
h3($kategorie),"\n";
80 # passende Einträge holen und ausgeben
81 $sql = qq[ SELECT url, name, stamp FROM $Tab_Links
82 WHERE grpid = '$kat{$kategorie}' ORDER by name];
83 $sth = $dbh->prepare($sql);
84 $sth->execute();
85 while ($row = $sth->fetchrow_hashref) {
86 print a({href => $row->{'url'},
87 target => '_blank'},
88 $row->{'name'})," ",$row->{'stamp'},br,"\n";
89 }
90 print "</blockquote>\n",hr,"\n";
91 }
92 $sth->finish;
93
94
95
96 # Datenbank Verbindung lösen
97 $dbh->disconnect(); # Datenbankverbindung lösen.
98
99 print "<blockquote>\n",
100 "Wir möchten ausdrücklich betonen, daß wir keinerlei Einfluß ",
101 "auf die Gestaltung und die Inhalte der gelinkten Seiten haben. ",
102 "Deshalb distanzieren wir uns hiermit ausdrücklich von allen ",
103 "Inhalten aller gelinkten Seiten auf der gesamten Website inkl. ",
104 "aller Unterseiten. Diese Erklärung gilt für alle auf der ",
105 "Homepage ausgebrachten Links und für alle Inhalte der Seiten, ",
106 "zu denen Links oder Banner führen.\n</blockquote>\n";
107 print end_html();
108
109 }
110
111 # Unterprogramme
112
113 ###############################################
114 sub http_header {
115 ###############################################
116 print header(),
117 start_html(
-BGCOLOR => $bgrdcl,
118 -title => $page_title,
119 -author => 'wieland@thwieland.de',
120 -meta=>{'keywords' => 'Perl-Stammtisch',
121 'copyright'=>'copyright 1999 Dr. Thomas Wieland'}
122 )."\n";
123 print center(table({-border => 0,
124 -width => '95%'},
125 TR(td(img{-src => "$icons/$title_gif",
126 -alt => 'Linkseite Logo'}),
127 td(a({-href=> $homeurl},
128 img{-src => "$icons/$homepage_gif",
129 -alt => 'Zur Homepage',
130 -border => 0}
131 )
132 )
133 )
134 )
135 ),hr,"\n";
136 }
Zurück zum Anfang dieses Projekts.