This commit is contained in:
2026-03-20 17:13:38 +01:00
parent 4c84735b75
commit c043ee9a52
1152 changed files with 317560 additions and 0 deletions
+533
View File
@@ -0,0 +1,533 @@
<!DOCTYPE HTML>
<!--
Alpha by HTML5 UP
html5up.net | @n33co
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<?php
include('header.php');
?>
<title>Praxis Creutzburg - DateiUpload</title>
<link rel="stylesheet" href="css/formulare.css" />
</head>
<body >
<!-- Header -->
<header id="header" class="../skel-layers-fixed">
<?php
include('menu.php');
include_once("inc/config.inc.php");
include_once("inc/functions.inc.php");
include_once('inc/functions.impfen.inc.php');
include_once('inc/functions.formulare.inc.php');
?>
</header>
<!-- Main -->
<section id="main" class="container">
<?php
echo showHeaderpraxis();
?>
<section class="box special">
<h2>PDF-Datei Upload</h2>
<?php
if(isset($_POST["aktion"])){
if($_POST["aktion"] == "1"){
$vorname = trim($_POST["Vorname"] ?? "");
$nachname = trim($_POST["Name"] ?? "");
$geburtstag = trim($_POST["Geburtsjahr"] ?? ""); // sollte YYYY-MM-DD sein
$email = trim($_POST["Email"] ?? "");
$tele = trim($_POST["Tel"] ?? "");
$plz = trim($_POST["plz"] ?? "");
$ort = trim($_POST["ort"] ?? "");
$strasse = trim($_POST["strasse"] ?? "");
$nachricht = trim($_POST["message"] ?? "");
$anforderungart = '18';
// Optional: wenn nur Jahr kommt -> YYYY-01-01
#if (preg_match('/^\d{4}$/', $geburtstag)) {
# $geburtstag = $geburtstag . "-01-01";
#}
// Minimal-Validation (empfohlen)
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Fehler: Ungültige E-Mail");
}
if (!$geburtstag) {
die("Fehler: Geburtsdatum fehlt");
}
$hashvorher = $vorname . $nachname . $email;
$hash = md5($hashvorher) . date("YmdHs");
try {
// Transaktion starten
$pdo->beginTransaction();
// persons Upsert (UNIQUE(email, geburtstag) vorausgesetzt)
$stmt = $pdo->prepare("
INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
ON DUPLICATE KEY UPDATE
vorname = VALUES(vorname),
nachname = VALUES(nachname),
tele = VALUES(tele),
ort = VALUES(ort),
plz = VALUES(plz),
strasse = VALUES(strasse),
updated_at = CURRENT_TIMESTAMP
");
$stmt->execute([
':vorname' => $vorname,
':nachname' => $nachname,
':email' => $email,
':geburtstag' => $geburtstag,
':tele' => $tele,
':ort' => $ort,
':plz' => $plz,
':strasse' => $strasse,
]);
// person_id holen (zuverlässig nach Upsert)
$stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ? LIMIT 1");
$stmt->execute([$email, $geburtstag]);
$person_id = (int)$stmt->fetchColumn();
if (!$person_id) {
throw new Exception("Konnte person_id nicht ermitteln");
}
// Transaktion abschließen
$pdo->commit();
//echo "Operation erfolgreich. person_id: " . $person_id;
} catch (Exception $e) {
// Rollback bei Fehlern
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
die("Fehler: " . $e->getMessage());
}
// Überprüfung: Wurde eine Datei hochgeladen?
if (isset($_FILES['pdfFile']) && $_FILES['pdfFile']['error'] === UPLOAD_ERR_OK) {
$uploadDir = 'upload/nexChRvmgyJWCgvWjceFugXpGFQzBBaMtuZlySuFdYkFzYoxNe/';
// Datei-Infos
$fileTmpPath = $_FILES['pdfFile']['tmp_name'];
$fileName = $_FILES['pdfFile']['name'];
$fileSize = $_FILES['pdfFile']['size'];
$fileType = $_FILES['pdfFile']['type'];
// Sicherheitsüberprüfung (nur PDF erlauben)
$allowedMimeTypes = ['application/pdf'];
if (!in_array($fileType, $allowedMimeTypes)) {
die('Nur PDF-Dateien sind erlaubt!');
}
// Dateiname generieren (Nachname, Datum, Originalname)
#$nachname = "BeispielNachname"; // Ersetzen durch den tatsächlichen Wert
$date = date('Y-m-d-H-i');
$safeFileName = $nachname . '_' . $date . '_' . basename($fileName);
// Datei speichern
$destPath = $uploadDir . $safeFileName;
if (!move_uploaded_file($fileTmpPath, $destPath)) {
die('Fehler beim Hochladen der Datei.');
}
// Berechtigungen auf lesbar setzen (z. B. 0644 für Besitzer lesen/schreiben und andere lesen)
if (!chmod($destPath, 0644)) {
die('Fehler beim Setzen der Dateiberechtigungen.');
}
$stmt = $pdo->prepare("
INSERT INTO anfragen
(requester_person_id, anforderungart, nachricht, create_time, hash, ordnungsid, dateiname,
sicherenachricht, source, created_by_account_id)
VALUES
(:person_id, :anforderungart, :nachricht, NOW(), :hash, :ordnungsid, :dateiname,
0, 'mail', NULL)
");
$stmt->execute([
':person_id' => $person_id, // aus persons
':anforderungart' => $anforderungart,
':nachricht' => $nachricht,
':hash' => $hash,
':ordnungsid' => 2,
':dateiname' => $safeFileName
]);
$anfrageid = (int)$pdo->lastInsertId();
SendMailMessageVorlage($pdo, "3", $anfrageid , "25" );
echo "<h3>Datei erfolgreich hochgeladen und gespeichert!</h3><br>Sie bekommen eine Bestätigung per E-Mail!<br>Überprüfen Sie auch Ihren Spam-Filter!<br><br> ";
} else {
echo "<h3>Bitte laden Sie eine gültige Datei hoch.</h3><br><br> ";
}
}else if($_POST["aktion"] == "2"){
// ---------- 1) Eingaben ----------
$vorname = trim($_POST["Vorname"] ?? "");
$nachname = trim($_POST["Name"] ?? "");
$geburtstag = trim($_POST["Geburtsjahr"] ?? ""); // sollte DATE sein (YYYY-MM-DD) ggf. nur Jahr
$email = trim($_POST["Email"] ?? "");
$tele = trim($_POST["Tel"] ?? "");
$plz = trim($_POST["plz"] ?? "");
$ort = trim($_POST["ort"] ?? "");
$strasse = trim($_POST["strasse"] ?? "");
$medikament1 = trim($_POST["Medikament1"] ?? "");
$medikament2 = trim($_POST["Medikament2"] ?? "");
$nachricht = trim($_POST["message"] ?? "");
$anforderungart = trim($_POST["category"] ?? "");
// Geburtstag: falls nur Jahr kommt -> YYYY-01-01
if (preg_match('/^\d{4}$/', $geburtstag)) {
$geburtstag = $geburtstag . "-01-01";
}
// Minimal-Validation
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("<h3>Ungültige E-Mail</h3>");
}
if (!$geburtstag) {
die("<h3>Geburtsdatum fehlt</h3>");
}
if ($anforderungart === "") {
die("<h3>Kategorie fehlt</h3>");
}
// ---------- 2) Impfstoff (falls $impfstoff gesetzt ist) ----------
$impfstofftext = null;
if (!empty($impfstoff)) {
$stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ? LIMIT 1");
$stmt->execute([$impfstoff]);
$impfstofftext = $stmt->fetchColumn() ?: null;
}
// ---------- 3) Transaktion: Person upsert + Duplikatcheck + Anfrage insert ----------
try {
$pdo->beginTransaction();
// 3a) Person upsert (UNIQUE(email, geburtstag) vorausgesetzt!)
$stmt = $pdo->prepare("
INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
ON DUPLICATE KEY UPDATE
vorname = VALUES(vorname),
nachname = VALUES(nachname),
tele = VALUES(tele),
ort = VALUES(ort),
plz = VALUES(plz),
strasse = VALUES(strasse),
updated_at = CURRENT_TIMESTAMP
");
$stmt->execute([
':vorname' => $vorname,
':nachname' => $nachname,
':email' => $email,
':geburtstag' => $geburtstag,
':tele' => $tele,
':ort' => $ort,
':plz' => $plz,
':strasse' => $strasse,
]);
// person_id holen
$stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ? LIMIT 1");
$stmt->execute([$email, $geburtstag]);
$person_id = (int)$stmt->fetchColumn();
if (!$person_id) {
throw new Exception("Keine eindeutige Kennung (person_id).");
}
// 3b) Hash erzeugen
$hashvorher = $vorname . $nachname . $email;
$hash = md5($hashvorher) . date("YmdHs");
// 3c) Duplikatcheck (letzte 7 Tage)
$stmt = $pdo->prepare("
SELECT 1
FROM anfragen
WHERE requester_person_id = ?
AND anforderungart = ?
AND nachricht = ?
AND create_time >= (NOW() - INTERVAL 7 DAY)
LIMIT 1
");
$stmt->execute([$person_id, $anforderungart, $nachricht]);
$exists = (bool)$stmt->fetchColumn();
if ($exists) {
$pdo->rollBack();
echo "<h3>Doppelte Anfrage</h3><br>Ihre Anfrage wurde schon in unserem System gespeichert.<br>Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.<br>Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.<br><br>";
header("refresh:15;formulare.php");
exit;
}
// 3d) Anfrage anlegen (ohne Accounts)
$stmt = $pdo->prepare("
INSERT INTO anfragen
(requester_person_id, anforderungart, medikament1, medikament2, nachricht,
create_time, hash, ordnungsid, sicherenachricht, source, created_by_account_id)
VALUES
(:person_id, :anforderungart, :med1, :med2, :nachricht,
NOW(), :hash, 2, 0, 'mail', NULL)
");
$stmt->execute([
':person_id' => $person_id,
':anforderungart' => $anforderungart,
':med1' => $medikament1,
':med2' => $medikament2,
':nachricht' => $nachricht,
':hash' => $hash
]);
$anfrageid = (int)$pdo->lastInsertId();
$pdo->commit();
} catch (Exception $e) {
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
die("<h3>Speicherung nicht erfolgreich</h3><br>" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8'));
}
// ---------- 4) Mail senden + Ausgabe ----------
try {
// Jetzt PDO übergeben
SendMailMessageVorlage($pdo, "3", $anfrageid, "25");
} catch (Exception $e) {
// Mailfehler soll nicht zwingend den DB-Insert rückgängig machen
// Optional: Logging
}
echo "<h3>Nachricht abgeschickt!</h3><br>Sie bekommen eine Bestätigung per E-Mail!<br>Überprüfen Sie auch Ihren Spam-Filter!<br><br>";
header("refresh:15;formulare.php");
exit;
}
}else{
?>
Über diese Seite können Sie PDF-Dateien unserem Praxis-Team bereitstellen.<br>
Sie können über dieses Formular aus Sicherheitsgründen ausschließlich PDF-Dokumente hochladen.<br>
Sollten Sie anderen Dokumente hochladen wollen, dann wandeln Sie diese Dokumente zu erst in ein PDF um.<br><br>
Die Übertragung an die Praxisanwendung erfolgt per HTTPS und einer TLS-verschlüsselten Verbindung.<br>
</header>
<div class="row">
<div class="12u">
<!-- Form -->
<section class="box">
<?php
// Urlaubsabfrage
$today = date("Y-m-d");
$stmt = $pdo->prepare("
SELECT urlaubid
FROM urlaub
WHERE start <= ?
AND ende >= ?
LIMIT 1
");
$stmt->execute([$today, $today]);
$urlaubid = $stmt->fetchColumn();
if (!$urlaubid) {
?>
<h3>Formular bitte ausfüllen und abschicken</h3>
<?php echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST enctype="multipart/form-data" >';
echo '<input type="hidden" name="aktion" id="aktion" value="1" />';
?>
<div class="row uniform 50%">
<?php
echo ShowFormularFragenBenutzer();
?>
<div class="12u">
<label for="category">Ich habe eine Anfrage für folgendes Thema:</label>
<div class="select-wrapper">
<select name="category" id="category" disabled >
<?php
$stmt = $pdo->prepare("
SELECT artid, artname
FROM anfrageart
WHERE dateiupload = 1
");
$stmt->execute();
while ($rowimpf = $stmt->fetch(PDO::FETCH_ASSOC)) {
$artname = $rowimpf["artname"];
$artid = $rowimpf["artid"];
?>
<option value="<?php echo htmlspecialchars($artid, ENT_QUOTES, 'UTF-8'); ?>">
<?php echo htmlspecialchars($artname, ENT_QUOTES, 'UTF-8'); ?>
</option>
<?php
}
?>
</select>
<div id="AstraInfobox"></div>
</div>
</div>
<div class="12u">
<label for="pdfFile">PDF-Datei hochladen:</label>
<input type="file" name="pdfFile" id="pdfFile" accept="application/pdf" required>
</div>
<div class="12u">
<textarea name="message" id="message" placeholder="Ihre Nachricht/Bemerkung" rows="6" maxlength="150"></textarea>
</div>
<div class="12u">
<br>
Ihre Daten werden HTTPS-verschlüsselt an unser System übertragen. Sie erhalten die Antwort per E-Mail mit TLS-Verschlüsselung. Mit Absenden Ihrer Anfrage stimmen Sie diesen Bedingungen zu.<br>
<br>
<ul class="actions">
<li><input type="submit" value="Abschicken" /></li>
</ul>
</div>
</div>
</div>
</form>
<hr />
<?php }else{
echo "<h2>Praxis im Urlaub</h2>";
echo "Wir befinden uns aktuell im Urlaub.<br>Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.<br><br>";
$today = date("Y-m-d");
$stmt = $pdo->prepare("
SELECT ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl
FROM urlaub
WHERE start <= :today
AND ende >= :today
ORDER BY ende DESC
LIMIT 1
");
$stmt->execute([':today' => $today]);
$row = $stmt->fetch(); // liefert Array oder false
if ($row) {
$vertreter = $row["vertretung"] ?? null;
$vertretertelefon = $row["vertretertelefon"] ?? null;
$vertreteradresse = $row["vertreteradresse"] ?? null;
$vertreterurl = $row["vertreterurl"] ?? null;
$ende = $row["ende"] ?? null;
if ($ende) {
$endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende)));
} else {
$endeausgabe = null;
}
if (!empty($vertreter)) {
echo "Unsere Vertretung: " . htmlspecialchars($vertreter, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertreterurl)) {
// optional: URL escapen/validieren
echo "Webseite Vertretung: " . htmlspecialchars($vertreterurl, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertretertelefon)) {
echo "Telefonischer Kontakt Vertretung: " . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertreteradresse)) {
echo "Adresse Vertretung: " . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "<br>";
}
if ($endeausgabe) {
echo "<br>Wir stehen Ihnen ab dem " . htmlspecialchars($endeausgabe, ENT_QUOTES, 'UTF-8') . " wieder zur Verfügung.<br><br><br>";
}
}
?>
<form action="index.php" method=POST>
<input type=submit class=button value="Zurück">
</form>
<?php
}
}
?>
</div>
</div>
</section>
<?php
include_once('footer.php');
?>
</body>
</html>