Files
sternwarte_server/html/sternwarte/anmeldung_offline.php
2025-11-02 22:52:08 +01:00

482 lines
23 KiB
PHP

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Sternwarte Welzheim</title>
<!--[if IE 5]>
<link href="css/ie5.css" rel="stylesheet" type="text/css"/>
<![endif]-->
<!--[if IE]>
<style type="text/css">
<link href="css/ie.css" rel="stylesheet" type="text/css"/>
</style>
<![endif]-->
<link href="css/jquery-ui.min.css" rel="stylesheet" type="text/css"/>
<link href="css/sternwarte1.css" rel="stylesheet" type="text/css"/>
<script src="javascript/jquery-1.11.0.min.js"></script>
<script src="javascript/jquery-ui-1.10.0.custom.min.js"></script>
<script src="javascript/sternwarte.js"></script>
</head>
<body class="thrColFixHdr">
<div id="container">
<?php include 'header.php'; ?>
<?php include 'navi.php'; ?>
<div id="sidebar2">
<?php include 'fdatum.php'; ?>
<?php include 'himmelerg.php'; ?>
</div>
<div id="datenschutz"></div>
<?php
// ---------- globale Konstanten
$vorlauf = 24;
$maxPersonen = 10;
$autofill = false;
?>
<?php
// Aus den 3 Einträgen aus der 'fdatum' table ein leserliches Datum erzeugen
// Parameter:
// $wt -> Wochentag
// $dat -> Datum
// $ti -> Uhrzeit
// Return: Datuns/Zeit-String
function buildDate($wt,$dat,$ti) {
$dat = preg_replace('#^(\d{4})(\d{2})(\d{2})$#', '\3.\2.\1', $dat);
$r = substr($wt,0,2) . ", " . $dat . " " . $ti;
return $r;
}
// Aus der DB aus der Table 'fdatum' den Eintrag für $fid holen
// und als Datum/Zeit-String übergeben
// Parameter:
// $fid -> id des Führungsdatums in der Datenbank-Tabelle
// Return: Datum/zeit-String
function holDate($fid) {
global $db;
$sql_sel = "SELECT wtag, datum, uhrzeit FROM fdatum where id = '$fid'";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error());
$data = mysqli_fetch_assoc($result);
$ret = array();
$ret[] = $data['wtag'];
$ret[] = $data['datum'];
$ret[] = $data['uhrzeit'];
$ret[] = buildDate($data['wtag'], $data['datum'], $data['uhrzeit']);
return $ret;
}
// die Daten der nächsten 30 Führungen in ein Array holen
// Parameter -
// Retunrn: Array mit allen Werte aus der Table
function getNextFuehrungen() {
global $db, $vorlauf;
$erg = array();
$toadd = '+' . $vorlauf . 'hour';
$dt = new DateTime($toadd);
$datum_heute = $dt->format('Ymd');
$sql_sel = "SELECT id, wtag, datum, uhrzeit FROM fdatum where datum >='$datum_heute' order by datum ASC LIMIT 30";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error());
while ($row = mysqli_fetch_row($result)) {
$entry = array();
$entry['fid'] = $row[0];
$entry['weekday'] = $row[1];
$entry['date'] = $row[2];
$entry['time'] = $row[3];
$erg[] = $entry;
}
return $erg;
}
// 'select'-Tag für die Führungen bauen
// Paramter:
// $fuehrungen -> Array mit den kommenden Führungen
// Return: Sring mit dem HTML-Code
function bauNextFuehrungen($fuehrungen, $maxP) {
$r = "<label for='ftermin' class='labeltext'>" .
"<strong>Führungsdatum</strong></label>" .
"<select name='ftermin' id='ftermin'>";
foreach ($fuehrungen as $f) {
$count = getCountsPerDate($f['fid']);
$r .= "<option value='" . $f['fid'] . "'";
if(getCountsPerDate($f['fid']) >= $maxP) {
$r .= "disabled";
}
$r .= ">" . buildDate($f['weekday'],$f['date'],$f['time']);
$r .= " &nbsp;&nbsp;Frei: ";
$r .= $maxP-$count;
$r .= "</option>";
}
$r .= "</select>";
return $r;
}
// Zählen, wieviele Personen zu einem Führungstermin angemeldet sind
// Parameter:
// $fid -> id des Führungsdatum
// Return: Anzahl der Personen
function getCountsPerDate($fid) {
global $db;
$sql_stmt = "SELECT SUM(anzahl) AS count FROM anmeldungen WHERE fid='$fid'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error());
$data = mysqli_fetch_assoc($result);
return $data['count'];
}
?>
<div id="mainContent">
<?
// Hier werden alle notwendigen Variablen eingesammelt ------------------------
if (isset($_POST['submit'])) {
$stern_name = $_REQUEST['name'];
$stern_vorname = $_REQUEST['vorname'];
$stern_strasse = $_REQUEST['strasse'];
$stern_ort = $_REQUEST['ort'];
$stern_plz = $_REQUEST['plz'];
$stern_tel = $_REQUEST['tel'];
$stern_mail = $_REQUEST['mail'];
$stern_teil = $_REQUEST['teil'];
$xxx = array();
$xxx[] = holDate($_REQUEST['fdlink']);
$stern_datum = $xxx[0][3];
$stern_fdlink = $_REQUEST['fdlink'];
$stern_submit = $_REQUEST['submit'];
$stern_actionstern = $_REQUEST['stern_actionstern'];
$stern_remarks = $_REQUEST['remarks'];
} else {
$stern_name = '';
$stern_vorname = '';
$stern_strasse = '';
$stern_ort = '';
$stern_tel = '';
$stern_mail = '';
$stern_teil = '';
$stern_datum = '';
$stern_submit = '';
$stern_fdlink = '';
$stern_actionstern = '';
$stern_remarks = '';
}
// Hier werden default Werte gesetzt ------------------------
$stern_error_msg = '';
$stern_meldung = '';
$stern_errors = 0;
$andererTermin = "bitte wählen Sie einen anderen Termin";
// ----------------------------------------------------------
switch ($stern_actionstern) {
case 'senden':
// Hier wir geprüft, ob alle Felder ausgefüllt sind ------------------------
if (trim($stern_name) == '') {
$stern_error_msg .= 'Bitte geben Sie Ihren Namen ein.<br />';
$stern_errors++;
}
/*
if (trim($stern_vorname) == '') {
$stern_error_msg .= 'Bitte geben Sie Ihren Vornamen ein.<br />';
$stern_errors ++;
}
*/
if (trim($stern_strasse) == '') {
$stern_error_msg .= 'Bitte geben Sie eine Straße ein.<br />';
$stern_errors ++;
}
if (trim($stern_plz) == '') {
$stern_error_msg .= 'Bitte geben Sie eine Postleitzahl ein.<br />';
$stern_errors ++;
}
if (! preg_match("/^[0-9]{5}$/", $stern_plz)) {
$stern_error_msg .= 'Bitte geben Sie bei der Postleitzahl mindestens fünf Ziffern und keine Buchstaben ein.<br />';
$stern_errors ++;
}
if (trim($stern_ort) == '') {
$stern_error_msg .= 'Bitte geben Sie einen Ort ein.<br />';
$stern_errors ++;
}
/*
if (trim($stern_tel) == '') {
$stern_error_msg .= 'Bitte geben Sie eine Telefonnummer ein.<br />';
$stern_errors ++;
}
*/
if (!preg_match("/^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}/",
strtolower($stern_mail))) {
$stern_error_msg .= 'Bitte geben Sie eine gültige E-Mail-Adresse ein.<br />';
$stern_errors++;
}
$belegt = getCountsPerDate($stern_fdlink);
$rest = $maxPersonen-$belegt;
if((trim($stern_teil) + $belegt) > $maxPersonen) {
if ($rest <= 0) {
$stern_error_msg .= "Die Führung ist ausgebucht, $andererTermin<br />";
} else {
$stern_error_msg .= "Die Führung ist schon mit $belegt Personen belegt, es ";
if ($rest == 1) {
$stern_error_msg .= "kann nur noch 1 Person ";
} else {
$stern_error_msg .= "können höchstens noch $rest Personen ";
}
$stern_error_msg .= "angemeldet werden.<br />";
}
$stern_errors++;
}
$nun = strtotime("now");
list($w,$d,$t,$s) = holDate($stern_fdlink);
$fzt = substr($fzeit,0,2);
$fz = strtotime("$d" . "t" . substr($t,0,2) . "00");
$dauer = ($fz - $nun) / 3600;
if ($dauer <= $vorlauf) {
$stern_error_msg .= "Die Anmeldung muss <strong>spätestens</strong> $vorlauf Stunden vor Beginn der Führung erfolgen - $andererTermin.<br />";
$stern_errors++;
}
if ($stern_errors == 0) {
$sql_stmt = "INSERT INTO anmeldungen (name, vorname, strasse, plz, stadt, telefon, email, anzahl, fid, remarks, angemeldet)" .
" values('$stern_name', '$stern_vorname', '$stern_strasse', '$stern_plz', '$stern_ort', '$stern_tel'," .
"'$stern_mail', '$stern_teil', '$stern_fdlink', '$stern_remarks', CURDATE())";
$ins = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$person = $stern_teil == 1 ? "Person" : "Personen";
$body = "\r\nName, Vorname: $stern_name, $stern_vorname \r\n" .
"Strasse: $stern_strasse \r\n" .
"Ort: $stern_plz $stern_ort \r\n" .
"Telefon: $stern_tel \r\n" .
"E-mail: $stern_mail \r\n" .
"Gewünschter Termin: $stern_datum \r\n" .
"Teilnehmerzahl: $stern_teil \r\n" .
"Bemerkungen: $stern_remarks \r\n";
$bodya = "Sehr geehrte Dame, sehr geehrter Herr, \r\n\r\n" .
"hiermit bestätigen wir Ihre Anmeldung zu einer Führung auf der Sternwarte Welzheim für\r\n\r\n" .
"$stern_vorname $stern_name am " . preg_replace("/(\d+) Uhr/","um $0",$stern_datum) . " für $stern_teil $person " .
// $stern_teil == 1 ? "Person" : "Personen" .
".\r\n\r\n" .
"Bitte bringen Sie diese Bestätigung als Ausdruck oder digital zur Führung mit. \r\n".
"Ohne diese Bestätigung erfolgt ausnahmslos k e i n Einlass.\r\n\r\n" .
"Die Führung findet NUR bei sternklarem Himmel statt. Falls der Himmel bedeckt ist \r\n" .
"und die Führung ausfällt, bitten wir Sie um eine neue Anmeldung.\r\n\r\n" .
"Die Hygienevorschriften sind zu beachten: Die Teilnehmer müssen Gesichtsmasken \r\n" .
"tragen und den vorgeschriebenen Abstand halten. " .
"Nicht teilnehmen dürfen Personen, \r\ndie in den letzten vierzehn Tagen Kontakt " .
"mit einem Coronavirus-Infizierten \r\nhatten oder Infektionssymptome zeigen.\r\n\r\n" .
"Mit freundlichen Grüßen\r\n\r\n" .
"Beobachterteam der Sternwarte Welzheim\r\n\r\n" .
"www.sternwarte-welzheim.de";
$betreff = "Anmeldung zu einer Führung auf der Sternwarte Welzheim";
$betreffBeo = "Anmeldung zur Führung in Welzheim am $stern_datum";
mb_internal_encoding('UTF-8');
$betreff = mb_encode_mimeheader($betreff, 'UTF-8', 'Q');
$absender = "noreply@sternwarte-welzheim.de";
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=utf-8";
$headers[] = "From: {$absender}";
$headers[] = "X-Mailer: PHP/" . phpversion();
$headers[] = "Reply-To: {$absender}";
// Mail an den Anfragenden
mail($stern_mail, $betreff, $bodya, implode("\r\n", $headers), "-f noreply@sternwarte-welzheim.de");
mail("rexfue@gmail.com", $betreff, $bodya, implode("\r\n", $headers), "-f noreply@sternwarte-welzheim.de");
// Mail an einige BEOs und an die Liste
$beoliste = array(
//"andrea.ess@t-online.de",
//"sonderfuehrung@sternwarte-welzheim.de",
//"martin.gertz@gmx.de",
// "schittenhelm.klaus@gmx.de",
// "planetarium@stuttgart.de",
//"info@planetarium-stuttgart.de",
//"HUK@observatory-stuttgart.de",
"rexfue@gmail.com",
);
array_pop($headers);
foreach ($beoliste as $to) {
mail($to, $betreffBeo, $body, implode("\r\n", $headers), "-f noreply@sternwarte-welzheim.de");
}
$stern_meldung = "<p>Vielen Dank für Ihre Anmeldung. <br /><br />
Wir freuen uns über Ihren Besuch auf der Sternwarte Welzheim am<br />
<div style='text-align:center;'>" .
preg_replace('/(\d+) Uhr/','um $0',$stern_datum) .
" mit $stern_teil $person.
</div> <br />
Wir haben Ihnen die Anmelde-Bestätigung per Email zugesandt.</p>
<p><a class='button' href='/index.php'>Zurück</a></p>";
// Antwortseite
?>
<?PHP echo $stern_meldung;
?>
<?PHP
// Ende Antwortseite
break;
} // Ende if ($errors == 0)
else {
// Layout der Fehlermeldung
$stern_error_msg = '<div id="fehler">' . $stern_error_msg . '</div>';
}
// Wenn ein Fehler aufgetreten ist ($errors != 0), folgt jetzt der default Teil
// d.h. das Eingabeformular wird nochmals angezeigt mit einer Fehlermeldung.
// ----------------------------------------------------------------------------
default:
?>
<p style="text-align:center; font-size:120%;">
<strong>Anmeldung zu einer Führung auf der Sternwarte Welzheim</strong>
</p>
<p>
Wegen der Corona-Pandemie dürfen nur angemeldeten Personen an einer Führung in der
Sternwarte Welzheim teilnehmen. Bitte geben Sie unten Ihre Kontaktdaten an.
Nach Maßgabe der aktuellen Corona-Verordnung werden Ihre Daten vier Wochen gespeichert
und anschließend gelöscht.
</p>
<p>
An einer Führung dürfen nur maximal zehn Personen teilnehmen, damit der
vorgeschriebene Sicherheitsabstand eingehalten werden kann. Sollte die von
Ihnen ausgewählte Führung bereits ausgebucht sein, wählen Sie bitte einen anderen Termin.
</p>
<p>
Wenn Sie alle Felder ausgefüllt und abgeschickt haben (mit den "Anmeldung senden"-Knopf),
erhalten Sie eine Anmeldebestätigung per e-mail. Diese bitte unbedingt zur Führung
ausgedruckt oder in digitaler Form mitbringen!
<div style="text-align:center;"><strong>Ohne die mitgebrachte Anmeldebestätigung erfolgt ausnahmslos
k e i n Einlass.</strong></div>
</p>
<p>
Die Hygienevorschriften sind zu beachten: Jeder Teilnehmer muss eine
Gesichtsmaske tragen und den vorgeschriebenen Abstand einhalten.
Nicht teilnehmen dürfen Personen, die in den letzten vierzehn Tagen Kontakt
mit einem Coronavirus-Infizierten hatten oder Infektionssymptome zeigen.
</p>
<hr/>
<p>Die Führungen auf der Sternwarte Welzheim finden nur bei
sternklarem Himmel statt. Sollte die Führung wegen des Wetters ausfallen, bitten wir
Sie, sich für einen neuen Termin nochmals anzumelden.
</p>
<p>
Bitte beachten Sie, dass der Weg zur Sternwarte Welzheim <strong>mit
Kraftfahrzeugen nicht befahren werden darf</strong>. Sie können
Ihre Fahrzeuge auf dem Parkplatz der Sternwarte abstellen. Von hier
führt ein 430 m langer Fußweg zur Sternwarte. Die Temperatur in den
Beobachtungskuppeln entspricht der Außentemperatur. Besonders in
kalten Winternächten ist warme Bekleidung und warmes Schuhwerk
dringend zu empfehlen.
</p>
<p>Die Fernrohre in den Beobachtungskuppeln sind nur über Treppen zu
erreichen. Es besteht leider keine Möglichkeit, Rollstühle in die
Kuppeln mitzunehmen. Für Kleinkinder sind Sternführungen nicht
geeignet.</p>
<p>Betrieb und Arbeit auf der Sternwarte erfolgen ehrenamtlich.
Unterhalt und Aktivit&auml;ten auf der Sternwarte sind nur durch
Ihre Unterstützung m&ouml;glich. Wir bitten daher um eine ensprechende Spende.
</p>
<div><a name="form">&nbsp;</a><?PHP echo $stern_error_msg ?></div><br />
<?php
if ($autofill) {
echo '<p><button type="button" id="autofillbutton">Autofill</button></p>';
}
?>
<strong>Anmeldung:</strong>
<span class="textklein">(Alle Felder mit '*' müssen ausgefüllt werden)</span><br />
<br />
<div id="formular" class="fltrt">
<form action="anmeldung.php#form" method="post">
<? echo bauNextFuehrungen(getNextFuehrungen(), $maxPersonen); ?>
<input type="hidden" name="fdlink" id ="fid"><br />
<br style="line-height: 8px" />
<span class="textklein">Bitte beachten Sie, dass eine
Anmeldung bis spätestens <? echo $vorlauf?> Stunden vor Führungsbeginn erfolgt sein muss!<br/>
Schon belegte Termine können nicht ausgewählt werden (sie werden grau dargestellt).</span><br/>
<br />
<label for="name" class="labeltext">Zuname *</label>
<input
type="text" maxlength="50" name="name"
value="<? echo $stern_name; ?>" id="name" class="textfeld200"/> <br/>
<label for="vorname" class="labeltext">Vorname</label>
<input
type="text" maxlength="50" name="vorname"
value="<? echo $stern_vorname; ?>" id="vorname" class="textfeld200"/><br/>
<br/>
<label for="strasse" class="labeltext"> Straße / Haus-Nr. *</label>
<input type="text" maxlength="60" name="strasse"
value="<? echo $stern_strasse; ?>" id="strasse" class="textfeld200"/><br/>
<label for="ort" class="labeltext">PLZ / Ort *</label>
<input
type="text" maxlength="5" name="plz" id="plz"
value="<?php echo $stern_plz; ?>" class="textfeld20"/>
<input
type="text" maxlength="60" name="ort" id="ort"
value="<?php echo $stern_ort; ?>" class="textfeld100"/> <br/>
<label
for="tel" class="labeltext"> Telefonnummer</label>
<input
type="text" maxlength="50" name="tel" value="<? echo $stern_tel; ?>"
id="tel" class="textfeld200"/> <br/>
<br />
<label for="mail" class="labeltext">E-Mail-Adresse *</label>
<input
type="text" maxlength="120" name="mail"
value="<? echo $stern_mail; ?>" id="mail" class="textfeld200"/><br />
<br />
<label for="teil" class="labeltext">Teilnehmerzahl *<br/> <span
class="textklein">(max. <? echo $maxPersonen ?> Personen)</span></label>
<input type="number" step="1" min="1" max="<? echo $maxPersonen ?>" maxlength="120"
name="teil" value="<? echo $stern_teil == "" ? "1" : $stern_teil; ?>" id="teil" class="textfeld20"/> <br/>
<br />
<label for="remarks" class="labeltext">Bemerkungen</label>
<textarea name="remarks" id="remartk" rows="2" cols="40" class="textfeld200"></textarea><br/>
<br />
Eine Sternführung findet nur bei <b>sternklarem</b> Wetter statt.<br/>
<br/>
<strong>Das Betreten der Sternwarte erfolgt auf eigene
Gefahr. Die Sternführung wird von ehrenamtlichen
Kräften durchgeführt. Bei Ausfall einer Führung kann kein Schadenersatz
geleistet werden.</strong><br/>
<p>
<input type="hidden" name="stern_actionstern" value="senden">
<input
type="submit" name="submit" value="Anmeldung senden" class="inputtext"
style="background-color: SkyBlue; height: 40px; font-size: 20px; cursor:pointer;">
</p>
<br />
<p>
Hinweis zum Datenschutz: <a href="" id="dschu">Datenschutzerklärung</a>
</p>
<p>
Bei Problemen mit der Anmeldung bitte eine Email senden an: <a href="mailto:rxf@gmx.de">rxf@gmx.de</a>
</p>
</form>
</div>
<?
// ----------------------------------------------------------------------------
} // Ende switch($page)
?>
<!-- end #mainContent -->
</div>
<!-- Dieses clear-Element sollte direkt auf das #mainContent-div folgen, um das #container-div anzuweisen, alle untergeordneten Floats aufzunehmen. -->
<br class="clearfloat"/>
<!-- end #container -->
</div>
</body>
</html>