Schrift
[thread]850[/thread]

CGI+HTML+DB durchsuchen+TXT generieren (Seite 4)



<< |< 1 2 3 4 5 6 7 ... 9 >| >> 85 Einträge, 9 Seiten
lolipop 999
 2006-12-11 19:55
#9167 #9167
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
das kommt dabei raus

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Content-Type: text/html; charset=ISO-8859-1

[Mon Dec 11 18:48:24 2006] daba71.cgi: DBD::ODBC::db prepare failed: [Microsoft]
[ODBC Microsoft Access Driver] Syntaxfehler in FROM-Klausel. (SQL-42000)(DBD: st
_prepare/SQLPrepare err=-1) at daba71.cgi line 88.
<h1>Software error:</h1>
<pre>Error: couldn't prepare sql: [Microsoft][ODBC Microsoft Access Driver] Synt
axfehler in FROM-Klausel. (SQL-42000)(DBD: st_prepare/SQLPrepare err=-1)
SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag
FROM Tabelle2 JOIN Tabelle1
WHERE Tabelle2.Kundennummer = Tabelle1.Kundennummer
</pre>
<p>
For help, please send mail to this site's webmaster, giving this error message
and the time and date of the error.

</p>
[Mon Dec 11 18:48:24 2006] daba71.cgi: Error: couldn't prepare sql: [Microsoft][
ODBC Microsoft Access Driver] Syntaxfehler in FROM-Klausel. (SQL-42000)(DBD: st_
prepare/SQLPrepare err=-1)
[Mon Dec 11 18:48:24 2006] daba71.cgi: SELECT Tabelle1.Kundennummer, Tabelle1.Na
me,
[Mon Dec 11 18:48:24 2006] daba71.cgi: Tabelle1.Telefon, Tabelle2.Rechnungsbetra
g
[Mon Dec 11 18:48:24 2006] daba71.cgi: FROM Tabelle2 JOIN Tabelle1
[Mon Dec 11 18:48:24 2006] daba71.cgi: WHERE Tabelle2.Kundennummer = Tabelle1.Ku
ndennummer


Danke für die Hilfe

lolipop 999
renee
 2006-12-11 23:51
#9168 #9168
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei einem join muss ein on genommen werden.

Also [sql]SELECT * FROM Tabell1 JOIN Tabelle2 ON Tabell1.ID = Tabelle2.ID[/sql]
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nepos
 2006-12-12 10:24
#9169 #9169
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Oder wenn das Feld, ueber das gejoined werden soll in beiden Tabellen gleich heisst USING:
[sql]SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1 JOIN Tabelle2 USING(Kundennummer)[/sql]
Oder du schreibst:
[sql]SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag
FROM Tabelle2,Tabelle1 WHERE Tabelle2.Kundennummer = Tabelle1.Kundennummer[/sql]
lolipop 999
 2006-12-12 20:31
#9170 #9170
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
Hallo

Jetzt bekomme ich folgende Fehlermeldungen

Code: (dl )
1
2
3
4
5
6
7
8
Global symbol "$sth" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 30.
Global symbol "$sqlStatement" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 30.
Global symbol "$sth" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 30.
syntax error at F:/Apache2/cgi-bin/daba71.cgi line 41, near "center>"
(Might be a runaway multi-line ~~ string starting on line 30)
Global symbol "@data" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 51.
Global symbol "$sth" requires explicit package name at F:/Apache2/cgi-bin/daba71.cgi line 51.
Search pattern not terminated at F:/Apache2/cgi-bin/daba71.cgi line 60.


Hier das aktuelle Script:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#! f:/Perl/bin/perl 

use strict;
use CGI qw(:standard);
use DBI;
use CGI::Carp qw/fatalsToBrowser/;
my $dbh = DBI->connect('DBI:ODBC:driver=Microsoft Access-Treiber (*.mdb); dbq=Kunden.mdb') or die $DBI::errstr;

my $cgi = CGI->new();
my %params = $cgi->Vars();

print $cgi->header();

if ( exists $params{suchanfrage} ) { &Suche ($cgi, \%params) }
elsif( exists $params{eintrag} ) { &Eintragen($cgi, \%params) }



print $cgi->end_html();

# ------------------------------------------------------------

sub Suche {
my ($cgi, $params) = @_;

my $dbh = &ConnectToDB();

$cgi->start_html('Antwort');

my $sqlStatement = qq~SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1 JOIN Tabelle2 USING(Kundennummer)

my $sth = &FireSql($dbh, $sqlStatement);

if ($sth->rows < 1) {
print $cgi->p("Keine Daten gefunden");
return;
} # if

print qq~
<center>
<h1>Suchergebnis:</h1>
<hr />
<table border="2">
<tr>
<td width="200"><b>Kundennummer:</b></td>
<td width="200"><b>Adresse:</b></td>
<td width="200"><b>Name:</b></td>
<td width="200"><b>Telefonnummer:</b></td>
<td width="200"><b>Rechnungsbetrag:</b></td>
</tr>\n~;

while( my @data = $sth->fetchrow() ) {
printf qq~
<tr>
<td><b>%s</b></td>
<td><b>%s</b></td>
<td><b>%s</b></td>
<td><b>%s</b></td>
</tr>\n~,
@data[0, 1, 2, 3];

} # while

$sth->finish();
$dbh->disconnect();
} # Suche
# ------------------------------------------------------------
sub Eintragen {


} # Eintragen
# ------------------------------------------------------------
sub ConnectToDB {

my $dsn = "DBI:ODBC:Kunden";
my $dbh = DBI->connect($dsn)
or die "Error: couldn't connect to '$dsn': $DBI::errstr\n";

return $dbh;
} # ConnectToDb
# ------------------------------------------------------------
sub FireSql {
my ($dbh, $sqlStatement, @values) = @_;

my $sth = $dbh->prepare($sqlStatement)
or die "Error: couldn't prepare sql: $DBI::errstr\n$sqlStatement\n";

$sth->execute(@values)
or die "Error: couldn't execute sql: $DBI::errstr\n$sqlStatement\n";

return ($sth);
} # FireSql

# ------------------------------------------------------------


Vielen Danke für eure Hilfe

lolipop 999
PerlProfi
 2006-12-12 21:11
#9171 #9171
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
In allen Fehlermeldungen mit 'global symbol' benutzt du eine Variable die du nicht vorher deklariert hast.
Das liegt wohl daran, dass ein '~' am Ende von deinem print() fehlt.
Daher auch der Syntax error nehme ich mal an.

Das ganze wird dir am Ende auch noch gesagt: 'search pattern not terminated', jedenfalls würde ich sagen, dass es auch von dem fehlenden ~ kommt.

MfG PerlProfi
renee
 2006-12-12 21:44
#9172 #9172
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
  my $sqlStatement = qq~SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1 JOIN Tabelle2 USING(Kundennummer)


muss mit ~; abgeschlossen werden...

Code: (dl )
1
2
3
my $dsn = "DBI:ODBC:Kunden";
my $dbh = DBI->connect($dsn)
or die "Error: couldn't connect to '$dsn': $DBI::errstr\n";

Wie man richtig zu ner Access-Datenbank verbindet habe ich Dir auch schon gezeigt...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
lolipop 999
 2006-12-12 22:12
#9173 #9173
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
so jetzt bekomme ich eine weiße Seite
keine errors gar nix

Hier mein Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#! f:/Perl/bin/perl 

use strict;
use CGI qw(:standard);
use DBI;
use CGI::Carp qw/fatalsToBrowser/;
my $dbh = DBI->connect('DBI:ODBC:driver=Microsoft Access-Treiber (*.mdb); dbq=Kunden.mdb') or die $DBI::errstr;

my $cgi = CGI->new();
my %params = $cgi->Vars();

print $cgi->header();

if ( exists $params{suchanfrage} ) { &Suche ($cgi, \%params) }
elsif( exists $params{eintrag} ) { &Eintragen($cgi, \%params) }



print $cgi->end_html();

# ------------------------------------------------------------

sub Suche {
my ($cgi, $params) = @_;

my $dsn = "DBI:ODBC:Kunden";
my $dbh = DBI->connect($dsn)
or die "Error: couldn't connect to '$dsn': $DBI::errstr\n";

$cgi->start_html('Antwort');

my $sqlStatement = qq~SELECT Tabelle1.Kundennummer, Tabelle1.Name,
Tabelle1.Telefon, Tabelle2.Rechnungsbetrag FROM Tabelle1 JOIN Tabelle2 USING(Kundennummer)~;

my $sth = &FireSql($dbh, $sqlStatement);

if ($sth->rows < 1) {
print $cgi->p("Keine Daten gefunden");
return;
} # if

print qq~
<center>
<h1>Suchergebnis:</h1>
<hr />
<table border="2">
<tr>
<td width="200"><b>Kundennummer:</b></td>
<td width="200"><b>Adresse:</b></td>
<td width="200"><b>Name:</b></td>
<td width="200"><b>Telefonnummer:</b></td>
<td width="200"><b>Rechnungsbetrag:</b></td>
</tr>\n~;

while( my @data = $sth->fetchrow() ) {
printf qq~
<tr>
<td><b>%s</b></td>
<td><b>%s</b></td>
<td><b>%s</b></td>
<td><b>%s</b></td>
</tr>\n~,
@data[0, 1, 2, 3];

} # while

$sth->finish();
$dbh->disconnect();
} # Suche
# ------------------------------------------------------------
sub Eintragen {


} # Eintragen
# ------------------------------------------------------------
sub ConnectToDB {

my $dsn = "DBI:ODBC:Kunden";
my $dbh = DBI->connect($dsn)
or die "Error: couldn't connect to '$dsn': $DBI::errstr\n";

return $dbh;
} # ConnectToDb
# ------------------------------------------------------------
sub FireSql {
my ($dbh, $sqlStatement, @values) = @_;

my $sth = $dbh->prepare($sqlStatement)
or die "Error: couldn't prepare sql: $DBI::errstr\n$sqlStatement\n";

$sth->execute(@values)
or die "Error: couldn't execute sql: $DBI::errstr\n$sqlStatement\n";

return ($sth);
} # FireSql

# ------------------------------------------------------------


Danke für die Hilfe

lolipop 999
renee
 2006-12-13 09:12
#9174 #9174
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=renee,10.12.2006, 16:43]Ja, ich würde sagen, dass es weder $params{suchanfrage} noch $params{eintrag} gibt... Deswegen sollte man immer einen else-Zweig machen...

Probiermal was passiert, wenn Du in der Konsole skript.cgi suchanfrage=hallo eingibst oder skript.cgi eintrag=neu...[/quote]
Ich wiederhole mich nur ungerne! Du musst langsam mal anfangen, die Antworten auf Deine Fragen zu posten, sonst bekommst Du bald gar keine Antworten mehr!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
lolipop 999
 2006-12-13 19:26
#9175 #9175
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
Ja das mit Konsole habe ich ehgemacht

aber ich weiß nicht wie ich hier eine else schleife mache

danke für die hilfe

lolipop 999
renee
 2006-12-13 21:15
#9176 #9176
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So wie Du if und elsif gemacht hast, machst Du noch ein else hintendran...

Und wie hast Du es in der Konsole aufgerufen? Und was war das Ergebnis? Lass Dir doch bitte nicht alles "aus der Nase ziehen"!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 3 4 5 6 7 ... 9 >| >> 85 Einträge, 9 Seiten



View all threads created 2006-12-03 10:38.