Thread 2 Fragen: Use strict und Apacheneustart? (29 answers)
Opened by olruebe01 at 2006-12-14 00:41

topeg
 2006-12-16 14:14
#30289 #30289
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Würdest du die Funktion so schreiben würde sie funktionieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub blacklist {
my ($item,$galerie)=@_;
use DBI;
my $datenbank = "blacklist";
my $datenbankhost = "localhost";
my $datenbankuser = "xxx";
my $datenbankpw = "yyy";

##########################################################
$fehlermeldung = '<li>Fehler bei der Datenbankverbindung aufgetreten. Bitte ueberpruefen Sie die Angaben';
my $dbh = DBI->connect("DBI:mysql:$datenbank:$datenbankhost","$datenbankuser","$datenbankpw") || fehlerausgabe($fehlermeldung);
##########################################################
my $sth = $dbh->prepare("SELECT art FROM 'blacklist' WHERE item = '$item' and Galerie = '$galerie' ");
$sth->execute or fehlerausgabe(DBI->errstr);
my ($ergebnis) = $sth->fetchrow_array();
$dbh->disconnect; # DB Connect beenden
return $ergebnis;
}# Ende sub

Die Funktion mußt du dann so aufrufen:
Code: (dl )
my @ergebnis=&blacklist($FORMDATA{item},$FORMDATA{Galerie});


Noch was.

Die Funktion
Code: (dl )
1
2
3
sub fehlerausgabe{
print $fehlermeldung;
}
solltest du besser so schreiben:
Code: (dl )
1
2
3
sub fehlerausgabe{
print $_[0];
}
dann werden auch die übergebenen Parametter ausgelesen und du brauchst die globalen Variablen nicht mehr dafür.

Dann wundere ich mich etwas über diese Zeilen:
Code: (dl )
my %FORMDATA = $cgi->Vars();
erst liest du alle an das Script überegebene Werte aus.
Code: (dl )
1
2
3
$FORMDATA{item}=0;
$FORMDATA{Galerie}="";
$FORMDATA{User}="";
und dann überschreibst du sie?

Ich würde das ganze etwas anderes Schreiben:
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
#!/usr/bin/perl -w

use warnings;
use strict;
use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use DBI;

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

$FORMDATA{User}="" unless(exists($FORMDATA{User}));
$FORMDATA{Galerie}="" unless(exists($FORMDATA{User}));
$FORMDATA{item}=0 unless(exists($FORMDATA{User}));

###
### Aufrufen nach User A-L und M - Z aufteilen, um zur Lastverteilung die hälfte der Aufrufe von einem anderen Server durchführen zu lassen...
###
my $buchstabe=lc(substr($FORMDATA{User}, 0,1));
$buchstabe = "09" if ($buchstabe =~ /[0-9]/);
my $Server;
if ($buchstabe =~ /[a-l]/)
{ print "Location: http://www.myDomain6.de/cgi-perl/imagetn.pl?".$item."User=$FORMDATA{User}&Galerie=$FORMDATA{Galerie}&Image=$FORMDATA{Image}\n\n"; }
else
{
$Server ="www.myDomain4.de";
###
### Die User A - L sind nun weg...
###

### wenn der Wert item nicht existiert, erfolgt der Aufruf von einer anderen URL und soll angezeigt werden!!
if (!exists($FORMDATA{item}) || $FORMDATA{item} eq 0)
{ print "Location: http://$Server/ebay/userdaten/$buchstabe/$FORMDATA{User}/$FORMDATA{Galerie}/$FORMDATA{Image}tn.jpg\n\n"; }
else
{
# Für alte Anfrage, in denen Formulfeldarname BILD anstelle von IMAGE verwendet wird
$FORMDATA{Image} = $FORMDATA{Bild} if (!$FORMDATA{Image} && $FORMDATA{Bild});

print "Content-type: image/jpg\n";

### Wenn der Wert item doch existiert (= Bildaufruf erfolgt aus einer eBay-Auktion), soll in einer Blacklist überprüft werden,
### ob dieses Bild für diese Auktion (=item) gespert ist.


##Blacklist?
my $ergebnis = &blacklist($FORMDATA{item},$FORMDATA{Galerie});

###
### Mögliche Ausgaben der DB:
### 0 = Alle Bilder gesperrt.
### 6: Alle Bilder über 6 gesperrt (0-5 erlaubt),
### "ok"= ALLE Bilder dürfen angezeigt werden,
### "": Eintrag existiert nicht -> alle Bilder anzeigen
###

if (($FORMDATA{Image} <= int($ergebnis) and int($ergebnis) > 0) or $ergebnis eq 'ok' or $ergebnis eq '')
{ print "Location: http://$Server/ebay/userdaten/$buchstabe/$FORMDATA{User}/$FORMDATA{Galerie}/$FORMDATA{Image}tn.jpg?$ergebnis\n\n"; }
else
{ print "Location: http://www.myDomain3.de/grafics/keinBild.gif\n\n"; }
}
}
### FERTIG






sub blacklist
{
my ($item,$galerie)=@_;
my $datenbank = "blacklist";
my $datenbankhost = "localhost";
my $datenbankuser = "xxx";
my $datenbankpw = "yyy";

$fehlermeldung = 'Fehler bei der Datenbankverbindung aufgetreten. Bitte ueberpruefen Sie die Angaben';

#DB Connect herstellen
my $dbh = DBI->connect("DBI:mysql:$datenbank:$datenbankhost","$datenbankuser","$datenbankpw") or fehlerausgabe($fehlermeldung);

my $sth = $dbh->prepare("SELECT art FROM 'blacklist' WHERE item = '$item' and Galerie = '$galerie' ");
$sth->execute or fehlerausgabe(DBI->errstr);
my ($ergebnis) = $sth->fetchrow_array();

# DB Connect beenden
$dbh->disconnect;

# Egebniss zurück
return $ergebnis;
}# Ende sub

sub fehlerausgabe
{ die $_[0]; }

wobei ich das script so nicht getetet habe (keine Datenbank und übergenen Werte), aber es sollte funktionieren. :-)

View full thread 2 Fragen: Use strict und Apacheneustart?