[cologne-pm] Tag zusammen

Thomas Baedorf tom at buchforst.ping.de
Di Jun 22 05:39:59 PDT 2010


On Mon, Jun 21, 2010 at 11:56:23PM +0200, Aristoteles Pagaltzis wrote:
> * Thomas Baedorf <tom at buchforst.ping.de> [2010-06-20 16:00]:
> > Da habe ich ja gleich zum Einstand mit meinen Kenntnissen
> > imponiert ;)
> 
> Schwamm drüber und egal. Man muß kein Überhacker sein, um hier
> mitzumachen. :-)
> 
> > >Das schreibt man grundsätzlich
> > >
> > >    if ( ... ) { ... }
> > >
> > >d.h. die äusseren Klammern gehören grundsätzlich zum `if`.
> > Ja, war nur ein Beispiel.
> >
> > Danke für die schnelle Antwort
> 
> Äh??? heisst das jetzt, dass dein Problem gelöst ist, oder dass es
> *nicht* gelöst ist?
[...]
Leider Nein (*nicht* gelöst). Ich habe der Einfachheit halber ein Beispiel
gewählt das ohne "\n" zwar die selbe Fehlermeldung produziert,
aber die Lösung läßt sich so nicht übertragen.

Also es handelt sich um eine mit CGI.pm programmierte Webseite.
Der Quelltext ist aber ziemlich lang - ich versuch's kurz zu machen.

--------bl.cgi-----------------------------------

###!/usr/bin/perl -w
#--bl.cgi--
use strict;
use CGI qw(:standard);
use CGI::Carp 'fatalsToBrowser';#__fuer pgverbindung::anmachen
use bundesliga;
use matrix;
use ergebnis;
use pgverbindung;
use ligawahl;
use statistik;
#use traum;
################################################################
my $charset="utf-8";#fuer Datenbankausgabe
my $fehlercode=1;#datenbank nicht an
#---------------------------------
my $dbh=pgverbindung::anmachen() or die ligawahl::notfall($fehlercode);
[...]

----ENDE----bl.cgi----------------------------------

Worum geht's: Aus einem CGI Skript heraus soll,  falls die Datenbank nicht
eingeschaltet ist oder die entsprechende Datentabellen nicht vorhanden sind,eine Fehlermldung
erfolgen

--------pgverbindung.pm---------------------------------------------

package pgverbindung;

use strict;
#PostgreSQL-Datenbankverbindung
use DBI;

my ($dsn,$dbh,$sth);#data-sourcename,databasehandle,statementhandle

my $username="www-data";
my $passwort;
#$dsn="DBI:Pg:dbname=bundesliga";
$dsn="DBI:Pg:dbname=fussball";
my $attr={'AutoCommit'=>1,#REFERENZ!!
	'PrintError'=>1,
	'RaiseError'=>0};

sub anmachen
{
return (DBI->connect($dsn,$username,$passwort,$attr));
}#ende anmachen
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
1;#gib true zurueck

--ENDE--pgverbindung.pm-----------------------------------------------

--------ligawahl.pm---------------------------------------------------

package ligawahl;
use strict;
use CGI qw(:standard);
################################################################

sub auswahl {
my $liga="keineliga";
my ($dbh,$jahr,$name)=@_;

SWITCH:{
if($jahr eq "63/64" && $name =~ "1.Bundes"){$liga="liga1saison6364";last SWITCH}
if($jahr eq "64/65" && $name =~ "1.Bundes"){$liga="liga1saison6465";last SWITCH}
[...]
if($jahr eq "09/10" && $name =~ "2.Bundes"){$liga="liga2saison0910";last SWITCH}
}

my $hohetag=$dbh->selectrow_array("select max(spieltag) from $liga");
#es muessen also schon min. 1 Spieltag eingegeben sein ;evtl ohne Ergebnisse

if ($hohetag>0){#gibt es die liga ueberhaupt?
return $liga;
}else{
notfall();exit;
}
}#ende sub
################################################################

sub notfall {
my ($fehler,$hinweis);
$fehler=@_;
if ($fehler == 1){
$hinweis =<<ENDE;
PostgreSQL Fussballserver ist nicht eingeschaltet
ENDE
}else{
$hinweis =<<ENDE;
F&uuml;r dieses Jahr und diese Liga sind keine Daten vorhanden
ENDE
}


print   header(
	-type => "text/html"),
	start_html(
	-title => "FUSSBALL",
	-bgcolor => "#7C8155"),# 
	h1({-style=>'Color:#FF8C00;'},param("ln"),param("lj")),#!!interessant param?
	small a({href=>'../startfusb.cgi'},'Ligaauswahl'),
	h1({-style=>'Color:#FF8C00;'},"Wir haben hier ein Problem"),#
	h2({-style=>'Color:#112299;'},$hinweis);


print end_html;

}#ende-sub

1;

--ENDE--ligawahl.pm--------------------------------------------------
 
Verwirrend, nicht wahr? Ich verstehs teilweise selbst nicht mehr.
Aber das ist ja auch gute Perl-Tradition: Einmal schreiben, nie mehr verstehn ;)

Aber mal im Ernst. Vermutlich läßt sich mit der "die" Funktion 
nicht in einer anderen Funktion (und Modul) eine "print header" Funktion
ausführen.
Ich werde es wahrscheinlich komplett umschreiben müssen.

Die Lösung mit "\n" läßt sich also nicht übertragen, etwa:
my $dbh=pgverbindung::anmachen() or die "ligawahl::notfall($fehlercode)\n";
klappt auch nicht.
Falls man "die" durch "croak" ersetzt, wie von einem anderen Kollegen vorgeschlagen,
wirds eher noch schlimmer.

Tut mir Leid dass ich Euch durch Verkürzung des Zusammenhangs auf die falsche Fährte
gelockt habe.
Falls mal jemand gucken will was ich meine :
"http://geissbock.dyndns.info/cgi-bin/fussball/startfusb.cgi" -> 'los gehts'

Ich habe die Datenbank auch extra ausgemacht ;)

Ich stecke jetzt übrigens in einem Dilemma. Ich habe das Thema zwar angezettelt,
habe momentan aber nicht allzu viel Zeit. Kann also sein dass ich auf etwaige
Meldungen spät reagiere.

P.S. Falls die Datenbank eingeschaltet ist und man wählt z.B 1963/64 und 2.te Liga(da gabs
noch keine) kommt die Fehlermeldung wie von mir gewünscht.

schönen Tag noch...


-- 
______
Thomas


Mehr Informationen über die Mailingliste cologne-pm