PDF-Datei Upload

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 "

Datei erfolgreich hochgeladen und gespeichert!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; } else { echo "

Bitte laden Sie eine gültige Datei hoch.



"; } }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("

Ungültige E-Mail

"); } if (!$geburtstag) { die("

Geburtsdatum fehlt

"); } if ($anforderungart === "") { die("

Kategorie fehlt

"); } // ---------- 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 "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; 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("

Speicherung nicht erfolgreich


" . 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 "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; header("refresh:15;formulare.php"); exit; } }else{ ?> Über diese Seite können Sie PDF-Dateien unserem Praxis-Team bereitstellen.
Sie können über dieses Formular aus Sicherheitsgründen ausschließlich PDF-Dokumente hochladen.
Sollten Sie anderen Dokumente hochladen wollen, dann wandeln Sie diese Dokumente zu erst in ein PDF um.

Die Übertragung an die Praxisanwendung erfolgt per HTTPS und einer TLS-verschlüsselten Verbindung.
prepare(" SELECT urlaubid FROM urlaub WHERE start <= ? AND ende >= ? LIMIT 1 "); $stmt->execute([$today, $today]); $urlaubid = $stmt->fetchColumn(); if (!$urlaubid) { ?>

Formular bitte ausfüllen und abschicken

'; echo ''; ?>

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.


Praxis im Urlaub"; echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; $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') . "
"; } if (!empty($vertreterurl)) { // optional: URL escapen/validieren echo "Webseite Vertretung: " . htmlspecialchars($vertreterurl, ENT_QUOTES, 'UTF-8') . "
"; } if (!empty($vertretertelefon)) { echo "Telefonischer Kontakt Vertretung: " . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "
"; } if (!empty($vertreteradresse)) { echo "Adresse Vertretung: " . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "
"; } if ($endeausgabe) { echo "
Wir stehen Ihnen ab dem " . htmlspecialchars($endeausgabe, ENT_QUOTES, 'UTF-8') . " wieder zur Verfügung.


"; } } ?>