Dateien nach "/" hochladen

This commit is contained in:
2026-03-05 15:31:22 +01:00
parent ecbb565e2b
commit 4de35c7d58
5 changed files with 841 additions and 0 deletions
+122
View File
@@ -0,0 +1,122 @@
<?php
include "functions.php";
include "header.php";
include "headerline.php";
include "nav.php";
?>
<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
<br>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Anzeigenamen aktualisieren</title>
</head>
<body>
<h2>Anzeigenamen aktualisieren</h2>
<?php
if(checkKaffeelisteAccess($conn, $mailadress)){
if(checkKaffeelisteAdmin($conn, $mailadress)){
// SQL-Abfrage für alle Mitarbeiter
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter ORDER BY Name";
$stmtMitarbeiter = sqlsrv_query($conn, $sqlMitarbeiter);
}else{
echo "Hallo " . getUserName($conn,$mailadress) . "!<br><br>Hier kannst du deinen Anzeigenamen anpassen.<br>Dieser wird auf der Kaffeeliste und E-Mail genutzt.<br>";
// SQL-Abfrage für alle Mitarbeiter
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter WHERE Email ='" . $mailadress . "'";
$stmtMitarbeiter = sqlsrv_query($conn, $sqlMitarbeiter);
}
// Funktion zum Aktualisieren des Anzeigenamens
function aktualisiereAnzeigenamen($mitarbeiterID, $neuerName, $conn) {
try {
$sql = "UPDATE kl_Mitarbeiter SET Name = ? WHERE MitarbeiterID = ?";
$params = array($neuerName, $mitarbeiterID);
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
throw new Exception(print_r(sqlsrv_errors(), true));
}
return true; // Erfolgreich aktualisiert
} catch (Exception $e) {
return $e->getMessage(); // Fehlermeldung zurückgeben
}
}
// Überprüfen, ob das Formular abgesendet wurde
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["aktion"]) && $_POST["aktion"] == "aktualisieren") {
$mitarbeiterID = $_POST["mitarbeiterID"];
$neuerName = $_POST["neuerName"];
$ergebnis = aktualisiereAnzeigenamen($mitarbeiterID, $neuerName, $conn);
if ($ergebnis === true) {
echo "Anzeigename erfolgreich aktualisiert.";
} else {
echo "Fehler: $ergebnis";
}
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<label for="mitarbeiterID">Mitarbeiter auswählen:</label><br>
<select name="mitarbeiterID" id="mitarbeiterID">
<?php
while ($row = sqlsrv_fetch_array($stmtMitarbeiter, SQLSRV_FETCH_ASSOC)) {
$mitarbeiterID = $row['MitarbeiterID'];
$name = $row['Name'];
echo "<option value='{$mitarbeiterID}'>{$name}</option>";
}
?>
</select>
<br>
<label for="neuerName">Neuer Anzeigename: (maximal 20 Zeichen)</label><br>
<input type="text" name="neuerName" id="neuerName" maxlength="20" required>
<br><br>
<input type="hidden" name="aktion" value="aktualisieren">
<button type="submit">Anzeigename aktualisieren</button>
</form>
</body>
</html>
<?php
}
?>
</div>
</main>
</div>
</div>
</div>
<?php include "footer.php"; ?>
+3
View File
@@ -0,0 +1,3 @@
+161
View File
@@ -0,0 +1,161 @@
<?php
include "functions.php";
include "header.php";
include "headerline.php";
include "nav.php";
?>
<!-- Banner -->
<section id="banner">
<div class="content">
<?php
// Verarbeitung des Formulars, wenn es gesendet wurde
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Kosten pro Strich übernehmen:
$kostenproStrich = $_POST["kostenproStrich"];
// Iteriere über alle Mitarbeiter
foreach ($_POST["anzahlStriche"] as $mitarbeiterID => $anzahlStriche) {
// Validierung könnte hier hinzugefügt werden
$anzahlStriche = (int)$anzahlStriche;
$kostenproStrich = floatval($kostenproStrich);
$kosten = floatval($anzahlStriche * $kostenproStrich);
$datum = date("Y-d-m H:i:s"); // Das aktuelle Datum verwenden
if($anzahlStriche != 0){
// SQL-Abfrage zum Einfügen der Daten
$sql = "INSERT INTO kl_Kaffeeverbrauch (MitarbeiterID, AnzahlStriche, Kosten, KostenproStrich, Datum) VALUES (?, ?, ?, ?, ?)";
$params = array($mitarbeiterID, $anzahlStriche, $kosten, $kostenproStrich, $datum);
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
die(print_r(sqlsrv_errors(), true));
}
}
}
echo "Einträge erfolgreich hinzugefügt.";
}elseif($_SERVER["REQUEST_METHOD"] == "GET" AND isset($_GET["action"])){
if($_GET["action"] == "vorderseite"){
$sqlMitarbeiter = "SELECT M.MitarbeiterID, M.Name, M.Email
FROM kl_Mitarbeiter M
JOIN kl_Kaffeeverbrauch V ON M.MitarbeiterID = V.MitarbeiterID
WHERE V.Datum >= DATEADD(DAY, -100, (SELECT MAX(Datum) FROM kl_Kaffeeverbrauch WHERE Datum < CAST(GETDATE() AS DATE))) AND M.aktiv = 1
GROUP BY M.MitarbeiterID, M.Name, M.Email
HAVING SUM(V.AnzahlStriche) >= 10
ORDER BY Name;";
}elseif( $_GET["action"] == "rueckseite"){
$sqlMitarbeiter = "SELECT M.MitarbeiterID, M.Name, M.Email
FROM kl_Mitarbeiter M
LEFT JOIN kl_Kaffeeverbrauch V ON M.MitarbeiterID = V.MitarbeiterID AND V.Datum >= DATEADD(DAY, -100, (SELECT MAX(Datum) FROM kl_Kaffeeverbrauch))
WHERE M.aktiv = 1
GROUP BY M.MitarbeiterID, M.Name, M.Email
HAVING COALESCE(SUM(V.AnzahlStriche), 0) < 10
ORDER BY M.Name;";
}elseif($_GET["action"] == "alle"){
// Mitarbeiter aus der Datenbank abrufen und nach Namen sortieren
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter WHERE aktiv = 1 ORDER BY Name";
}
}else{
// Mitarbeiter aus der Datenbank abrufen und nach Namen sortieren
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter WHERE aktiv = 1 ORDER BY Name";
}
$stmtMitarbeiter = sqlsrv_query($conn, $sqlMitarbeiter);
// Kosten pro Strich auslesen
$sqlKostenproStrich = "SELECT KostenproStrich FROM kl_config ";
$stmtKostenproStrich = sqlsrv_query($conn, $sqlKostenproStrich);
$row = sqlsrv_fetch_array($stmtKostenproStrich, SQLSRV_FETCH_ASSOC);
$KostenproStrichtemp = $row["KostenproStrich"];
$KostenproStrich = number_format($KostenproStrichtemp, 2, '.', '');
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kaffeeliste - Anzahl der Striche für alle Mitarbeiter</title>
</head>
<body>
<h2>Anzahl der Striche für alle Mitarbeiter</h2>
<ul class="actions">
<li>
<form action="stricheintragen.php" method="get">
<input type="hidden" name="action" value="vorderseite">
<button type="submit">Vorderseite</button>
</form>
</li>
<li>
<form action="stricheintragen.php" method="get">
<input type="hidden" name="action" value="rueckseite">
<button type="submit">Rückseite</button>
</form>
</li>
<li>
<form action="stricheintragen.php" method="get">
<input type="hidden" name="action" value="alle">
<button type="submit">Alle</button>
</form>
</li>
</ul>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<?php
echo "<label for='kostenproStrich'>Kosten pro Strich:</label>
<input type='number' name='kostenproStrich' step='0.01' value='" . $KostenproStrich . "'><br>";
echo "<table>";
echo " <tr>
<th>Mitarbeiter</th>
<th>Anzahl Striche</th>
</tr>";
// Iteriere über alle Mitarbeiter
while ($row = sqlsrv_fetch_array($stmtMitarbeiter, SQLSRV_FETCH_ASSOC)) {
$mitarbeiterID = $row["MitarbeiterID"];
$mitarbeiterName = $row["Name"];
echo "<tr>";
// Formularfeld für die Anzahl der Striche
echo "<td><label for='anzahlStriche[$mitarbeiterID]'>$mitarbeiterName:</label></td>";
echo "<td><input type='number' name='anzahlStriche[$mitarbeiterID]' ></td>";
echo "</tr>";
}
echo "</table>";
?>
<button type="submit">Eintragen</button>
</form>
</body>
</html>
</div>
</section>
<?php include "footer.php"; ?>
+213
View File
@@ -0,0 +1,213 @@
<?php
include "functions.php";
include "header.php";
include "headerline.php";
include "nav.php";
?>
<!-- Banner -->
<section id="banner">
<div class="content">
<?php
if(checkKaffeelisteAdmin($conn, $mailadress)){
// Sichere Entgegennahme
$userId = filter_input(INPUT_GET, 'user_id', FILTER_VALIDATE_INT);
if ($userId === null) {
http_response_code(400);
exit('Fehlender Parameter');
}
if ($userId === false) {
http_response_code(400);
exit('Ungültige Benutzer-ID');
}
echo "<h2>Auswertung</h2>";
echo "Hallo " . getUserName($conn,$mailadress) . "!<br><br>";
// Funktion zum Berechnen der Gesamtausgabe und Gesamtstriche pro Mitarbeiter
function berechneGesamtausgabe($email, $conn) {
// MitarbeiterID anhand der E-Mail-Adresse abrufen
$sqlMitarbeiterID = "SELECT MitarbeiterID FROM kl_Mitarbeiter WHERE Email = ?";
$stmtMitarbeiterID = sqlsrv_query($conn, $sqlMitarbeiterID, array($email));
$rowMitarbeiterID = sqlsrv_fetch_array($stmtMitarbeiterID, SQLSRV_FETCH_ASSOC);
if (!$rowMitarbeiterID) {
return null; // Mitarbeiter nicht gefunden
}
$mitarbeiterID = $rowMitarbeiterID["MitarbeiterID"];
// Gesamteinzahlung pro Mitarbeiter
$sqleinzahlung = "SELECT SUM(Betrag) AS Gesamteinzahlung FROM kl_Einzahlungen WHERE MitarbeiterID = ?";
$stmteinzahlung = sqlsrv_query($conn, $sqleinzahlung, array($mitarbeiterID));
$roweinzahlung = sqlsrv_fetch_array($stmteinzahlung, SQLSRV_FETCH_ASSOC);
$gesamteinzahlung = $roweinzahlung['Gesamteinzahlung'];
// Gesamtausgabe für Kaffeeverbrauch pro Mitarbeiter
$sqlAusgabe = "SELECT SUM(AnzahlStriche) AS Gesamtstriche, SUM(Kosten) AS Gesamtausgabe FROM kl_Kaffeeverbrauch WHERE MitarbeiterID = ?";
$stmtAusgabe = sqlsrv_query($conn, $sqlAusgabe, array($mitarbeiterID));
$rowAusgabe = sqlsrv_fetch_array($stmtAusgabe, SQLSRV_FETCH_ASSOC);
$gesamtausgabe = $rowAusgabe['Gesamtausgabe'];
$gesamtstriche = $rowAusgabe['Gesamtstriche'];
$aktuellerStand = $gesamteinzahlung - $gesamtausgabe;
// Gesamteinzahlung pro Mitarbeiter und Aktuellem Jahr
$sqleinzahlung = "SELECT SUM(Betrag) AS Gesamteinzahlung FROM kl_Einzahlungen WHERE MitarbeiterID = ? AND FORMAT(Datum, 'yyyy') = FORMAT(GETDATE(), 'yyyy') ";
$stmteinzahlung = sqlsrv_query($conn, $sqleinzahlung, array($mitarbeiterID));
$roweinzahlung = sqlsrv_fetch_array($stmteinzahlung, SQLSRV_FETCH_ASSOC);
$yeareinzahlung = $roweinzahlung['Gesamteinzahlung'];
// Gesamtausgabe für Kaffeeverbrauch pro Mitarbeiter und Aktuellem Jahr
$sqlAusgabe = "SELECT SUM(AnzahlStriche) AS Gesamtstriche, SUM(Kosten) AS Gesamtausgabe FROM kl_Kaffeeverbrauch WHERE MitarbeiterID = ? AND FORMAT(Datum, 'yyyy') = FORMAT(GETDATE(), 'yyyy')";
$stmtAusgabe = sqlsrv_query($conn, $sqlAusgabe, array($mitarbeiterID));
$rowAusgabe = sqlsrv_fetch_array($stmtAusgabe, SQLSRV_FETCH_ASSOC);
$yearausgabe = $rowAusgabe['Gesamtausgabe'];
$yearstriche = $rowAusgabe['Gesamtstriche'];
return array('Jahresausgabe' => $yearausgabe, 'Jahresstriche' => $yearstriche, 'Jahreseinzahlung' => $yeareinzahlung, 'Gesamtausgabe' => $gesamtausgabe, 'Gesamtstriche' => $gesamtstriche, 'Gesamteinzahlung' => $gesamteinzahlung, 'aktuellerStand' => $aktuellerStand);
#return array('Gesamtausgabe' => $gesamtausgabe, 'Gesamtstriche' => $gesamtstriche, 'Gesamteinzahlung' => $gesamteinzahlung, 'aktuellerStand' => $aktuellerStand);
}
function AusgabeletztenEinzahlungen($email, $conn) {
// MitarbeiterID anhand der E-Mail-Adresse abrufen
$sqlMitarbeiterID = "SELECT TOP 20 MitarbeiterID FROM kl_Mitarbeiter WHERE Email = ?";
$stmtMitarbeiterID = sqlsrv_query($conn, $sqlMitarbeiterID, array($email));
$rowMitarbeiterID = sqlsrv_fetch_array($stmtMitarbeiterID, SQLSRV_FETCH_ASSOC);
if (!$rowMitarbeiterID) {
return null; // Mitarbeiter nicht gefunden
}
$mitarbeiterID = $rowMitarbeiterID["MitarbeiterID"];
// Gesamteinzahlung pro Mitarbeiter
$sqleinzahlung = "SELECT Betrag,Datum FROM kl_Einzahlungen WHERE MitarbeiterID = ? ORDER BY Datum DESC ";
$stmteinzahlung = sqlsrv_query($conn, $sqleinzahlung, array($mitarbeiterID));
$ausgabe = "<h4>Letzte Einzahlungen</h4><table><tr><th style='width:120'>Datum</th><th>Einzahlung</th></tr>";
while ($row = sqlsrv_fetch_array($stmteinzahlung, SQLSRV_FETCH_ASSOC)) {
$ausgabe .= "<tr><td>" . date_format($row["Datum"],"d.m.Y") . "</td><td>" . number_format($row["Betrag"], 2, ',', '') . "€</td></tr>";
}
$ausgabe .= "</table>";
return $ausgabe;
}
function AusgabeletztenStriche($email, $conn) {
// MitarbeiterID anhand der E-Mail-Adresse abrufen
$sqlMitarbeiterID = "SELECT TOP 20 MitarbeiterID FROM kl_Mitarbeiter WHERE Email = ?";
$stmtMitarbeiterID = sqlsrv_query($conn, $sqlMitarbeiterID, array($email));
$rowMitarbeiterID = sqlsrv_fetch_array($stmtMitarbeiterID, SQLSRV_FETCH_ASSOC);
if (!$rowMitarbeiterID) {
return null; // Mitarbeiter nicht gefunden
}
$mitarbeiterID = $rowMitarbeiterID["MitarbeiterID"];
// Gesamteinzahlung pro Mitarbeiter
$sqleinzahlung = "SELECT AnzahlStriche,Kosten,Datum FROM kl_Kaffeeverbrauch WHERE MitarbeiterID = ? ORDER BY Datum DESC ";
$stmteinzahlung = sqlsrv_query($conn, $sqleinzahlung, array($mitarbeiterID));
$ausgabe = "<h4>Letzte Striche</h4><table ><tr><th style='width:120'>Datum</th><th>Striche</th><th>Kosten</th></tr>";
while ($row = sqlsrv_fetch_array($stmteinzahlung, SQLSRV_FETCH_ASSOC)) {
$ausgabe .= "<tr><td>" . date_format($row["Datum"],"d.m.Y") . "</td><td>" . $row["AnzahlStriche"] . "</td><td>" . number_format($row["Kosten"], 2, ',', '') . "€</td></tr>";
}
$ausgabe .= "</table>";
return $ausgabe;
}
$sqlMitglieder = "SELECT MitarbeiterID, Name, Email FROM kl_Mitarbeiter WHERE MitarbeiterID = $userId";
$stmtMitglieder = sqlsrv_query($conn, $sqlMitglieder);
while ($row = sqlsrv_fetch_array($stmtMitglieder, SQLSRV_FETCH_ASSOC)) {
$mitarbeiterID = $row['MitarbeiterID'];
$name = $row['Name'];
$email = $row['Email'];
}
// Berechne Gesamtausgabe und Gesamtstriche für den Mitarbeiter
$result = berechneGesamtausgabe($email, $conn);
if ($result !== null) {
echo "<h2>Gesamtausgabe und Gesamtstriche</h2>";
echo "<p>Name: $name</p>";
echo "<p>E-Mail: $email</p>";
echo "Gesamtausgabe: " . number_format($result['Gesamtausgabe'], 2, ',', '') . " €<br>";
echo "Gesamtstriche: {$result['Gesamtstriche']}<br>";
echo "<p>Gesamteinzahlung: " . number_format($result['Gesamteinzahlung'], 2, ',', '') . " €<br>";
$aktuellerstand = number_format($result['aktuellerStand'], 2, ',', '.');
if($result['aktuellerStand'] > 0){
echo "<p><b>Aktueller Stand: {$aktuellerstand} € (Guthaben)</p>";
}elseif($result['aktuellerStand'] < 0){
echo "<p><b>Aktueller Stand: {$aktuellerstand} € (Schulden)</p>";
}else{
echo "<p><b>Aktueller Stand: {$aktuellerstand} €</p>";
}
echo "</b>";
echo "<h2>Jahresübersicht</h2>";
echo "Ausgabe im aktuellem Jahr: " . number_format($result['Jahresausgabe'], 2, ',', '') . " €<br>";
echo "Gesamtstriche im aktuellem Jahr: {$result['Jahresstriche']}<br>";
echo "<p>Gesamteinzahlung im aktuellem Jahr: " . number_format($result['Jahreseinzahlung'], 2, ',', '') . " €<br>";
$sqlconfig = "SELECT paypaluse,paypallink FROM kl_config";
$stmtconfig = sqlsrv_query($conn, $sqlconfig, array($email));
$rowconfig = sqlsrv_fetch_array($stmtconfig, SQLSRV_FETCH_ASSOC);
if($rowconfig["paypaluse"] == 1){
echo "<h2>Paypal-Einzahlungen</h2>";
echo '<b>Bezahle immer über die Freunde-Funktion von Paypal. Ansonsten stellen wir 20% des Betrags als Gebühr in Rechnung.</b><br>';
$paypallink = trim($rowconfig["paypallink"]);
echo "<br>";
if($result['aktuellerStand'] < 0){
echo '<form action="' . $paypallink .'' . $aktuellerstand . '" target="_blank" ><button type="submit">'. $aktuellerstand . ' € bezahlen</button></form>';
}
echo'<ul class="actions">
<li>';
echo '<form action="' . $paypallink .'5" target="_blank" ><button type="submit">5,00 € einzahlen</button></form>';
echo '</li><li>';
echo '<form action="' . $paypallink .'10" target="_blank" ><button type="submit">10,00 € einzahlen</button></form>';
echo '</li><li>';
echo '<form action="' . $paypallink .'15" target="_blank" ><button type="submit">15,00 € einzahlen</button></form>';
echo '</li></ul>';
}
echo "<br>";
echo "<br>";
echo AusgabeletztenEinzahlungen($email, $conn);
echo "<br>";
echo AusgabeletztenStriche($email, $conn);
?>
<br><br>
<!-- Formular mit Button zum Anpassen des Namens -->
<form action="namenanpassen.php" method="get">
<button type="submit">Namensanpassung</button>
</form>
<?php
} else {
echo "<p>Mitarbeiter mit der E-Mail-Adresse $email wurde nicht gefunden.</p>";
}
}else{
echo "<h2>Sie haben keine Zugang zu dieser Webseite</h2>";
}
?>
</div>
</section>
<?php include "footer.php";
?>
+342
View File
@@ -0,0 +1,342 @@
<?php
declare(strict_types=1);
include "functions.php";
include "header.php";
include "headerline.php";
include "nav.php";
?>
<!-- Banner -->
<section id="banner">
<div class="content">
<style>
/* Hartes Reset für Inputs nur im Umfrage-Formular */
html body form#coffeeSurvey input[type="checkbox"],
html body form#coffeeSurvey input[type="radio"]{
all: revert !important; /* setzt ALLES zurück */
appearance: auto !important;
-webkit-appearance: auto !important;
display: inline-block !important;
position: static !important;
opacity: 1 !important;
visibility: visible !important;
width: 16px !important;
height: 16px !important;
margin: 0 6px 0 0 !important;
transform: none !important;
}
html body form#coffeeSurvey label{
display: inline-block;
cursor: pointer;
}
</style>
<?php
$geschlossen = true;
if(checkKaffeelisteAccess($conn, $mailadress)){
echo "<h2>Kaffeeliste</h2>";
echo "Hallo " . getUserName($conn,$mailadress) . "!<br><br>";
// Beispiel: falls $conn nicht global ist, musst du es wie in deiner Seite erzeugen.
if (!isset($conn)) {
die("DB Verbindung (\$conn) fehlt.");
}
function h($s) { return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }
$errors = [];
$success = false;
$emailNorm = mb_strtolower(trim((string)$mailadress));
if ($emailNorm === '' || !filter_var($emailNorm, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Keine gültige E-Mail im System gefunden (Variable \$mailadress).";
}
// Options
$drinks = [
'espresso' => 'Espresso',
'crema' => 'Café Crema',
'cappuccino' => 'Cappuccino',
'latte' => 'Latte Macchiato',
'americano' => 'Americano',
'decaf' => 'Entkoffeiniert',
'other' => 'Andere',
];
$problems = [
'forget' => 'Vergesse Eintrag',
'empty' => 'Kaffee leer',
'water' => 'Wasser auffüllen',
'too_little' => 'zu wenig Kaffeeausgabe',
'too_much' => 'zu viel Kaffeeausgabe',
'none' => 'Kein Problem',
'other' => 'Sonstiges',
];
$improvements = [
'easier_entry' => 'Einfacherer Eintrag',
'overview' => 'Übersicht über Kosten/Verbrauch',
'more_mails' => 'Mehr Info-Mails',
'adjust_amount' => 'Menge der Kaffeeausgabe anpassen',
'other' => 'Sonstiges',
];
function post($k, $def='') { return $_POST[$k] ?? $def; }
function postArr($k) { $v = $_POST[$k] ?? []; return is_array($v) ? $v : []; }
// Schon abgestimmt?
$alreadyVoted = true;
if (!$errors) {
$sqlChk = "SELECT 1 FROM dbo.CoffeeSurveyVotedEmails WHERE EmailNorm = ?";
$stmtChk = sqlsrv_query($conn, $sqlChk, [$emailNorm]);
if ($stmtChk === false) {
$errors[] = "DB-Fehler (Vote-Check): " . print_r(sqlsrv_errors(), true);
} else {
$alreadyVoted = (sqlsrv_fetch_array($stmtChk, SQLSRV_FETCH_NUMERIC) !== null);
}
}
// POST Handling
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$errors) {
if ($alreadyVoted) {
$errors[] = "Du hast bereits abgestimmt.";
} else {
$q1 = (int)post('q1_listease', 0); // 1 sehr einfach .. 5 sehr schwierig
$q2 = (int)post('q2_listsat', 0); // 1 sehr zufrieden .. 5 sehr unzufrieden
$q3 = (int)post('q3_quality', 0);
$q4 = (int)post('q4_websat', 0);
$q5 = postArr('q5_drinks'); // array
$q5_other = trim((string)post('q5_drinks_other',''));
$q6 = trim((string)post('q6_newvarieties',''));
$q7 = (string)post('q7_problem','');
$q7_other = trim((string)post('q7_problem_other',''));
$q8 = postArr('q8_improvements');
$q8_other = trim((string)post('q8_improvements_other',''));
$q9 = trim((string)post('q9_betterideas',''));
// Validate scales
foreach ([1=>$q1,2=>$q2,3=>$q3,4=>$q4] as $idx=>$val) {
if ($val < 1 || $val > 5) $errors[] = "Bitte bei Frage {$idx} einen Wert von 1 bis 5 wählen.";
}
// Validate drinks
$allowedDrinks = array_keys($drinks);
$q5 = array_values(array_unique(array_filter($q5, fn($v)=>in_array($v,$allowedDrinks,true))));
if (count($q5) === 0) $errors[] = "Bitte bei Frage 5 mindestens eine Kaffeesorte auswählen.";
if (in_array('other',$q5,true) && $q5_other === '') $errors[] = "Bitte bei Frage 5 'Andere' kurz beschreiben.";
// Validate problem
if (!array_key_exists($q7, $problems)) $errors[] = "Bitte bei Frage 7 eine Option wählen.";
if ($q7 === 'other' && $q7_other === '') $errors[] = "Bitte bei Frage 7 'Sonstiges' kurz beschreiben.";
// Validate improvements
$allowedImp = array_keys($improvements);
$q8 = array_values(array_unique(array_filter($q8, fn($v)=>in_array($v,$allowedImp,true))));
if (count($q8) === 0) $errors[] = "Bitte bei Frage 8 mindestens eine Verbesserung auswählen.";
if (in_array('other',$q8,true) && $q8_other === '') $errors[] = "Bitte bei Frage 8 'Sonstiges' kurz beschreiben.";
if (!$errors) {
$q5_csv = implode(',', $q5);
$q8_csv = implode(',', $q8);
// Transaction (sqlsrv)
sqlsrv_begin_transaction($conn);
// 1) Sperre (E-Mail) eintragen
$sqlEmail = "INSERT INTO dbo.CoffeeSurveyVotedEmails (EmailNorm) VALUES (?)";
$stmtEmail = sqlsrv_query($conn, $sqlEmail, [$emailNorm]);
if ($stmtEmail === false) {
sqlsrv_rollback($conn);
$errors[] = "Speichern fehlgeschlagen (E-Mail-Sperre). " . print_r(sqlsrv_errors(), true);
} else {
// 2) Antworten speichern (ohne E-Mail)
$sqlIns = "
INSERT INTO dbo.CoffeeSurveyResponses
(Q1_ListEase, Q2_ListSatisfaction, Q3_CoffeeQuality, Q4_WebsiteSatisfaction,
Q5_Drinks, Q5_DrinksOther, Q6_NewVarieties,
Q7_ListProblem, Q7_ListProblemOther,
Q8_Improvements, Q8_ImprovementsOther,
Q9_BetterIdeas)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
";
$params = [
$q1, $q2, $q3, $q4,
$q5_csv, ($q5_other !== '' ? $q5_other : null), ($q6 !== '' ? $q6 : null),
$q7, ($q7_other !== '' ? $q7_other : null),
$q8_csv, ($q8_other !== '' ? $q8_other : null),
($q9 !== '' ? $q9 : null),
];
$stmtIns = sqlsrv_query($conn, $sqlIns, $params);
if ($stmtIns === false) {
sqlsrv_rollback($conn);
$errors[] = "Speichern fehlgeschlagen (Antworten). " . print_r(sqlsrv_errors(), true);
} else {
sqlsrv_commit($conn);
$success = true;
$alreadyVoted = true;
}
}
}
}
}
?>
<?php if ($success): ?>
<p><b>Danke!</b> Deine Antwort wurde gespeichert.</p>
<?php endif; ?>
<?php if ($alreadyVoted && !$success && !$errors): ?>
<p><h2><b>Hinweis:</b> Du hast bereits abgestimmt.</h2></p>
<?php endif; ?>
<?php if ($errors): ?>
<div style="border:1px solid #cc0000; padding:10px; margin:10px 0;">
<b>Bitte korrigieren:</b>
<ul>
<?php foreach ($errors as $e): ?>
<li><?php echo h($e); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif;?>
<?php if ($geschlossen):
echo "<p><b>Danke!</b> Umfrage abgeschlossen.</p>";
else:
?>
<form id="coffeeSurvey" method="post" action="<?php echo h($_SERVER["PHP_SELF"]); ?>">
<label for="q1_listease">Wie einfach ist die Kaffeeliste für dich zu benutzen?</label><br>
<select name="q1_listease" id="q1_listease" required>
<option value="">Bitte wählen</option>
<?php for ($i=1;$i<=5;$i++): ?>
<?php
$text = ($i===1) ? "1 (sehr einfach)" : (($i===5) ? "5 (sehr schwierig)" : (string)$i);
$sel = ((string)post('q1_listease','') === (string)$i) ? "selected" : "";
?>
<option value="<?php echo $i; ?>" <?php echo $sel; ?>><?php echo h($text); ?></option>
<?php endfor; ?>
</select>
<br><br>
<label for="q2_listsat">Wie zufrieden bist du mit der Kaffeeliste insgesamt?</label><br>
<select name="q2_listsat" id="q2_listsat" required>
<option value="">Bitte wählen</option>
<?php for ($i=1;$i<=5;$i++): ?>
<?php
$text = ($i===1) ? "1 (sehr zufrieden)" : (($i===5) ? "5 (sehr unzufrieden)" : (string)$i);
$sel = ((string)post('q2_listsat','') === (string)$i) ? "selected" : "";
?>
<option value="<?php echo $i; ?>" <?php echo $sel; ?>><?php echo h($text); ?></option>
<?php endfor; ?>
</select>
<br><br>
<label for="q3_quality">Wie zufrieden bist du mit der Kaffeequalität insgesamt?</label><br>
<select name="q3_quality" id="q3_quality" required>
<option value="">Bitte wählen</option>
<?php for ($i=1;$i<=5;$i++): ?>
<?php
$text = ($i===1) ? "1 (sehr zufrieden)" : (($i===5) ? "5 (sehr unzufrieden)" : (string)$i);
$sel = ((string)post('q3_quality','') === (string)$i) ? "selected" : "";
?>
<option value="<?php echo $i; ?>" <?php echo $sel; ?>><?php echo h($text); ?></option>
<?php endfor; ?>
</select>
<br><br>
<label for="q4_websat">Wie zufrieden bist du mit der Webseite der Kaffeeliste insgesamt?</label><br>
<select name="q4_websat" id="q4_websat" required>
<option value="">Bitte wählen</option>
<?php for ($i=1;$i<=5;$i++): ?>
<?php
$text = ($i===1) ? "1 (sehr zufrieden)" : (($i===5) ? "5 (sehr unzufrieden)" : (string)$i);
$sel = ((string)post('q4_websat','') === (string)$i) ? "selected" : "";
?>
<option value="<?php echo $i; ?>" <?php echo $sel; ?>><?php echo h($text); ?></option>
<?php endfor; ?>
</select>
<br><br>
<label>Welche Kaffeearten/Sorten trinkst du am häufigsten? (Mehrfachauswahl)</label><br>
<?php foreach ($drinks as $val => $label): ?>
<?php $checked = in_array($val, postArr('q5_drinks'), true) ? "checked" : ""; ?>
<input type="checkbox" name="q5_drinks[]" value="<?php echo h($val); ?>" <?php echo $checked; ?>>
<?php echo h($label); ?><br>
<?php endforeach; ?>
<br>
<label for="q5_drinks_other">Andere (Text):</label><br>
<input type="text" name="q5_drinks_other" id="q5_drinks_other" value="<?php echo h((string)post('q5_drinks_other','')); ?>">
<br><br>
<label for="q6_newvarieties">Welche zusätzlichen Sorten würdest du dir wünschen? (Freitext)</label><br>
<textarea name="q6_newvarieties" id="q6_newvarieties" rows="3"><?php echo h((string)post('q6_newvarieties','')); ?></textarea>
<br><br>
<label for="q7_problem">Was ist dein häufigstes Problem mit der Kaffeeliste?</label><br>
<select name="q7_problem" id="q7_problem" required>
<option value="">Bitte wählen</option>
<?php foreach ($problems as $val => $label): ?>
<?php $sel = ((string)post('q7_problem','') === (string)$val) ? "selected" : ""; ?>
<option value="<?php echo h($val); ?>" <?php echo $sel; ?>><?php echo h($label); ?></option>
<?php endforeach; ?>
</select>
<br><br>
<label for="q7_problem_other">Sonstiges (Text):</label><br>
<input type="text" name="q7_problem_other" id="q7_problem_other" value="<?php echo h((string)post('q7_problem_other','')); ?>">
<br><br>
<label>Welche Verbesserungen wünschst du dir für die Kaffeeliste? (Mehrfachauswahl)</label><br>
<?php foreach ($improvements as $val => $label): ?>
<?php $checked = in_array($val, postArr('q8_improvements'), true) ? "checked" : ""; ?>
<input type="checkbox" name="q8_improvements[]" value="<?php echo h($val); ?>" <?php echo $checked; ?>>
<?php echo h($label); ?><br>
<?php endforeach; ?>
<br>
<label for="q8_improvements_other">Sonstiges (Text):</label><br>
<input type="text" name="q8_improvements_other" id="q8_improvements_other" value="<?php echo h((string)post('q8_improvements_other','')); ?>">
<br><br>
<label for="q9_betterideas">Was kann die Kaffeeliste noch besser machen? (Freitext)</label><br>
<textarea name="q9_betterideas" id="q9_betterideas" rows="4"><?php echo h((string)post('q9_betterideas','')); ?></textarea>
<br><br>
<input type="hidden" name="aktion" value="umfrage_absenden">
<button type="submit" <?php echo $alreadyVoted ? 'disabled' : ''; ?>>Umfrage absenden</button>
</form>
<?php
endif;?>
<?php
}else{
echo "<h2>Sie haben keine Zugang zu dieser Webseite</h2>";
}
?>
</div>
</section>
<?php include "footer.php";
?>