Inital
This commit is contained in:
+533
@@ -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>
|
||||
Reference in New Issue
Block a user