SAM: "tie" ersetzen durch mySQL-Datenbank

Hallo, alle zusammen:

Ich bin im Bereich CGI leider noch ein zeimliches "Greenhorn",
und hab deshalb folgendes Problem:

Ich habe ein (funktionierendes) CGI(Perl)-Skript, dass ein
übermitteltes Formular mit Daten in einer Datenbank (Datei auf
dem Server) vergleicht. Hier ein Kurzer Ausschnitt:

Benutzerdatenbank öffnen

if (!$users{"$in{'username'}"}) {
  $flags = O_CREAT | O_RDWR;
  $db = "$config{'data_dir'}/users";
         tie(%users, 'AnyDBM_File', $db , $flags, 0666) || &error_html("Can't open user database");
}

Die Datenbank hat den folgenden Aufbau:
Benutzername|Passwort|Emailadresse|Voller Name|Kurzbeschreibung

Ich möchte aber jetzt stattdessen eine richtige mySQL-Datenbank verwenden.
Ich habe deshalb in mySQL eine Tabelle eingerichtet, die diese Felder
enthält. Leider weiß ich nicht, wie ich das CGI-Skript so anpassen kann, dass die Daten in Zukunft von der mySQL-Datenbank bezogen werden - das ganze hängt doch schon irgendwie mit der "tie"-Zeile zusammen, oder?

  1. Hallo Sam,

    Tie::DBI verwendet man, wenn man nur eine Tabelle hat, und auf diese Tabelle immer über einen Schlüssel zugreift. Dann kann man die ganze Datenbank "hinter einem Hash verstecken"; Vieleicht meinst du ja irgendwie sowas:

    #!/usr/bin/perl

    $USER = "irgendwer";
    $PASSWORT = "sagichnicht";

    use Tie::DBI;

    tie %userdata, 'Tie::DBI', {
     db       => 'mysql:datenbankname',
     table    => 'userdata',
     key      => 'name',
     user     => $USER,
     password => $PASSWORT,
     CLOBBER  => 2,
    };

    print "Content-Type: text/html\n\n";

    print "<h1> Datenbank hinter einem Hash versteckt </h1>\n";

    print "<p>So sehen die Fields aus:\n";
    foreach $f (  tied(%userdata)->fields ) {
     print "Field '$f' <br> \n";
    }

    print "<p>So sehen die Daten aus:\n";

    foreach $name ( keys %userdata ) {
     $daten = $userdata{$name};
     print "<p>Name: $name, Passwort = ";
     print $daten->{'password'};
     print ", E-Mail ";
     print $daten->{'email'};
     print "</p>\n";
    }

    if (exists $userdata{'neuername'}) {
        print "<p> Es gibt schon einen User namens 'neuername'\n";
    } else {
        $userdata{'neuername'} = { password => 'geheim!',
               email    => 'ding@dangs.dongs' };
        print "<p> neuer User 'neuername' angelegt\n";
    }

    print "das wars\n";

    Gruß

    X:truder