#!/usr/bin/perl -w use CGI qw/:standard :netscape/; use strict; use CGI::Carp qw/fatalsToBrowser/; use DBI; use URI::Escape; use Date::Manip qw/UnixDate/; ############################################### # Copyright 1999 Dr Thomas Wieland # wieland@thwieland.de # für www.perl-stammtisch.de ############################################### # Methode für Formular my $method = 'POST'; # Hintergrundfarbe my $bgrdcl = '#EEEEEE'; # Titel der Seite my $page_title = "Linkseite"; # Bild für die Überschrift my $title_gif = "linklogo.gif"; # Bild für den Homepagebutton my $homepage_gif = "homepage.gif"; # Pfad zu den Bildern ausgehend vom Root Verzeichnis des httpd my $icons = '/~wieland/eins/images'; # Adresse des Adminskripts (zum Löschen von Einträgen) Kategorien my $kadminurl = 'http://localhost/~wieland/eins/cgi-bin2/mydir/kat_admin.cgi'; # Adresse des Linkseitenskripts my $linkurl = 'http://localhost/~wieland/eins/cgi-bin2/links.cgi'; # Adresse des Adminskripts (zum Löschen von Einträgen) Links my $link_adminurl = 'http://localhost/~wieland/eins/cgi-bin2/mydir/link_admin.cgi'; # Url der Homepage my $homeurl = 'http://localhost/~wieland/eins/'; # Variablen für Datenbank my ($dbh, $sth, $sql, $row, $rv, %kat, %katnames); my $db_type = 'mysql'; my $port = 0; my $hostname = "localhost"; my $db_name = 'perl_stammtisch'; my $DB_DSN = "DBI:$db_type:$db_name:$hostname:$port:"; my $DB_USER = "perl_stammtisch"; my $DB_PASSWD = ""; my $Tab_Links = 'links'; my $Tab_Link_Kat = 'link_kat'; # Http Header, Kopf und Überschrift &http_header; # Datenbank Verbindung herstellen $dbh = DBI->connect($DB_DSN, $DB_USER, $DB_PASSWD, { RaiseError => 1 } ); # Falls Parameter insert -> Einfügen if (param('insert')) { my $name = param('name'); my $stamp = UnixDate(scalar localtime, "%Y-%m-%d %H:%M:%S"); my $url = param('url'); my $grpid = param('grpid'); $sql = qq[ INSERT into $Tab_Links (url, name, stamp, grpid) VALUES('$url', '$name', '$stamp', '$grpid') ]; $dbh->do($sql); Delete_all(); } elsif (param('edit')) { my $name = param('name'); my $nr = param('nr'); my $stamp = UnixDate(scalar localtime, "%Y-%m-%d %H:%M:%S"); my $url = param('url'); my $grpid = param('grpid'); $sql = qq[ UPDATE $Tab_Links SET linkid='$nr', name='$name', url='$url', stamp='$stamp', grpid='$grpid' WHERE linkid='$nr' ]; $dbh->do($sql); Delete_all(); } elsif (param('delete')) { my $nr = param('nr'); $sql = qq[ DELETE FROM $Tab_Links WHERE linkid='$nr']; $dbh->do($sql); Delete_all(); } &kat; &formular; &links; # Datenbank Verbindung lösen $dbh->disconnect(); # Datenbankverbindung lösen. print end_html(); # Unterprogramme ############################################### sub http_header { ############################################### print header(), start_html(-BGCOLOR => $bgrdcl, -title => $page_title, -author => 'wieland@thwieland.de', -meta=>{'keywords' => 'Perl-Stammtisch', 'copyright'=>'copyright 1999 Dr. Thomas Wieland'} )."\n"; print center(table({-border => 0, -width => '95%'}, TR(td(img{-src => "$icons/$title_gif", -alt => 'Linkseite Logo'}), td(h4('Links verwalten')), td(a({-href=> $homeurl}, img{-src => "$icons/$homepage_gif", -alt => 'Zur Homepage', -border => 0} ) ) ) ) ),hr,"\n"; } ############################################### sub formular { ############################################### my $name = param('name'); my $nr = param('nr'); my $url =param('url'); my $grpid = param('grpid'); my @katnames = sort(keys %katnames); print start_form(-method => $method), table({-border => 0}, TR(td(["Name:", textfield(-name => 'name', -value => "$name", -size => 40)])), TR(td(["URL:", textfield(-name => 'url', -value => "$url", -size => 40)])), ), hidden(-name => 'nr', -value => "$nr"), scrolling_list(-name => 'grpid', -values => \@katnames, -labels => \%katnames, -size => 1), table({-border => 0}, TR(td([submit (-name => 'insert', -value => 'Eintragen'), submit (-name => 'edit', -value => 'Ändern'), submit (-name => 'delete', -value => 'Löschen')] ) ) ), end_form(),hr; } ############################################### sub kat { ############################################### # Zeile mit Links zu den einzelnen Kategorien erzeugen $sql = qq[ SELECT * FROM $Tab_Link_Kat ORDER BY gruppe ]; $sth = $dbh->prepare($sql); $sth->execute(); print "
|"; while ($row = $sth->fetchrow_arrayref) { print b(" "), a({href => "#".$row->[1]},$row->[1]), b(" |"); $kat{"$row->[1]"} = $row->[0]; $katnames{"$row->[0]"} = $row->[1]; } print b(" "),a({href => $kadminurl}, 'Kategorien verwalten'),b(" |"); print b(" "),a({href => $linkurl}, 'Links anzeigen'),b(" |"); print "
",hr; $sth->finish; } ############################################### sub links { ############################################### my $kategorie = undef; foreach $kategorie (sort(keys %kat)) { # Überschrift und Anker print "
\n",a({name => $kategorie}),h3($kategorie),"\n"; # passende Einträge holen und ausgeben $sql = qq[ SELECT url, name, stamp, linkid, grpid FROM $Tab_Links WHERE grpid = '$kat{$kategorie}' ORDER by name]; $sth = $dbh->prepare($sql); $sth->execute(); while ($row = $sth->fetchrow_hashref) { print a({href => url()."?url=".uri_escape($row->{'url'}). "&name=".uri_escape($row->{'name'}). "&nr=".uri_escape($row->{'linkid'}). "&grpid=".uri_escape($row->{'grpid'})}, $row->{'name'})," ",$row->{'stamp'},br,"\n"; } print "
\n",hr,"\n"; } $sth->finish; }