Struppi: Ein Vorschlag

Beitrag lesen

Nochmal einen Nachtrag, du hattest ja gefragt gehabt wie du ein 2. CGI aufrufen kannst.  Das deutet darauf hin, dass du dir nicht klar bist welche Möglichkeiten du hast und wie du dein Skript sinnvoll Konstruieren kannst. Da wir ja mittlerweile mehr Wissen mal ein paar Ideen von mir.

Also, du willst ein Gästbuch machen mit einem Adminbereich. Den Adminbereich willst du aber nicht im normalen Code mitschleppen. Dazu bnietet sich an, diese Funktionen mit require einzubinden (wobei man sagen muss, dass sich das für so ein Projekt nicht lohnt, da require zur Laufzeit den code übersetzen muss). aber es geht um's Prinzip.

Nehmen wir an dein skript heißt guest.cgi

der normale Aufruf ist also: http://doamin.lt/cgi-bin/guest.cgi

üblicherweise hast du noch einen Parameter, um einzelne Seiten anzeigen zu lassen:
http://doamin.lt/cgi-bin/guest.cgi?page=1

um den Adminbereich anzeigen zu lassen willst du eine Usernamen und Passwort Kombination übergeben:
http://doamin.lt/cgi-bin/guest.cgi?name=XXX&pwd=XXX

Dein skript könnte dann in etwa so aussehen:

#!/usr/bin/perl -w

use strict;
use CGI;

my $admin;

if(CGI::param('name'))
{
    # Es wurde en Name übergeben
    # also muss der User identifiziert werden
    # da wir das in einem separaten Modul machen wollen
    # muss dieses eingebunden werden.
    require admin.cgi;

$admin = user_auth( CGI::param('name'), CGI::param('pwd') );

}

jetzt kannst du die entsprechenden Optionen über if($admin) anzeigen lassen

wenn $admin defniert ist, dann ist es eine HASH Referenz

mit den Schlüsseln ->{name} und ->{pwd}

show( CGI::param('page'), $admin);

sub show
{
    my ($page, $admin) = @_;

print showPage($page);
    if($admin)
    {
         print CGI::a( {-href => CGI::url() . "?name=$admin->{name}&pwd=$admin->{pwd}" },
         '[1] Gästebucheinträge kommentieren');
    }
}

......

admin.cgi:
------------------------
my %pwd = {
 user1 => 'pwd1',
 user2 => 'pwd2',
 user3 => 'pwd3',

....

};

sub user_auth
{
    my ($name, $pwd) = @_;
    return unless $name;
    return unless $pwd;
    return unless $pwd{$name}; # User unbekannt
    return unless $pwd{$name} ne $pwd; # Passwort falsch

# wir geben eine Hashreferenz zurück
    return { name => $name, pwd => $pwd };
}

1; # um require Glücklich zu machen

Du kannst natürlich in der admin.cgi auch fehlermeldung ausgeben lassen.

Struppi.