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.