Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]850[/thread]

CGI+HTML+DB durchsuchen+TXT generieren



<< |< 1 2 3 4 ... 9 >| >> 85 Einträge, 9 Seiten
lolipop 999
 2006-12-03 10:38
#9137 #9137
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
Hallo ich heb folgendes Problem:

Ich möchte über ein HTML mit hilfe eines CGI eine DB durchsuchen:

Die DB heißt Kunden mit Tabelle 1 und Tabelle 2:

Tabelle 1 :
Kundennummer
Adresse
Name
Telefonnummer

Tabelle 2:
Kundennummer
Rechnungsbetrag

Wenn die Datenbank durchsucht wird und ein Treffer dabei ist soll dieser Datensatz in einer Tabell angezeigt werden und TXT Datei generiert werden wo der Rechnungsbetrag drinnen steht.

Hier mein Ansatz:

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!f:/Perl/bin/perl -w

use strict;

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use DBI;

my $DBH;
my $STH;
my $CGI;
my $antwort;

$CGI = new CGI();




### Suche oder Eintrag ###

if ($CGI->param("suchanfrage")){
suche($CGI, $DBH, $STH);
}
elsif($CGI->param("eintrag")){
eintragen($CGI, $DBH, $STH);
}


### Start Subroutine Suche ###

sub suche{

my $name = param("name");
my $kundennummer = param("kundennummer");

$DBH = DBI->connect("DBI:CSV:Kunden=f:/Apache2/cgi-bin")
or die "Konnte keine Verbindung zur Datenbank herstellen:$!";
$STH = $DBH->prepare("SELECT * FROM Kunden WHERE Name = '$name' AND Kundennummer = '$kundennummer' ")
or die "Konnte SQL-Statement nicht bereitstellen:$!";


$STH->execute()
or die "Ausfuehren nicht moeglich:$!";


### Treffer ###

if ($STH->rows != 0){

print <<HERE_TEXT1;
Content-type:text/html

<HTML>
<HEAD>
<TITLE> Antwort </TITLE>
</HEAD>

<BODY>
<CENTER>
<H1>Suchergebnis:</H1>
<HR>
<TABLE BORDER>
<TR>
<TD WIDTH="200"><B>Name:</B></TD>
<TD WIDTH="100"><B>Kundennummer:</B></TD>
<TD WIDTH="200"><B>Adresse:</B></TD>
<TD WIDTH="100"><B>Telefonnummer:</B></TD>
</TR>

HERE_TEXT1




my @data;

while (@data = $STH->fetchrow_array()) {
my $name = $data[0];
my $kundennummer = $data[1];
my $adresse = $data[2];
my $telefonnummer = $data[3];





print qq§<TR>\n<TD><B>$name</B></TD>\n<TD>$kundennummer</TD>\n<TD>$adresse</TD>\n<TD>$telefonnummer</TD>\n</TR>\n§;



}



### Keine Treffer ###

else {

print <<HERE_TEXT2;
Content-type:text/html

<HTML>
<HEAD>
<TITLE>Antwort</TITLE>
</HEAD>
<BODY>
<P>Leider brachte die Suche nach '$name' keine Ergebnisse!</P>
<HR>
<P><A HREF =\"../formular1.html\">Neue Suche!</A></P>
</BODY>
</HTML>

HERE_TEXT2
}
$STH->finish();
$DBH->disconnect;
}
### Ende Subroutine Suche ###


Nur leider bekomme ich diese Fehler

syntax error at F:/Apache2/cgi-bin/dbsearch.pl line 96, near "else"
Missing right curly or square bracket at F:/Apache2/cgi-bin/dbsearch.pl line 117, at end of line
Execution of F:/Apache2/cgi-bin/dbsearch.pl aborted due to compilation errors.

Danke für eure Hilfe

lolipop 999
renee
 2006-12-03 11:06
#9138 #9138
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du hast nach dem else eine schließende Klammer zu viel und vor dem else fehlt eine (die zum if gehört).

Noch ein paar Hinweise:

*) Du solltest die ?-Notation von CPAN:DBI verwenden, um die Sicherheit Deines Skripts zu erhöhen.

*) Warum verwendest Du mal die objektorientierte Form von CPAN:CGI und mal die importierten Funktionen? Du solltest Dich auf eins festlegen.

*) Du solltest Dir mal Template-Systeme wie CPAN:HTML::Template::Compiled anschauen. Damit kannst Du das Layout (HTML) vom Code (Perl) trennen.
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-03 12:05
#9139 #9139
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
Also ich hbe jetzt was anderes Pobiert und bekomme folgende Fehlermeldung

Undefined subroutine &main::Startseite called at F:/Apache2/cgi-bin/daba71.pl line 23.



Hier der 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
98
99
100
101
102
#! f:/Perl/bin/perl -w
use strict;
use warnings;

use CGI ();
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use DBI;

use vars qw($CsvPath);
$CsvPath = 'f:/Apache2/cgi-bin';

# oder besser, wenn Readonly vorhanden ist:
# use Readonly $CsvPath => 'c:/Programme/ApacheGroup/Apache/cgi-bin';

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) }

else { &Startseite($cgi, '...') }

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 Tabelle2 JOIN Tabelle1
WHERE Tabelle2.Kundennummer = Tabelle1.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:CSV:Kunden.mdb=$CsvPath";
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 eure Hilfe

lolipop 999
Ronnie
 2006-12-03 12:10
#9140 #9140
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=lolipop 999,03.12.2006, 11:05]Undefined subroutine &main::Startseite called at F:/Apache2/cgi-bin/daba71.pl line 23.[/quote]
Weil die nirgends definiert ist du sie aber hier versuchst aufzurufen:
Code: (dl )
else                                 {   &Startseite($cgi, '...')    }
lolipop 999
 2006-12-03 12:18
#9141 #9141
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
okay das habe ich jetzt behoben

der schirm bleibt weiß und im error log steht auch nix

Verzweiflung!!!!!!!!!!!?

Danke für die Hilfe

lolipop 999
Ronnie
 2006-12-03 13:31
#9142 #9142
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=lolipop 999,03.12.2006, 11:18]okay das habe ich jetzt behoben[/quote]
und wie sieht der Code jetzt aus?
renee
 2006-12-03 13:44
#9143 #9143
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
   my $dsn = "DBI:CSV:Kunden.mdb=$CsvPath";


Es ist das letzte Mal, dass ich hierzu was sage: Es heißt f_dir=$CsvPath

Und .mdb deutet ja wohl eher auf eine Access-Datenbank hin...

Überprüf mal, in welche Sub das Programm geht...
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-05 19:35
#9144 #9144
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
stimmt ja es ist eine MDB

dass heißt ich muss die verbindung über ODBC herstellen

Habe den Code umgeschrieben
nur screen bleibt weiß und error log leer

Hier der 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
#! f:/Perl/bin/perl -w

use strict;
use CGI qw(:standard);
use DBI;
my $dbh = DBI->connect('DBI:ODBC:Kunden');

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) }

else { &Startseite($cgi, '...') }

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 Tabelle2 JOIN Tabelle1
WHERE Tabelle2.Kundennummer = Tabelle1.Kundennummer~;
my $sth = $dbh->prepare($sqlstatement);
$sth->execute ||
die "Could not execute SQL statement ... maybe invalid?";

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 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 eure Hilfe

lolipop 999
renee
 2006-12-06 08:51
#9145 #9145
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So kann man Dir nicht helfen! Du postest hier unvollständigen Code und sagst nicht, was Du für Debugging-Sachen gemacht hast etc...
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-06 20:28
#9146 #9146
User since
2006-04-07
150 Artikel
BenutzerIn
[default_avatar]
Naja ich habe mal den Zugriff auf ODB hergestellt
Was heißt Code unvollständig.

Leider habe ich ( auch noch nicht gefunden ) noch keinen guten EDITR, der debugging kann.

Arbeite mit EDIT Plus

Fehlermeldung kann ich auch keine weil screen bleibt leer und im error log steht auch nix.

Danke für die Hilfe

lolipop 999
<< |< 1 2 3 4 ... 9 >| >> 85 Einträge, 9 Seiten



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