Helmut Weber: cgi und Datenbank

Beitrag lesen

Hallo Marc,

Okay, das sieht ja schon viel besser aus ;)

my $sql = "INSERT INTO test VALUES ('$daten')";
my $sth = $dbh->prepare( $sql ) ||
     die "Kann Statement nicht vorbereiten: $DBI::errstr\n";
$dbh->disconnect;

Ein INSERT-Befehl bei SQL brauch immer ein Feld/Wert-Paar, um zu wissen, welchen Wert in welches Feld zu schreiben ist.
In deinem Fall:
"INSERT INTO test ('Kongressgebühr') VALUES ('". $daten{'001 Kongressgebühr'}. "')"
Hierbei ist noch anzumerken, dass es sicherer ist, auf Groß-/Kleinschreibung und auf Umlaute bzw. Sonderzeichen in den Bezeichnungen von Feldern, Variablen und Übergabewerte zu verzichten. Dies gilt für Datenbanken, Programmiersprachen und HTML-Formulare. Diese Angaben können nämlich von System zu System anderst interpertiert werden, und können Probleme verusrachen.

Wenn Du später deine Tabelle erweitern möchtest, musst Du auch deine SQL-Anweisung anpassen:
"INSERT INTO test ('feld1', 'feld2') VALUES ('daten1', 'daten2')"

Bis hierhin hat das DBI-Modul deine SQL-Anweisung nur vorbereitet, jedoch noch nicht ausgeführt. Um deine INSERT-Anweisung nun auch auszuführen muss nach dem "prepare" ein "execute" erfolgen:
$sth->execute();

Oder in deinem Fall die einfachere Lösung, Du fasst beide Schritte in einer Anweisung zusammen:
my $sth = $dbh->do( $sql ) ||
     die "Kann Statement nicht vorbereiten: $DBI::errstr\n";

Noch ein paar Tipps zu deinem Programm:

  • Nutze folgende Anweisung am Beginn deines Skriptes, um Dir Fehlermeldungen deines Skriptes am Browser ausgeben zu lassen:
    use CGI::Carp qw( fatalsToBrowser );
  • Da Du schon das CGI-Modul in deinem Skript einbindest, solltest Du auch die Funktionen dieses Modules zum Auslesen der Formulardaten verwenden. Das macht dein Programm Übersichtlicher.
  • Das Modul Mail::Mailer kann Dir beim versenden von E-Mails evtl. eine Hilfe sein.
  • Das Modul HTML::Template bietet Dir die Möglichkeit HTML vom Programmcode zu trennen. Dies ist bei größeren Projekten auf jeden Fall hilfreich.

Hoffe Dir geholfen zu haben, und stehe bei weiteren Fragen natürlich Rde und Antwort ;)

Gruß
Helmut Weber

--
-------------------------------------------
Mode ist eine Variable, Stil eine Konstante