Perl und CGI

Hallo
Erstelle gerade eine Datenbank für den Verkauf von Fenstern.
Habe einen Skript und komme nicht weiter.
Einen Einzelpreis anhand einer Bestellnummer aus der Datenbank zu bekommen, bekomme ich gerade noch hin. Aber wen sich die Bestellnummer anhand der Eingabefelder erst ergibt, bekomme ich ein großes Problem.
Beispiel:
B:500 mm x H:600 mm = Bestellnummer 500600
B:500 mm x H:600 mm + Rollladenführungen = Bestellnummer 500600rf

Wer kann mir dabei helfen?
Bisherige Versuche unter http://www.grollsystem.de/lager/003.rar

Würde mich sehr über Resonanz freuen

gez. Groll

Hallo

Wer kann mir dabei helfen?
Bisherige Versuche unter
http://www.grollsystem.de/lager/003.rar
Würde mich sehr über Resonanz freuen

Darfst Du Perl-Module verwenden/installieren,
(konkret HTML::Template) oder mußt Du mit
den Gegebenheiten klarkommen?

Meinst Du mit „Datenbank“ eine Textdatei mit
Zeilenweisen einträgen?

Grüße

CMБ

Hallo,

Aber wen sich die
Bestellnummer anhand der Eingabefelder erst ergibt, bekomme
ich ein großes Problem.
Beispiel:
B:500 mm x H:600 mm = Bestellnummer 500600
B:500 mm x H:600 mm + Rollladenführungen = Bestellnummer
500600rf

Wer kann mir dabei helfen?

Wie willst du denn aus den Eingaben eine Bestellnummer basteln? Gibt es dafür feste Regeln?

Das übliche vorgehen wäre den Benutzer etwas eingeben zu lassen, danach wird dann in der Datenbank gesucht, dem Benutzer werden alle Treffer gezeigt, und er kann dann eines auswählen.

Möchtest du das genauso machen?

Grüße,
Moritz

Darfst Du Perl-Module verwenden/installieren,
(konkret HTML::Template) oder mußt Du mit
den Gegebenheiten klarkommen?

das kann man eigentlich immer, zumindest wenn es pure-perl
module sind:
http://wiki.perl-community.de/bin/view/Wissensbasis/…

Hallo Tina,

Darfst Du Perl-Module verwenden/installieren,
(konkret HTML::Template) oder mußt Du mit
den Gegebenheiten klarkommen?

das kann man eigentlich immer, zumindest wenn es pure-perl
module sind:

Schon klar, aber das bedeutet für den OP zweifellos eine
Komplikation, die man imho vermeiden sollte, wenn es
möglich ist.

BTW: ich preloade/cache einige HTML::Template-Templates beim
Apache-Startup, also etwa sowas:

 ...
 use HTML::Template;
 use File::Find;

 find(
 sub {
 return unless /\.htm$/;
 HTML::Template-\>new(filename =\> "$File::Find::dir/$\_", cache =\> 1);
 },
 '/srv/my/loc/html/tmpl'
 );

 print STDERR "done\n";
 # ----------------------------- #
 ...

Gibt es Daumenregeln/Erfahrungen, ab welcher Last
sich H::T::C dennoch lohnt?

Grüße & Danke

CMБ

BTW: ich preloade/cache einige HTML::Template-Templates beim
Apache-Startup, also etwa sowas:

[…]

dafür hat HTC eine eigene funktion =)

my $preloaded\_count = HTML::Template::Compiled-\>preload($cache\_dir);

Gibt es Daumenregeln/Erfahrungen, ab welcher Last
sich H::T::C dennoch lohnt?

schwer zu sagen, es gibt viele sachen, die das beeinflussen.
grundsätzlich sollte man erst mal checken, ob HTC mit den eigenen
templates klarkommt (es gibt kleine unterschiede, wie im pfad nach
templates gesucht wird).
ansonsten lohnt es sich eigentlich immer. der speicherverbrauch wird
naturgemäss etwas höher sein, performance gewinnst du gegenüber H::T
in jedem fall (mit memory-cache, ansonsten ist es sogar langsamer).
ich sag jetzt mal grob, das templating wird 6-7 mal schneller, je nach
optionen. bei vielen anwendungen ist der flaschenhals die datenbank, aber
das kann man mit dem programm memcached sehr schön optimieren, und dann
wirkt sich die geschwindigkeit vom templating auch stärker aus.

Hallo.
Ja, darf ich. Lade dir doch bitte die datei runter und schau es dir an.
Ja, Datenbank mit Textdateien.
z.B. Bestellnummer Leerzeichen Einzelpreis

Gruß
J.Groll

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

>

#!/usr/bin/perl -w

bestell1.pl

Verarbeitung des Bestell-Formulars

use CGI qw(:all) ;

$preis_datei = ‚preise.dat‘ ;

Waren-Daten einlesen: zwidim. Hash

open PR, $preis_datei or die $! ;
while ($line = ) {
chomp $line ;
($nr,$pr) = split ’ ', $line ;
$preis{$nr} = $pr ;
}
close PR ;

Formulardaten einlesen

$breite = param(‚breite‘) ; $hoehe = param(‚hoehe‘) ;
$farbe = param(‚farbe‘) ; $groesse = param(‚groesse‘) ;
$anzahl = param(‚anzahl‘) ;
$bestellnr = param(‚breite‘) ; [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

>

#!/usr/bin/perl -w

bestell1.pl

Verarbeitung des Bestell-Formulars

use CGI qw(:all) ;

$preis_datei = ‚preise.dat‘ ;

Waren-Daten einlesen: zwidim. Hash

open PR, $preis_datei or die $! ;
while ($line = ) {
chomp $line ;
($nr,$pr) = split ’ ', $line ;
$preis{$nr} = $pr ;
}
close PR ;

Formulardaten einlesen

$breite = param(‚breite‘) ; $hoehe = param(‚hoehe‘) ;
$farbe = param(‚farbe‘) ; $groesse = param(‚groesse‘) ;
$anzahl = param(‚anzahl‘) ;
$bestellnr = param(‚breite‘) ; [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

>

#!/usr/bin/perl -w

bestell1.pl

Verarbeitung des Bestell-Formulars

use CGI qw(:all) ;

$preis_datei = ‚preise.dat‘ ;

Waren-Daten einlesen: zwidim. Hash

open PR, $preis_datei or die $! ;
while ($line = ) {
chomp $line ;
($nr,$pr) = split ’ ', $line ;
$preis{$nr} = $pr ;
}
close PR ;

Formulardaten einlesen

$breite = param(‚breite‘) ; $hoehe = param(‚hoehe‘) ;
$farbe = param(‚farbe‘) ; $groesse = param(‚groesse‘) ;
$anzahl = param(‚anzahl‘) ;
$bestellnr = param(‚breite‘) ; [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

[fullquote]

>

bitte poste in zukunft ‚dein problem‘ nicht zweimal, und zitiere
bitte auch nur den text, auf den du dich beziehst.
danke.

gruss, tina

edit: jetzt hast du ein drittes mal denselben text gepostet
und schon wieder den ganzen artikel zitiert. was soll das?

Hallo,

>

Falsch. Das ist dein Script.
Dein Problem ist, dass du nicht auf Fragen eingehst. Und dass du uns dein Problem nicht so aufbereitest, dass wir dir helfen können, sondern uns einfach ein Archiv hinknallst und sagst, dass wir dein Problem lösen sollen.

Und wenn du code hier postest, dann bitte in pre-Tags:

 # dein Code hier

Grüße,
Moritz

Hallo

Hallo.
Ja, darf ich. Lade dir doch bitte die datei runter und schau
es dir an.
Ja, Datenbank mit Textdateien.
z.B. Bestellnummer Leerzeichen Einzelpreis

Erstmal zum Procedere, Du brauchst hier nicht so
oft auf Deine Frage aufmerksam machen zu wollen :wink:

Wenn z.B. ich in Deinem Thread antworte (und Fragen stelle),
dann bearbeite ich das Problem auch mit 99% iger Sicherheit.
Bei den anderen Programmierern hier wird es ähnlich sein.

Nun ist es so, daß sich eine Lösung nicht in 10 min fin-
den läßt, weil es doch eine gewisse Komplexität umfaßt
(ich hab’s mir angesehen). Wahrscheinlich werde ich
am Wochenende etwas Zeit dafür finden.

Ich würde Dich aber inzwischen bitten, einmal ganz klar
auszuformulieren, was genau Du bezwecken willst, Ich
vermute, Du willst Fenster (-rahmen?) mit bestimmten
Eigenschaften verkaufen.

Du hast zunächst eine „Datenbank“ erwähnt, dies ist
offensichtlich eine zeilenweise organisierte Textdatei
mit dem Namen ‚preise.dat‘.

Schau Dir mal einen Artikel von Dir an. Was gehört dazu,
eine Bestellnummer? Ein Größencode? Eine konkrete Größe
in mm²? Eine „kurze Produktbeschreibung“?

Wo stehen denn diese ganzen Daten drin? In der HTML-Datei?
Das wäre sehr sehr ungünstig.

*Alle* diese Daten gehören in eine Datei, die dann nicht
mehr ‚Preise.dat‘ sondern ‚Produkte.dat‘ heißen solle.

Aus [preise.dat]

500500 250.00
500600 260.99

würde dann [produkte.dat]

500500 ; 128 ; 250.00 ; Fenster 500mm x 500m ohne Führung
500600 ; 130 ; 260.99 ; Fenster 500mm x 5600m ohne Führung

Also im Prinzip kommen *alle* Angaben zu einem Posten
auf *eine* Zeile. Sonstige Angaben gibt es nicht.

Dazu gehört dann *ein* Perl-Programm, welches 3 if-Blöcke
hat. Diese 3 Blöcke entsprechen dem „Workflow“ eines Benutzers
bei der Bestellung. Der Start der Bestellung beginnt mit
dem Aufruf des Programms *ohne* Parameter (also im GET-Modus).
z.B.: http://www.grollirgendwas.de/cgi-bin/bestellung.pl

(1) der erste if-Block wäre dann;

 ...
 if( $cgi-\>request\_method() eq 'GET' ) {
 # - lese die Datei ein und zeige die Produkte
 # als html-Tabelle/Form an (mit select/radio etc.Buttons).
 # - benutze dazu ein HTML-Template und lade es
 # über das Modul HTML::Template (z.B.: produkte.htm)
 # - stell einen submit-Button bereit, der das selbe srcipt
 # <u>noch einmal</u> im 'POST'-Modus aufruft =\> (2)
 }

(2) Dann kommt der nächste if-Block (wenn das Programm im POST-modus
aufgerufen wird:

 ... 
 if( $cgi-\>request\_method() eq 'POST' && $cgi-\>param(pruefen) eq 'ja') {
 # - lese die Datei (produkte.dat) nochmals ein ,
 # - anhand der empfangenen Parameter eine Tabelle der
 # bestellten Waren anzeigen, Gesamtpreis anzeigen (Template)
 # - Submit-Button [bestätigen] bereitstellen =\> zu (3)
 # - Button [korrigieren] bereitstellen =\> wieder zu (1)
 }
 ...

(3) Der letzte if Block (auch POST-Modus):

 ...
 if( $cgi-\>request\_method() eq 'POST' && $cgi-\>param(bestellen) eq 'ja') {
 # - schreibe bestellung in die Datei 'bestellungen.dat' (=\> weiteres Thema)
 # - Bestellung nochmal (Information) anzeigen und bedanken (Template) 
 # - Links zu =\> Deiner Startseite, und =\> [weitere Bestellung]
 }
 ...

Das wäre imho die Minimalvariante, => ein Perl-Programm und
3 kleine html-Schnipsel (Templates). Alles andere würde imho
zu kompliziert oder ergibt Murks.

Wichtig wäre, daß Du die ‚produkte.dat‘ entsprechend aufarbeitest
und mit *allen* für die Bestellung relevanten Daten füllst. Du
könntest dann mal 3 Zeilen davon hier posten, damit wir Dir
weiter helfen können (mit dem Perl-Programm und den html-Schnipseln).

Wenn das fertig ist, kannst Du dann noch eine Authentifizierung
einbauen.

Grüße

CMb

1 Like