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.
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.
"; } } ?>