User since
2004-01-05
36
Artikel
BenutzerIn
hallo zusammen,
hier mein problem.
ich habe eine access datenbank aus zwei tables erstellt. table 1 enthält die felder kundennummer, adresse, name und telefonnummer. table 2 enthält kundennummer und rechnungsbetrag. über ein schlüsselwort (kundennummer) stehen die beiden tables in verbindung. jetzt soll ich mit hilfe eines html-formulars diese datenbank durch ein cgi-script nach dem schlüsselwort durchsuchen. bei einem treffer sollen die daten beider tables, die sich auf das schlüsselwort beziehen, in tabellenform angezeigt werden. außerdem soll eine textdatei als rechnung generiert werden, auf der die adresse, der name und die rechnungssumme des jeweiligen kunden angeführt werden. die access datei heißt db1.
hier meine versuche, was mache ich falsch. es klappt nicht!!!
kunden.html:
<html>
<head>
<title>Eingabeformular</title>
</head>
<body>
<h1><center>Kunden</center></h1>
<form action="/cgi-bin/kunden.pl" method="post">
<hr>
Bitte geben Sie die Kundennummer ein:
<input name ="eingabe" size= "50">
<hr>
<input type="submit" value="Abschicken">
<input type="reset" value="Löschen">
</form>
</body>
</html>
kunden.pl:
#c:/perl/bin/perl -w
use strict;
use CGI qw(:standard);
use DBI;
my $dbh = DBI->commect('DBI:ODBC:db1');
my $sqlstatement=qq§SELECT Tabelle1.Adresse, Name, Telefon, Tabelle2.Rechnungsbetrag
FROM Tabelle1, Tabelle2 AND Tabelle1.Kundennummer = Tabelle2.Kundennummer§;
my $sth = $dbh->prepare($sqlstatement);
$sth->execute ||
die "Could not execute SQL statement ... maybe invalid?";
print <<HERE_TEXT;
Content-type:text/html
<html>
<head>
<title>Antwort</title>
</head>
<body>
<h3>Treffer</h3>
<hr>
HERE_TEXT
my @row;
while (@row=$sth->fetchrow_array)
{print "<p>@row</p>\n"}
print qq§</body>\n</html>;
kann mir jemand helfen
gruss
uwe
User since
2003-08-04
14371
Artikel
ModeratorIn
kunden.pl:
my $dbh = DBI->commect('DBI:ODBC:db1');
muss wohl eher co
nnect heißen...
fehlt wohl ein
;
print qq§</body>\n</html>;
fehlt noch ein
§\n\n
<!--EDIT|renee|1073498655-->
User since
2004-01-05
36
Artikel
BenutzerIn
ja, das html formular kann ich normal aufrufen. gebe ich eine korrekte kundennummer ein. gibt er mir server error.
kannst du mir helfen?
server ist aber korrekt installiert. daran kann es nicht liegen. bin allerdings neuling
User since
2003-10-02
66
Artikel
BenutzerIn
Wo wird der parameter "eingabe" aus deinem Formular eingelesen?
Musst erst parsen:
use CGI qw/:standard/;
my $query = new CGI;
my %in = $query->Vars;
deine Kundennummer ist jetzt in $in{'eingabe'}.
User since
2003-08-04
14371
Artikel
ModeratorIn
kommst Du irgendwie an die error.log des Servers... Wenn nur ein 500er angezeigt wird, findet man dort auf jeden Fall genauere Fehlerbeschreibungen!
Ein möglicher Fehler fällt mir auch noch ein:
Sind die Rechte der .pl-Datei gesetzt. Diese müssen 755 sein.\n\n
<!--EDIT|renee|1073498770-->
User since
2004-01-05
36
Artikel
BenutzerIn
habe es verbessert. klappt leider immer noch nicht.
gruss uwe
User since
2003-08-04
14371
Artikel
ModeratorIn
@kölsch: so wie das Skript im Moment ist, braucht er das noch nicht, da nirgends der Eintrag benötigt wird... Aber für das eigentliche Ziel ist das natürlich notwendig...
Ein Fehler im SQL-Statement ist mir auch noch aufgefallen:
Original:
my $sqlstatement=qq§SELECT Tabelle1.Adresse, Name, Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1, Tabelle2 AND Tabelle1.Kundennummer = Tabelle2.Kundennummer§;
verbessert:
my $sqlstatement=qq§SELECT Tabelle1.Adresse, Name, Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1, Tabelle2 WHERE Tabelle1.Kundennummer = Tabelle2.Kundennummer§;# AND durch WHERE ersetzt
## Besser wäre: ##
my $sqlstatement=qq§SELECT Tabelle1.Adresse, Name, Telefon, Tabelle2.Rechnungsbetrag
FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.Kundennummer = Tabelle2.Kundennummer§;
\n\n
<!--EDIT|renee|1073499030-->
User since
2004-01-05
36
Artikel
BenutzerIn
habe auch das ausgetauscht. bekomme aber immer noch gleiche fehlermeldung. wie ist das denn mit der ausgabe in tabellenform und dann die rechnung genieren. wie kriege ich das denn hin???
gruss
User since
2003-08-04
14371
Artikel
ModeratorIn
mach mal aus
my $dbh = DBI->commect('DBI:ODBC:db1');
das hier:
my $dbh = DBI->connect('DBI:ODBC:db1') or print $DBI::errstr;
Nochmal die Frage: Kommst Du an die Error.log?? Dort sind genauere Fehlermeldungen gespeichert...\n\n
<!--EDIT|renee|1073500594-->