<perl>
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# Konstanten in Variablen schreiben, damit man später bei Veränderungen
# nicht das ganze Script durchgehen muss
$maxA = 25;
$maxB = 15;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
$Datum_in = $Datum} if $Datum; # bedingt, wenn Formular abgeschickt wurde
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# Wunschmengen zwischenspeichern zum Berechnen
$wunsch_A = $_put{AnzahlA};
$wunsch_B = $_put{AnzahlB};
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #
# hier machen wir mal ne Eingabekontrolle, ob auch Name und eMail
# wirklich eingegeben wurden
if (%_put) { # wenn das Formular abgeschickt wurde
# wenn name leer oder nur leerzeichen eingegeben wurden
if ($_put{name} eq "" || $_put{name) =~ s/\s// = "") {
$cnt_fehler++;
$ff_fehler = "<li>Bitte geben Sie Ihren Namen an</li>";
}
# wenn eMail leer ist oder nicht richtig eingegeben wurde
# Mailaddys müssen mind. 7 Zeichen lang sein (@, Punkt, TLD mind. 2 Zeichen
# Domainname mind. 2 Zaichen und Namensteil mind. 1 Zeichen - damit hat man
# ne relativ gute Kontrolle...
if (length( $_put{EMail} < 7 || index($_put{email,"@") < 1 || index($_put{email,"."} < 4){
$cnt_fehler++;
$ff_fehler .= "<li>Bitte gültige EMail-Adresse angeben</li>";
}
} # E if put
# nun die gesamte Fehlermeldung zusammenbauen (nur wenn auch wirklich Fehler
# aufgetreten sind
if ($cnt_fehler > 0){
$ff_fehler =<<EOF;
<ul>
<font color='red' size=1>Es liegen folgende $cnt_fehler Eingabefehler vor:
$ff_fehler
</font>
</ul>
EOF
}
# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# Nachschaun, was denn schon so los ist an dem Tag
get "Datum==$Datum_in", "reservierungen", "hol_ds";
while(get_next("hol_ds")){
# A und B Istwerte ermitteln, alles in einem get erschlagen
# (ist sinnvoll und gut für die Scriptlaufzeit)
$istreserviertA += $AnzahlA;
$istreserviertB += $AnzahlB;
} # E while_get_next
# Gesamtzahlen (einschl. der gewünschten)für Kateg. ermitteln
$gesamtA = $istA + $wunschA;
$gesamtB = $istB + $wunschB;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# Freie Plätze f. Kateg. ermitteln (einschl. Wunschanzahl)
$istfreiA = $maxA - ($istreserviertA + $wunschA);
$istfreiB = $maxB - ($istreserviertB + $wunschB);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #
# hier jetzt die Optionfelder dynamisch bauen(ist aber nur bei geringen
# Kontigenten vielleicht so um die 30 sinnvoll, andernfalls wäre ein normales Eingabe-
# feld sinnvoller, müsste aber dann gesondert oben abgeprüft werden, auch auf Zahl
# (das geht mit ner Regex/Pattern-Matching irgendwie
# if ( $_put{AnzahlA} =~ m/\D/){dan fehler}
$a_sel_anzahlA = "<select name='anzahla:='><option value="">Anzahl...</option>\n";
for my $zahl(1..$istfreiA){
$a_sel_anzahlA .= "<option value ='$zahl'>$zahl<option>\n";
}
$a_sel_anzahlA .= "<select>\n"
#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .#
$a_sel_anzahlB = "<select name='anzahlb:='><option value="">Anzahl...</option>\n";
for my $zahl(1..$istfreiB){
$a_sel_anzahlB .= "<option value ='$zahl'>$zahl<option>\n";
}
$a_sel_anzahlB .= "<select>\n"
#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .#
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #
#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .#
if ($istfreiA < $wunschA || $istfreiB < $wunschB){ # wenn überbucht würde
# variable ausgabe für die meldung bauen, je nachdem, welche
# kategorie durch die neuen bestellung überfüllt würde
# ggf. plural-endung mit bauen
$bindewort = "ist";
$katvoll = "A" if $istfreiA < $wunschA;
if ($istfreiA < $wunschA && $istfreiB < $wunschB){ # wenn beide kats überbucht würden
$plural = "n"; $bindewort = "sind"
$katvoll .= " und "
} # e if frei < wunsch)
$katvoll .= "B" if $istfreiB < $wunschB;
if ($istfreiA > 0 || $istfreiB > 0){
$a_nochfrei = "Folgende Freien Plätze sind noch vorhandenAnh<br>";
$a_nochfrei .= "<li>Kategorie A: $istfreiA Plätze</li>" if $istfreiA > 0;
$a_nochfrei .= "<li>KategorieB: $istfreiB Plätze</li>" if istfreiB >0;
}
#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .#
out<<EOF;
Ihre Reservierung kann leider nicht angenommen werden.<br>
Die Kategorie$lural $katvoll $bindewort bereits ausverkauft.<br>
<ul>$a_nochfrei</ul>
EOF
$cnt_fehler = 1; # Fehlerzähler auf 1 setzen, damit nicht gespeichert wird
} # E Fehlerauswertung und Ausgabe Fehlerhinweis
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# hier jetzt nicht ""sonst" abspeichern sondern fürs Abspeichern gesondert die Bedingungen
# abfragen: wenn kein Fehler und istfreiA und istfreiB grösser als der Wunsch
if ( $cnt_fehler <=0 && ($istfreia >= $wunschA && $istfreiB >= $wunschB)) { # ok
if (%_put && $cmd eq "add") {
put undef, "reservierungen";
out<<EOF;
<h3>Vielen Dank für Ihre Reservierung</h3>
Folgende Daten wurden von Ihnen eingegeben:
<ul>Reservierungsdaten:
<li>Datum: $_put{Datum}</li>
<li>Name: $_put{Name}</li>
<li>AnzahlB: $_put{AnzahlA}</li>
<li> AnzahlB: $_put{ AnzahlB}</li>
EOF
$wurde_gespeichert = 1;
}
}
# Hier das Formular ausgeben, aber nur bedingt, wenn nicht abgespeichert wurde
if (!$wurde_gespeichert){
out<<EOF;
Folgende Freien Plätze sind noch vorhanden:<br>
Kategorie A: $istfreiA - KategorieB: $istfreiB<br>
Bitte wählen Sie die gewünschte Anzahl Reservierungen aus:<br>
<form action="$_link" method=post enctype="multipart/form-data">
<input type="hidden" name="cmd=" value="add"></input>
<input type="hidden" name="Datum:=" value="$Datum_in"></input>
<font face=verdana size=-1>
Anzahl-A: $a_sel_anzahlA ($istfreiA)
Anzahl-B: $a_sel_anzahlB <br>
Name:<input type=text name="Name:="></input><br>
Email: <input type=text name="Email:="></input><br>
Name + Email sind Pflichtfelder!
<input type="submit" value="reservieren"></input>
</form>
</font>
EOF
}
</perl>
---schnapp