Files
Rezepte/main.php
2025-09-20 16:01:52 +02:00

221 lines
7.9 KiB
PHP

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
function makeClickableLinks($text) {
$pattern = '/(?:(?:https?:\/\/)|(?:www\.))[^\s<>"\'()]+/i';
$replacement = '<a href="$0" target="_blank">$0</a>';
return preg_replace($pattern, $replacement, $text);
}
// Datenbankverbindung
require_once 'db_connection.php';
if ($link->connect_error) {
die('<p>Verbindung fehlgeschlagen: '. $link->connect_error .'</p>');
}
// ID aus der URL abrufen
$rezept_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
// Rezeptdaten abrufen
$stmt_rezept = $link->prepare("SELECT * FROM Rezepte WHERE id = ?");
$stmt_rezept->bind_param("i", $rezept_id);
$stmt_rezept->execute();
$rezept = $stmt_rezept->get_result()->fetch_assoc();
if (!$rezept) {
die("Rezept mit ID $rezept_id nicht gefunden.");
}
// Rezeptnummer holen und auf 3 Stellen auffüllen
$rezeptnummer_int = intval($rezept['Rezeptnummer']);
$rezeptnummer = 'R' . str_pad($rezeptnummer_int, 3, '0', STR_PAD_LEFT);
// Zutaten abrufen
$stmt_zutaten = $link->prepare("SELECT ingr FROM ingredients WHERE rezeptnr = ?");
$stmt_zutaten->bind_param("s", $rezeptnummer);
$stmt_zutaten->execute();
$zutaten_result = $stmt_zutaten->get_result(); // Hier war der Fehler behoben
$zutaten_text = "";
if ($row = $zutaten_result->fetch_assoc()) {
$zutaten_text = $row['ingr'];
}
// Zubereitung abrufen
$stmt_zubereitung = $link->prepare("SELECT * FROM Zubereitung WHERE rezeptnummer = ? ORDER BY schritt");
$stmt_zubereitung->bind_param("s", $rezeptnummer);
$stmt_zubereitung->execute();
$zubereitung_result = $stmt_zubereitung->get_result();
$zubereitung = $zubereitung_result->fetch_all(MYSQLI_ASSOC);
if (empty($zubereitung)) {
$zubereitung = [];
}
// Bilder abrufen
$stmt_bilder = $link->prepare("SELECT * FROM rezepte_bilder WHERE rezepte_id = ? ORDER BY id");
$stmt_bilder->bind_param("i", $rezept_id);
$stmt_bilder->execute();
$bilder_result = $stmt_bilder->get_result();
$bilder = $bilder_result->fetch_all(MYSQLI_ASSOC);
if (empty($bilder)) {
$bilder = [];
}
?>
<!DOCTYPE html>
<html>
<head>
<style>
body {
font-family: Arial, sans-serif;
background: #fcf6e3;
}
table {
background: white;
}
@import url('https://fonts.googleapis.com/css?family=Roboto');
td.Kateg { width: 20%; height: 20%; text-align: center; }
td.ueber { font-size: 1.4em; }
td.unter { font-size: 1.4em; }
body.sans { font-family: Arial, sans-serif; }
img { width: 200px; }
img.oben { width: 500px; }
img.vergroesserbar { cursor: pointer; }
img.vergroessert { width: 400px !important; transition: width 0.3s ease; }
pre.zutaten {
font-size: 1.2em;
font-family: Arial, sans-serif;
white-space: pre-wrap;
}
.edit-button {
display: inline-block;
padding: 10px 20px;
background-color: #bb7e19;
color: white;
text-decoration: none;
border-radius: 5px;
font-family: Arial, sans-serif;
font-size: 1em;
margin-bottom: 10px;
}
.custom-button {
display: inline-block;
padding: 10px 20px;
background-color: #bb7e19;
color: white;
text-decoration: none;
border-radius: 5px;
font-family: Arial, sans-serif;
font-size: 1em;
margin-right: 10px;
margin-bottom: 10px;
border: none;
cursor: pointer;
text-align: center;
}
.custom-button:hover {
background-color: #a06f15;
}
</style>
</head>
<body class='sans' >
<table width='800px' align='center' border='0'>
<tr><td>
<a href="./index.php" class="custom-button">Zurück zur Übersicht</a>
<a href="Edit.php?id=<?= htmlspecialchars($rezept_id) ?>" class="custom-button">Rezept editieren</a>
</td></tr>
<tr><td>
<table align='left' border='0'>
<tr>
<td style='font-size:1.6em'><?= htmlspecialchars($rezeptnummer) ?></td>
</tr>
<tr>
<td style='font-size:1.6em'><?= htmlspecialchars($rezept['Bezeichnung']) ?></td>
</tr>
<tr>
<td class='unter'><?= makeClickableLinks($rezept['Beschreibung']) ?><br><br></td>
</tr>
<tr>
<td align='left'>
<?php if (!empty($bilder)): ?>
<img class='oben' src="<?= htmlspecialchars($bilder[0]['datei_pfad']) ?>">
<?php endif; ?>
</td>
</tr>
<?php if (!empty(trim($rezept['Vorbereitung']))): ?>
<tr>
<td class='unter'><br>Vorbereitung: <span style="font-size:0.9em;"><?= makeClickableLinks($rezept['Vorbereitung']) ?></span></td>
</tr>
<?php endif; ?>
<?php if (!empty(trim($zutaten_text))): ?>
<tr>
<td class='unter'><br>Zutaten
<?php if (!empty($rezept['Anzahl'])): ?>
<style='font-size: 1.2em;">für <?= htmlspecialchars($rezept['Anzahl']) ?> Personen:</span>
<?php endif; ?>
</td>
</tr>
<?php endif; ?>
</table>
</td></tr>
<?php if (!empty(trim($zutaten_text))): ?>
<tr><td>
<table align='center' border='0'>
<tr>
<th align='left'></th>
</tr>
<tr>
<td><pre class="zutaten"><?= $zutaten_text ?></pre></td>
</tr>
</table>
</td></tr>
<?php endif; ?>
<?php if (!empty($zubereitung) || !empty($bilder)): ?>
<tr><td>
<table align='left' border='0'>
<tr>
<td class='unter' align='left' colspan='2'><br>Zubereitung<br><br></td>
</tr>
<?php
// Bestimme die maximale Anzahl an Schritten (basierend auf $zubereitung oder $bilder)
$maxSteps = max(count($zubereitung), count($bilder));
for ($i = 0; $i < $maxSteps; $i++):
$currentIndex = $i + 1; // Da $bilder[$index + 1] im Originalcode verwendet wird
?>
<tr>
<td>
<?php if (!empty($bilder[$currentIndex])): ?>
<img class='vergroesserbar' src='<?= htmlspecialchars($bilder[$currentIndex]['datei_pfad']) ?>'>
<?php endif; ?>
</td>
<td style='text-align:justify;padding:20px;font-size: 1.2em;'>
<?= !empty($zubereitung[$i]['text']) ? htmlspecialchars($zubereitung[$i]['text']) : '&nbsp;' ?>
</td>
</tr>
<?php endfor; ?>
</table>
</td></tr>
<?php endif; ?>
<?php if (!empty(trim($rezept['Kommentar']))): ?>
<tr><td>
<table>
<tr><td><br><br><span style='font-size:1.4em'>Kommentar</span><br><br><span style='font-size: 1.2em; display: block;'><?= makeClickableLinks($rezept['Kommentar']) ?></span></td></tr>
<?php endif; ?>
</table>
<script>
document.addEventListener('DOMContentLoaded', function() {
const bilder = document.querySelectorAll('img.vergroesserbar');
bilder.forEach(function(bild) {
bild.addEventListener('click', function() {
if (this.classList.contains('vergroessert')) {
this.classList.remove('vergroessert');
} else {
this.classList.add('vergroessert');
}
});
});
});
</script>
</body>
</html>