"tie" ersetzen durch mySQL-Datenbank
SAM
- datenbank
0 X:truder
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:
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?
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