umgestellt auf Docker
8
.dockerignore
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
README.md
|
||||||
|
Dockerfile
|
||||||
|
docker-compose.yml
|
||||||
|
.dockerignore
|
||||||
|
upload.zip
|
||||||
|
*.log
|
||||||
33
Dockerfile
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
FROM php:8.1-apache
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libzip-dev \
|
||||||
|
zip \
|
||||||
|
unzip \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Install PHP extensions
|
||||||
|
RUN docker-php-ext-install mysqli pdo pdo_mysql zip
|
||||||
|
|
||||||
|
# Enable Apache mod_rewrite
|
||||||
|
RUN a2enmod rewrite
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
# Copy application files
|
||||||
|
COPY . /var/www/html/
|
||||||
|
|
||||||
|
# Set permissions
|
||||||
|
RUN chown -R www-data:www-data /var/www/html \
|
||||||
|
&& chmod -R 755 /var/www/html
|
||||||
|
|
||||||
|
# Create uploads directory if not exists
|
||||||
|
RUN mkdir -p uploads && chown -R www-data:www-data uploads
|
||||||
|
|
||||||
|
# Expose port 80
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# Start Apache
|
||||||
|
CMD ["apache2-foreground"]
|
||||||
487
Edit.php
Normal file
@@ -0,0 +1,487 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
require_once 'db_connection.php';
|
||||||
|
// Initialisierung
|
||||||
|
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
|
||||||
|
$row = [];
|
||||||
|
$bilder = [];
|
||||||
|
$zutaten_ingr = '';
|
||||||
|
$zubereitung_text = '';
|
||||||
|
// Daten laden, falls ID vorhanden
|
||||||
|
if ($id > 0) {
|
||||||
|
$sql = "SELECT * FROM Rezepte WHERE id = ?";
|
||||||
|
$stmt = $link->prepare($sql);
|
||||||
|
$stmt->bind_param('i', $id);
|
||||||
|
$stmt->execute();
|
||||||
|
if ($stmt->error) {
|
||||||
|
die("Fehler beim Update: " . $stmt->error);
|
||||||
|
}
|
||||||
|
$result = $stmt->get_result();
|
||||||
|
$row = $result->fetch_assoc();
|
||||||
|
// Lade die Zutaten aus der Tabelle 'ingredients', falls Rezeptnummer vorhanden
|
||||||
|
if (!empty($row['Rezeptnummer'])) {
|
||||||
|
$rezeptnummer = 'R' . str_pad($row['Rezeptnummer'], 3, '0', STR_PAD_LEFT);
|
||||||
|
$sql_ingr = "SELECT ingr FROM ingredients WHERE rezeptnr = ?";
|
||||||
|
$stmt_ingr = $link->prepare($sql_ingr);
|
||||||
|
$stmt_ingr->bind_param('s', $rezeptnummer);
|
||||||
|
$stmt_ingr->execute();
|
||||||
|
$result_ingr = $stmt_ingr->get_result();
|
||||||
|
$ingr_row = $result_ingr->fetch_assoc();
|
||||||
|
$zutaten_ingr = $ingr_row['ingr'] ?? '';
|
||||||
|
}
|
||||||
|
// Lade die Zubereitungsschritte aus der Tabelle 'Zubereitung'
|
||||||
|
if (!empty($row['Rezeptnummer'])) {
|
||||||
|
$rezeptnr_zub = 'R' . str_pad($row['Rezeptnummer'], 3, '0', STR_PAD_LEFT);
|
||||||
|
$sql_zub = "SELECT text FROM Zubereitung WHERE rezeptnummer = ? ORDER BY schritt";
|
||||||
|
$stmt_zub = $link->prepare($sql_zub);
|
||||||
|
$stmt_zub->bind_param('s', $rezeptnr_zub);
|
||||||
|
$stmt_zub->execute();
|
||||||
|
$result_zub = $stmt_zub->get_result();
|
||||||
|
while ($zub_row = $result_zub->fetch_assoc()) {
|
||||||
|
$zubereitung_text .= $zub_row['text'] . "\n";
|
||||||
|
}
|
||||||
|
$zubereitung_text = trim($zubereitung_text);
|
||||||
|
}
|
||||||
|
// Bilder laden
|
||||||
|
$sql_bilder = "SELECT * FROM rezepte_bilder WHERE rezepte_id = ?";
|
||||||
|
$stmt_bilder = $link->prepare($sql_bilder);
|
||||||
|
$stmt_bilder->bind_param('i', $id);
|
||||||
|
$stmt_bilder->execute();
|
||||||
|
$result_bilder = $stmt_bilder->get_result();
|
||||||
|
$bilder = $result_bilder->fetch_all(MYSQLI_ASSOC);
|
||||||
|
}
|
||||||
|
// Einzelnes Bild speichern, wenn der "Bild speichern"-Button geklickt wurde
|
||||||
|
if (isset($_POST['save_single_image']) && $id > 0) {
|
||||||
|
if (!empty($_FILES['single_bild']['name'])) {
|
||||||
|
$rezeptnummer = isset($_POST['Rezeptnummer']) ? intval($_POST['Rezeptnummer']) : 0;
|
||||||
|
$r_nummer = 'R' . str_pad($rezeptnummer, 3, '0', STR_PAD_LEFT);
|
||||||
|
$upload_dir = 'uploads/' . $r_nummer . '/';
|
||||||
|
// Ordner erstellen, falls nicht vorhanden
|
||||||
|
if (!file_exists($upload_dir)) {
|
||||||
|
mkdir($upload_dir, 0777, true);
|
||||||
|
}
|
||||||
|
// Aktuelle Anzahl der Bilder in diesem Ordner zählen
|
||||||
|
$existing_files = glob($upload_dir . $r_nummer . '_*.jpg');
|
||||||
|
$next_index = count($existing_files);
|
||||||
|
$datei_name = $r_nummer . '_' . $next_index . '.jpg';
|
||||||
|
$datei_pfad = $upload_dir . $datei_name;
|
||||||
|
if (move_uploaded_file($_FILES['single_bild']['tmp_name'], $datei_pfad)) {
|
||||||
|
$sql_bild = "INSERT INTO rezepte_bilder (rezepte_id, datei_pfad) VALUES (?, ?)";
|
||||||
|
$stmt_bild = $link->prepare($sql_bild);
|
||||||
|
$stmt_bild->bind_param('is', $id, $datei_pfad);
|
||||||
|
$stmt_bild->execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
header("Location: Edit.php?id=$id");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
// Daten speichern, wenn das Formular gesendet wurde
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save'])) {
|
||||||
|
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
|
||||||
|
$rezeptnummer = isset($_POST['Rezeptnummer']) ? intval($_POST['Rezeptnummer']) : 0;
|
||||||
|
$bezeichnung = $_POST['Bezeichnung'];
|
||||||
|
$beschreibung = $_POST['Beschreibung'];
|
||||||
|
$kategorie = $_POST['Kategorie'];
|
||||||
|
$vorbereitung = $_POST['Vorbereitung'];
|
||||||
|
$anzahl_personen = isset($_POST['Anzahl']) ? intval($_POST['Anzahl']) : 2; // Standardwert 2
|
||||||
|
$zutaten = $_POST['Zutaten'];
|
||||||
|
$zubereitung = $_POST['Zubereitung'];
|
||||||
|
$kommentar = $_POST['Kommentar'];
|
||||||
|
// Rezeptnummer für 'ingredients' und 'Zubereitung' formatieren (z. B. R050)
|
||||||
|
$rezeptnr_ingr = 'R' . str_pad($rezeptnummer, 3, '0', STR_PAD_LEFT);
|
||||||
|
$rezeptnr_zub = $rezeptnr_ingr;
|
||||||
|
// 1. Zutaten in 'ingredients' speichern/updaten
|
||||||
|
$stmt_ingr = $link->prepare("
|
||||||
|
INSERT INTO ingredients (rezeptnr, ingr)
|
||||||
|
VALUES (?, ?)
|
||||||
|
ON DUPLICATE KEY UPDATE ingr = ?
|
||||||
|
");
|
||||||
|
$stmt_ingr->bind_param("sss", $rezeptnr_ingr, $zutaten, $zutaten);
|
||||||
|
$stmt_ingr->execute();
|
||||||
|
// 2. Zubereitungsschritte in 'Zubereitung' speichern
|
||||||
|
// Alte Zubereitungsschritte löschen
|
||||||
|
$sql_del_zub = "DELETE FROM Zubereitung WHERE rezeptnummer = ?";
|
||||||
|
$stmt_del_zub = $link->prepare($sql_del_zub);
|
||||||
|
$stmt_del_zub->bind_param('s', $rezeptnr_zub);
|
||||||
|
$stmt_del_zub->execute();
|
||||||
|
// Neue Zubereitungsschritte speichern
|
||||||
|
$zubereitung_schritte = explode("\n", $zubereitung);
|
||||||
|
$schritt_nummer = 1;
|
||||||
|
foreach ($zubereitung_schritte as $schritt_text) {
|
||||||
|
$schritt_text = trim($schritt_text);
|
||||||
|
if (!empty($schritt_text)) {
|
||||||
|
$sql_ins_zub = "INSERT INTO Zubereitung (rezeptnummer, schritt, text) VALUES (?, ?, ?)";
|
||||||
|
$stmt_ins_zub = $link->prepare($sql_ins_zub);
|
||||||
|
$stmt_ins_zub->bind_param('sis', $rezeptnr_zub, $schritt_nummer, $schritt_text);
|
||||||
|
$stmt_ins_zub->execute();
|
||||||
|
$schritt_nummer++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 3. Rezept in 'Rezepte' speichern/updaten
|
||||||
|
if ($id > 0) {
|
||||||
|
$sql = "UPDATE Rezepte SET Rezeptnummer = ?, Bezeichnung = ?, Beschreibung = ?, Kategorie = ?, Vorbereitung = ?, Anzahl = ?, Zutaten = ?, Zubereitung = ?, Kommentar = ? WHERE id = ?";
|
||||||
|
$stmt = $link->prepare($sql);
|
||||||
|
$stmt->bind_param('issssiissi', $rezeptnummer, $bezeichnung, $beschreibung, $kategorie, $vorbereitung, $anzahl_personen, $zutaten, $zubereitung, $kommentar, $id);
|
||||||
|
$stmt->execute();
|
||||||
|
} else {
|
||||||
|
$sql = "INSERT INTO Rezepte (Rezeptnummer, Bezeichnung, Beschreibung, Kategorie, Vorbereitung, Anzahl, Zutaten, Zubereitung, Kommentar) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
|
$stmt = $link->prepare($sql);
|
||||||
|
$stmt->bind_param('issssisss', $rezeptnummer, $bezeichnung, $beschreibung, $kategorie, $vorbereitung, $anzahl_personen, $zutaten, $zubereitung, $kommentar);
|
||||||
|
$stmt->execute();
|
||||||
|
$id = $stmt->insert_id;
|
||||||
|
}
|
||||||
|
header("Location: index.php");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
// Bild löschen
|
||||||
|
if (isset($_GET['delete_bild'])) {
|
||||||
|
$bild_id = intval($_GET['delete_bild']);
|
||||||
|
$sql = "SELECT datei_pfad FROM rezepte_bilder WHERE id = ?";
|
||||||
|
$stmt = $link->prepare($sql);
|
||||||
|
$stmt->bind_param('i', $bild_id);
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->get_result();
|
||||||
|
$bild = $result->fetch_assoc();
|
||||||
|
if (!empty($bild['datei_pfad']) && file_exists($bild['datei_pfad'])) {
|
||||||
|
unlink($bild['datei_pfad']);
|
||||||
|
}
|
||||||
|
$sql = "DELETE FROM rezepte_bilder WHERE id = ?";
|
||||||
|
$stmt = $link->prepare($sql);
|
||||||
|
$stmt->bind_param('i', $bild_id);
|
||||||
|
$stmt->execute();
|
||||||
|
header("Location: Edit.php?id=$id");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
// Rezept löschen
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete'])) {
|
||||||
|
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
|
||||||
|
if ($id > 0) {
|
||||||
|
// Lösche den Eintrag in 'ingredients', falls vorhanden
|
||||||
|
$sql_rezept = "SELECT Rezeptnummer FROM Rezepte WHERE id = ?";
|
||||||
|
$stmt_rezept = $link->prepare($sql_rezept);
|
||||||
|
$stmt_rezept->bind_param('i', $id);
|
||||||
|
$stmt_rezept->execute();
|
||||||
|
$result_rezept = $stmt_rezept->get_result();
|
||||||
|
$rezept = $result_rezept->fetch_assoc();
|
||||||
|
if ($rezept) {
|
||||||
|
$rezeptnr_ingr = 'R' . str_pad($rezept['Rezeptnummer'], 3, '0', STR_PAD_LEFT);
|
||||||
|
$sql_del_ingr = "DELETE FROM ingredients WHERE rezeptnr = ?";
|
||||||
|
$stmt_del_ingr = $link->prepare($sql_del_ingr);
|
||||||
|
$stmt_del_ingr->bind_param('s', $rezeptnr_ingr);
|
||||||
|
$stmt_del_ingr->execute();
|
||||||
|
// Lösche die Zubereitungsschritte
|
||||||
|
$sql_del_zub = "DELETE FROM Zubereitung WHERE rezeptnummer = ?";
|
||||||
|
$stmt_del_zub = $link->prepare($sql_del_zub);
|
||||||
|
$stmt_del_zub->bind_param('s', $rezeptnr_ingr);
|
||||||
|
$stmt_del_zub->execute();
|
||||||
|
}
|
||||||
|
// Lösche das Rezept
|
||||||
|
$sql = "DELETE FROM Rezepte WHERE id = ?";
|
||||||
|
$stmt = $link->prepare($sql);
|
||||||
|
$stmt->bind_param('i', $id);
|
||||||
|
$stmt->execute();
|
||||||
|
}
|
||||||
|
header("Location: index.php");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title><?= $id > 0 ? 'Rezept bearbeiten' : 'Neues Rezept' ?></title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
background: #fcf6e3;
|
||||||
|
color: #8b5a2b;
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
.back-link {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
color: #8b5a2b;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.back-link:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.form-container {
|
||||||
|
width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #fff;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
th, td {
|
||||||
|
padding: 10px;
|
||||||
|
text-align: left;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
color: #8b5a2b;
|
||||||
|
}
|
||||||
|
input[type="text"],
|
||||||
|
textarea,
|
||||||
|
select {
|
||||||
|
width: 100%;
|
||||||
|
padding: 8px;
|
||||||
|
font-size: 18px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #5b4636;
|
||||||
|
}
|
||||||
|
textarea {
|
||||||
|
height: 100px;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
.submit-btn, .delete-btn {
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 18px;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.submit-btn {
|
||||||
|
background: #bb7e19;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.submit-btn:hover {
|
||||||
|
background: #a06d15;
|
||||||
|
}
|
||||||
|
.delete-btn {
|
||||||
|
background: #d65c5c;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.delete-btn:hover {
|
||||||
|
background: #b83d3d;
|
||||||
|
}
|
||||||
|
.button-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.file-upload-row {
|
||||||
|
display: flex;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.file-upload-container {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
display: inline-block;
|
||||||
|
width: 48%;
|
||||||
|
}
|
||||||
|
.file-upload-container input[type="file"] {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
opacity: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.file-upload-btn, .save-single-image-btn {
|
||||||
|
background: #bb7e19;
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.save-single-image-btn {
|
||||||
|
background: #8b5a2b;
|
||||||
|
}
|
||||||
|
.save-single-image-btn:hover {
|
||||||
|
background: #7a4b22;
|
||||||
|
}
|
||||||
|
.bilder-container {
|
||||||
|
margin-top: 15px;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
.bild-vorschau {
|
||||||
|
position: relative;
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
.bild-vorschau img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.bild-loeschen {
|
||||||
|
position: absolute;
|
||||||
|
top: 5px;
|
||||||
|
right: 5px;
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
border: none;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #d65c5c;
|
||||||
|
line-height: 20px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#lightbox {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 9999;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.8);
|
||||||
|
text-align: center;
|
||||||
|
padding-top: 50px;
|
||||||
|
}
|
||||||
|
#lightbox img {
|
||||||
|
max-width: 80%;
|
||||||
|
max-height: 80%;
|
||||||
|
margin: auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#lightbox .close {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
right: 30px;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 35px;
|
||||||
|
font-weight: bold;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.custom-button {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #bb7e19;
|
||||||
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-family: Roboto, 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>
|
||||||
|
<script>
|
||||||
|
function openLightbox(src) {
|
||||||
|
const lightbox = document.getElementById('lightbox');
|
||||||
|
const lightboxImg = document.getElementById('lightbox-img');
|
||||||
|
lightboxImg.src = src;
|
||||||
|
lightbox.style.display = 'block';
|
||||||
|
}
|
||||||
|
function closeLightbox() {
|
||||||
|
document.getElementById('lightbox').style.display = 'none';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="form-container">
|
||||||
|
<a href="./index.php" class="custom-button">Zurück zur Übersicht</a>
|
||||||
|
<a href="main.php?id=<?= htmlspecialchars($id) ?>" class="custom-button">Rezept anzeigen</a>
|
||||||
|
<h1><?= $id > 0 ? 'Rezept bearbeiten' : 'Neues Rezept' ?></h1>
|
||||||
|
<form method="post" action="Edit.php?id=<?= $id ?>" enctype="multipart/form-data">
|
||||||
|
<input type="hidden" name="id" value="<?= $id ?>">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Rezeptnummer:</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="Rezeptnummer" value="<?= isset($row['Rezeptnummer']) ? htmlspecialchars($row['Rezeptnummer']) : '' ?>" required>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Bezeichnung:</th>
|
||||||
|
<td><input type="text" name="Bezeichnung" value="<?= isset($row['Bezeichnung']) ? htmlspecialchars($row['Bezeichnung']) : '' ?>"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Beschreibung:</th>
|
||||||
|
<td><textarea name="Beschreibung"><?= isset($row['Beschreibung']) ? htmlspecialchars($row['Beschreibung']) : '' ?></textarea></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Kategorie:</th>
|
||||||
|
<td><input type="text" name="Kategorie" value="<?= isset($row['Kategorie']) ? htmlspecialchars($row['Kategorie']) : '' ?>"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Vorbereitung:</th>
|
||||||
|
<td><textarea name="Vorbereitung"><?= isset($row['Vorbereitung']) ? htmlspecialchars($row['Vorbereitung']) : '' ?></textarea></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Anzahl der Personen:</th>
|
||||||
|
<td>
|
||||||
|
<input type="number" name="Anzahl" style="font-size: 18px;" value="<?= isset($row['Anzahl']) ? htmlspecialchars($row['Anzahl']) : '2' ?>" min="0" required>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Zutaten:</th>
|
||||||
|
<td><textarea name="Zutaten"><?= !empty($zutaten_ingr) ? htmlspecialchars($zutaten_ingr) : (isset($row['Zutaten']) ? htmlspecialchars($row['Zutaten']) : '') ?></textarea></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Zubereitung:</th>
|
||||||
|
<td><textarea name="Zubereitung"><?= isset($zubereitung_text) ? htmlspecialchars($zubereitung_text) : '' ?></textarea></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Kommentar:</th>
|
||||||
|
<td><textarea name="Kommentar"><?= isset($row['Kommentar']) ? htmlspecialchars($row['Kommentar']) : '' ?></textarea></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Bilder hochladen:</th>
|
||||||
|
<td>
|
||||||
|
<div class="file-upload-row">
|
||||||
|
<div class="file-upload-container">
|
||||||
|
<button type="button" class="file-upload-btn">Bild auswählen</button>
|
||||||
|
<input type="file" name="single_bild" accept=".jpg,.jpeg,.png">
|
||||||
|
</div>
|
||||||
|
<button type="submit" name="save_single_image" class="save-single-image-btn">Bild speichern</button>
|
||||||
|
</div>
|
||||||
|
<?php if (!empty($bilder)): ?>
|
||||||
|
<div class="bilder-container">
|
||||||
|
<?php foreach ($bilder as $bild): ?>
|
||||||
|
<div class="bild-vorschau">
|
||||||
|
<img src="<?= htmlspecialchars($bild['datei_pfad']) ?>" alt="Bildvorschau" onclick="openLightbox('<?= htmlspecialchars($bild['datei_pfad']) ?>')">
|
||||||
|
<a href="Edit.php?id=<?= $id ?>&delete_bild=<?= $bild['id'] ?>" class="bild-loeschen" onclick="return confirm('Möchtest du dieses Bild wirklich löschen?')">×</a>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="button-container">
|
||||||
|
<button type="submit" name="save" class="submit-btn">Speichern</button>
|
||||||
|
<?php if ($id > 0): ?>
|
||||||
|
<button type="submit" name="delete" class="delete-btn" onclick="return confirm('Möchtest du dieses Rezept wirklich löschen?')">Rezept löschen</button>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<!-- Lightbox für Bildvergrößerung -->
|
||||||
|
<div id="lightbox" onclick="closeLightbox()">
|
||||||
|
<span class="close" onclick="closeLightbox()">×</span>
|
||||||
|
<img id="lightbox-img" src="" alt="Vergrößerte Ansicht">
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
69
README.md
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# Rezepte Klaus - Docker Setup
|
||||||
|
|
||||||
|
Eine dockerisierte Version der Rezepte-Verwaltungsanwendung mit PHP, MySQL und phpMyAdmin.
|
||||||
|
|
||||||
|
## Komponenten
|
||||||
|
|
||||||
|
- **PHP-App**: Rezepte-Anwendung (Port 8082)
|
||||||
|
- **MySQL**: Datenbankserver (Port 3307)
|
||||||
|
- **phpMyAdmin**: Datenbankadministration (Port 8083)
|
||||||
|
|
||||||
|
## Schnellstart
|
||||||
|
|
||||||
|
1. **Docker starten:**
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Anwendung öffnen:**
|
||||||
|
- Rezepte-App: http://localhost:8082
|
||||||
|
- phpMyAdmin: http://localhost:8083
|
||||||
|
|
||||||
|
3. **Container stoppen:**
|
||||||
|
```bash
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
## Datenbankzugang
|
||||||
|
|
||||||
|
### Für die Anwendung:
|
||||||
|
- Host: mysql
|
||||||
|
- Database: rezepte_klaus
|
||||||
|
- User: rezepte_user
|
||||||
|
- Password: rezepte_pass
|
||||||
|
|
||||||
|
### Für phpMyAdmin:
|
||||||
|
- Server: mysql
|
||||||
|
- Username: rezepte_user
|
||||||
|
- Password: rezepte_pass
|
||||||
|
|
||||||
|
### Root-Zugang:
|
||||||
|
- Username: root
|
||||||
|
- Password: rezepte123
|
||||||
|
|
||||||
|
## Entwicklung
|
||||||
|
|
||||||
|
### Container neu bauen:
|
||||||
|
```bash
|
||||||
|
docker-compose build --no-cache
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Logs anzeigen:
|
||||||
|
```bash
|
||||||
|
docker-compose logs -f php-app
|
||||||
|
docker-compose logs -f mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
### Container Status:
|
||||||
|
```bash
|
||||||
|
docker-compose ps
|
||||||
|
```
|
||||||
|
|
||||||
|
## Datenvolumes
|
||||||
|
|
||||||
|
Die MySQL-Daten werden in einem Docker-Volume gespeichert und bleiben auch nach dem Stoppen der Container erhalten.
|
||||||
|
|
||||||
|
## Datenbankinitialisierung
|
||||||
|
|
||||||
|
Beim ersten Start werden automatisch alle Tabellen und Daten aus den SQL-Dateien importiert.
|
||||||
80
Rezepte.sql
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.9.11
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: db5018537291.hosting-data.io
|
||||||
|
-- Erstellungszeit: 20. Sep 2025 um 09:42
|
||||||
|
-- Server-Version: 8.0.36
|
||||||
|
-- PHP-Version: 7.4.33
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET AUTOCOMMIT = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Datenbank: `dbs14717264`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Tabellenstruktur für Tabelle `Rezepte`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `Rezepte` (
|
||||||
|
`id` int NOT NULL,
|
||||||
|
`Rezeptnummer` text COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
|
`Bezeichnung` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
|
`Beschreibung` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
||||||
|
`Kategorie` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||||
|
`datei_pfad` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||||
|
`Vorbereitung` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
||||||
|
`Anzahl` int NOT NULL,
|
||||||
|
`Zutaten` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
||||||
|
`Zubereitung` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
||||||
|
`Kommentar` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Daten für Tabelle `Rezepte`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `Rezepte` (`id`, `Rezeptnummer`, `Bezeichnung`, `Beschreibung`, `Kategorie`, `datei_pfad`, `Vorbereitung`, `Anzahl`, `Zutaten`, `Zubereitung`, `Kommentar`) VALUES
|
||||||
|
(6, '1', 'Warmer Bohnen-Kartoffel-Tomatensalat', 'Einfach und schnell - für einen warmen Sommerabend', 'Vegan', NULL, '', 2, '500 g Tomaten\r\n500 g grüne Bohnen\r\n400 g Kartoffel\r\neine mittelgroße Zwiebel\r\n4 EL Olivenöl\r\n2 EL Balsamico oder 1 EL Balsamico und eine Zitrone\r\n1/2 KL Salz\r\n1/2 KL Pfeffer\r\n1 Zitrone', '1 Alle Zutaten bereitstellen. Tomaten, Kartoffel und Bohnen waschen. Kartoffel als Pellkartoffel kochen. Bohnen brechen und zur Hälfte mit Wasser bedeckt kochen. \r\n\r\n2 Tomaten in Stücke und Zwiebel in feine Ringe schneiden. \r\n2 Tomaten und Zwiebel mit Zitrone, Balsamico, Salz, Pfeffer und Olivenöl anmachen. Die fertigen noch warmen Pellkartoffel würfeln und mit den garen warmen Bohnen zu den Tomaten geben und wie bei einem Salat unterheben.', 'Die Mengen müssen bei diesem Gericht nicht sehr genau sein. Wir mögen für dieses Gericht am liebsten die flachen Stangenbohnen und festkochende speckige Kartoffel. Die weißen Gemüsezwiebel haben einen feineren Geschmack als die gelben Zwiebel. Limonen schmecken oft feiner als Zitronen.'),
|
||||||
|
(7, '3', 'Tortilla', 'Alltagsessen in Mexiko', 'Vegetarisch', NULL, '', 2, '500 g festkochende Kartoffeln\r\n4 Eier\r\neine Zwiebel\r\neine rote süße Paprika\r\n4-6 EL Olivenöl\r\n1/2 KL Salz\r\n1/2 KL Pfeffer', '1 Alle Zutaten bereitstellen. Eine Antihaft-Pfanne ist nützlich, sonst muss man grosszügig Öl verwenden. Gemüse waschen, Kartoffel schälen. Kartoffel, Zwiebel und Paprika klein würfeln.\r\n\r\n2 Öl in die Pfanne, Zwiebel mit mittlerer Hitze glasig braten, Kartoffel hinzufügen, salzen und pfeffern und weiterbraten. Nach 10 Minuten Paprika hinzufügen und nochmals 5 Min weiterbraten. In dieser Zeit die Eier verkleppern. Vorsichtshalber eine Kartoffel probieren. Die Garzeit bei Kartoffel variiert. Wenn die Kartoffel fast gar ist können die Eier hinzugefügt werden. Weiterbraten bis das Ei von unten fest ist und die Tortilla sich in der Pfanne lockern lässt.\r\n\r\n3 Nervenstarke können mit einem Teller die Pfanne abdecken und die Tortilla mit Pfanne und Teller wenden, damit die Tortilla auf dem Teller zu liegen kommt. Die Pfanne wieder auf die Herdplatte stellen und die Tortilla mit der nicht fertig gegarten Seite in die Pfanne gleiten lassen und fertig braten.\r\nWer das Risiko nicht liebt, kann die Tortilla mit einem Deckel auf der Pfanne fertig braten, damit das Ei vollkommen stockt.', 'Wir essen gerne Tortilla zum späten Frühstück. Ein grüner Salat passt gut, muss aber nicht sein.'),
|
||||||
|
(11, '2', 'Scaloppine al vino bianco', 'Super schnell zubereitet und lecker', 'Fleisch', NULL, 'Zutaten bereitstellen', 2, '4', 'Alle Zutaten bereitstellen. Rosmarin und Salbei waschen, kleinschneiden.\r\nDie Schnitzel dünn klopfen, salzen und pfeffern und in dem Mehl wenden. Wenn die Schnitzel eine Zeit stehen zieht das Mehl oftmals ein. Dann nochmals in Mehl wenden.\r\n20 gr der Butter in der Pfanne erhitzen, damit sie schmilzt und Bläschen bildet, aber nicht brennt. Die abgetrocknete Rosmarin- und Salbei-Mischung zufügen und kurz braten, bis sich das Aroma der Kräuter entfaltet. Schnitzel hinzugeben und auf jeder Seite ganz kurz anbraten, nur bis sich auf dem Fleisch ein goldbraune Kruste gebildet hat (ca 1/2 Min pro Seite). Die restliche Butter kalt aus dem Kühschrank zufügen. Mit dem Weisswein ablöschen und rühren, damit die Butter mit dem Mehl und dem Wein bindet.', 'Bedenken: Die Mengen für Butter und Wein erhöhen sich nicht linear. Wenn man z.B. 4 Portionen kocht, nimmt man nicht die doppelte Menge an Wein und Butter, eher die halbe Menge dazu. Scaloppine machen wir gerne mit Schweineschnitzel, Rosmarin und Salbei. Dazu passen gut Bandnudel in Salbei mit Butter oder Öl sehr kurz gebraten. Eine zweite Variante sind Scaloppine vom Kalb dünn geschnitten mit fein geschnittener Petersilie. In diesem Fall wird die trockene Petersilie erst eine Minute vor dem Ende in die Sauce gerührt. Dazu machen wir Rösti oder Gemüse-Rösti.'),
|
||||||
|
(12, '5', 'Reis mit Gemüse und Tofu', 'Einfach und schnell zubereitet', 'Vegan', NULL, 'Tofu eine Stunde vor dem Kochen in Scheiben schneiden und in Tamari (Sojasauce) einlegen. Vorsicht, Tamari ist sehr salzig. Das muss beim Salzen des Essens berücksichtigt werden.', 2, '1', 'Zum Kochen alle Zutaten bereitstellen. Die Mengen muss man nicht ganz genau nehmen und wenn eines der Gemüse fehlt, schmeckt das auch lecker.\r\nDie Tasse Reis waschen und mit zwei Tassen Wasser und einem halben KL Salz in einem Topf bereitstellen. Karotte, Zucchini, Lauch, Petersilie, Paprika waschen und in lange schmale Streifen schneiden. Zwiebel halbieren und in halbe Ringe schneiden. Knoblauch in Stücke schneiden.\r\nReis zum Kochen bringen und bei kleiner Hitze köcheln lassen. Der Reis ist fertig, wenn das Wasser verkocht ist. Dann den Reis von der Platte nehmen und zugedeckt stehen lassen.\r\nIn einer Pfanne 3 EL des Öls erhitzen und zuerst die Zwiebel und den Knoblauch leicht braten, dann das Gemüse hinzufügen. Man kann das Gemüse entweder mit höherer Hitze unter ständigem Wenden garen oder bei kleiner Hitze mit dem Deckel auf der Pfanne garen. Um das Anbrennen zu verhindern, wenn man nicht dabei stehen möchte, kann man sicherheitshalber ca 0,1 Wasser in die Pfanne geben. Das Gemüse gart ca 10-12 Minuten. Es sollte gar, aber nicht zu weich sein.\r\nSesam in einen Teller schütten und die in Tamari eingelegten Tofuscheiben darin wenden. In einer zweiten Pfanne 3 EL des Öls erhitzen und den Tofu bei kleiner Hitze leicht bräunen. Überzähliger Sesam und Tamari kann mitgebraten werden. Nach einiger Zeit wenden.\r\nWenn alles fertig ist Gemüse und Reis sachte unterheben und mit dem Tofu toppen. Etwas fein geschnittene Petersilie darüber streuen.', 'Sowohl der Reis als auch das Gemüse und der Tofu sind nicht zeitkritisch. Wenn eines der beiden noch nicht fertig ist, kann das andere gegart warm gestellt werden. Reines Olivenöl passt nicht so gut zu diesem Gericht, deshalb mischen wir es mit Sonnenblumenöl. Fenchel passt auch sehr gut zu diesem Gericht. Wir nehmen gerne auch etwas frischen Ingwer in feine Scheiben geschnitten und Koriander dazu. Vorsicht, das Gemüse sollte nicht zu lange gegart werden, mit leichtem Knack schmeckt es am besten.'),
|
||||||
|
(31, '30', 'Pasta Gamberoni', 'Karins Rezept: Mit Oregano und Petersilie, ein scharfes Essen\r\nhttps://ricette.giallozafferano.it/Pasta-con-gamberoni.html\r\n', 'Fisch, Garnelen', NULL, 'Tomaten schneiden\r\nKnoblauch schneiden\r\nOregano und Peterling rüsten\r\nGarnelen vom Panzer und Köpfen befreien und Darm auswaschen', 2, '160', 'Zutaten bereitlegen. Garnelen aus Panzer und Köpfen entfernen. Die Panzer mit Zwiebel im Öl anbraten salzen und mit Wein aufgiessen. Das ergibt den Fischsud für die Pasta.\r\nParallel Nudel im Salzasser halbgar kochen Nudelwasser aufbewaren. Parallel Tomaten, Chili und Knoblauch braten, salzen und gegen Ende Oregano u Petersilie zufügen. Eventuell Nudelwasser zufügen, bis es eine gute Tomaten-Salsa ergibt.\r\nParallel Gamberoni auf beiden Seiten 1-2 Min anbraten und bei Seite stellen.\r\nNudel in die Tomatensauce giessen und mit dem Fischsud aufgiessen evtl durch Nudelwasser ergänzen und die Nudel auf diese Art al dente garen\r\nZum Schluss die Gamberoni zugeben.', 'Der Pfiff bei Pasta ist es, die Pasta in der Sauce fertig zu garen. Chili sind unterschiedlich scharf. Die Salsa soll scharf sein und es kann am Ende mit getrocknetem Chili abgeschmeckt werden.');
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes der exportierten Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes für die Tabelle `Rezepte`
|
||||||
|
--
|
||||||
|
ALTER TABLE `Rezepte`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für exportierte Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für Tabelle `Rezepte`
|
||||||
|
--
|
||||||
|
ALTER TABLE `Rezepte`
|
||||||
|
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=53;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
86
Zubereitung.sql
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.9.11
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: db5018537291.hosting-data.io
|
||||||
|
-- Erstellungszeit: 20. Sep 2025 um 09:44
|
||||||
|
-- Server-Version: 8.0.36
|
||||||
|
-- PHP-Version: 7.4.33
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET AUTOCOMMIT = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Datenbank: `dbs14717264`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Tabellenstruktur für Tabelle `Zubereitung`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `Zubereitung` (
|
||||||
|
`id` int NOT NULL,
|
||||||
|
`rezeptnummer` varchar(20) NOT NULL,
|
||||||
|
`schritt` int NOT NULL,
|
||||||
|
`text` varchar(1000) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Daten für Tabelle `Zubereitung`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `Zubereitung` (`id`, `rezeptnummer`, `schritt`, `text`) VALUES
|
||||||
|
(566, 'R001', 1, 'Alle Zutaten bereitstellen. Tomaten, Kartoffel und Bohnen waschen. Kartoffel als Pellkartoffel kochen. Bohnen brechen und zur Hälfte mit Wasser bedeckt kochen. Tomaten in Stücke und Zwiebel in feine Ringe schneiden. '),
|
||||||
|
(567, 'R001', 2, 'Tomaten und Zwiebel mit Zitrone, Balsamico, Salz, Pfeffer und Olivenöl anmachen. Die fertigen noch warmen Pellkartoffel würfeln und mit den garen warmen Bohnen zu den Tomaten geben und wie bei einem Salat unterheben. '),
|
||||||
|
(574, 'R003', 1, 'Alle Zutaten bereitstellen. Eine Antihaft-Pfanne ist nützlich, sonst muss man grosszügig Öl verwenden. Gemüse waschen, Kartoffel schälen. Kartoffel, Zwiebel und Paprika klein würfeln.'),
|
||||||
|
(575, 'R003', 2, 'Öl in die Pfanne, Zwiebel mit mittlerer Hitze glasig braten, Kartoffel hinzufügen, salzen und pfeffern und weiterbraten. Nach 10 Minuten Paprika hinzufügen und nochmals 5 Min weiterbraten. In dieser Zeit die Eier verkleppern. Vorsichtshalber eine Kartoffel probieren. Die Garzeit bei Kartoffel variiert. Wenn die Kartoffel fast gar ist können die Eier hinzugefügt werden. Weiterbraten bis das Ei von unten fest ist und die Tortilla sich in der Pfanne lockern lässt.'),
|
||||||
|
(576, 'R003', 3, 'Nervenstarke können mit einem Teller die Pfanne abdecken und die Tortilla mit Pfanne und Teller wenden, damit die Tortilla auf dem Teller zu liegen kommt. Die Pfanne wieder auf die Herdplatte stellen und die Tortilla mit der nicht fertig gegarten Seite in die Pfanne gleiten lassen und fertig braten.\r\nWer das Risiko nicht liebt, kann die Tortilla mit einem Deckel auf der Pfanne fertig braten, damit das Ei vollkommen stockt.'),
|
||||||
|
(1362, 'R030', 1, 'Zutaten bereitlegen. Garnelen aus Panzer und Köpfen entfernen. Die Panzer mit Zwiebel im Öl anbraten salzen und mit Wein aufgiessen. Das ergibt den Fischsud für die Pasta.'),
|
||||||
|
(1363, 'R030', 2, 'Parallel Nudel im Salzasser halbgar kochen Nudelwasser aufbewaren. Parallel Tomaten, Chili und Knoblauch braten, salzen und gegen Ende Oregano u Petersilie zufügen. Eventuell Nudelwasser zufügen, bis es eine gute Tomaten-Salsa ergibt.'),
|
||||||
|
(1364, 'R030', 3, 'Parallel Gamberoni auf beiden Seiten 1-2 Min anbraten und bei Seite stellen.'),
|
||||||
|
(1365, 'R030', 4, 'Nudel in die Tomatensauce giessen und mit dem Fischsud aufgiessen evtl durch Nudelwasser ergänzen und die Nudel auf diese Art al dente garen'),
|
||||||
|
(1366, 'R030', 5, 'Zum Schluss die Gamberoni zugeben.'),
|
||||||
|
(1373, 'R002', 1, 'Alle Zutaten bereitstellen. Rosmarin und Salbei waschen, kleinschneiden.'),
|
||||||
|
(1374, 'R002', 2, 'Die Schnitzel dünn klopfen, salzen und pfeffern und in dem Mehl wenden. Wenn die Schnitzel eine Zeit stehen zieht das Mehl oftmals ein. Dann nochmals in Mehl wenden.'),
|
||||||
|
(1375, 'R002', 3, '20 gr der Butter in der Pfanne erhitzen, damit sie schmilzt und Bläschen bildet, aber nicht brennt. Die abgetrocknete Rosmarin- und Salbei-Mischung zufügen und kurz braten, bis sich das Aroma der Kräuter entfaltet. Schnitzel hinzugeben und auf jeder Seite ganz kurz anbraten, nur bis sich auf dem Fleisch ein goldbraune Kruste gebildet hat (ca 1/2 Min pro Seite). Die restliche Butter kalt aus dem Kühschrank zufügen. Mit dem Weisswein ablöschen und rühren, damit die Butter mit dem Mehl und dem Wein bindet.'),
|
||||||
|
(1388, 'R005', 1, 'Zum Kochen alle Zutaten bereitstellen. Die Mengen muss man nicht ganz genau nehmen und wenn eines der Gemüse fehlt, schmeckt das auch lecker.'),
|
||||||
|
(1389, 'R005', 2, 'Die Tasse Reis waschen und mit zwei Tassen Wasser und einem halben KL Salz in einem Topf bereitstellen. Karotte, Zucchini, Lauch, Petersilie, Paprika waschen und in lange schmale Streifen schneiden. Zwiebel halbieren und in halbe Ringe schneiden. Knoblauch in Stücke schneiden.'),
|
||||||
|
(1390, 'R005', 3, 'Reis zum Kochen bringen und bei kleiner Hitze köcheln lassen. Der Reis ist fertig, wenn das Wasser verkocht ist. Dann den Reis von der Platte nehmen und zugedeckt stehen lassen.'),
|
||||||
|
(1391, 'R005', 4, 'In einer Pfanne 3 EL des Öls erhitzen und zuerst die Zwiebel und den Knoblauch leicht braten, dann das Gemüse hinzufügen. Man kann das Gemüse entweder mit höherer Hitze unter ständigem Wenden garen oder bei kleiner Hitze mit dem Deckel auf der Pfanne garen. Um das Anbrennen zu verhindern, wenn man nicht dabei stehen möchte, kann man sicherheitshalber ca 0,1 Wasser in die Pfanne geben. Das Gemüse gart ca 10-12 Minuten. Es sollte gar, aber nicht zu weich sein.'),
|
||||||
|
(1392, 'R005', 5, 'Sesam in einen Teller schütten und die in Tamari eingelegten Tofuscheiben darin wenden. In einer zweiten Pfanne 3 EL des Öls erhitzen und den Tofu bei kleiner Hitze leicht bräunen. Überzähliger Sesam und Tamari kann mitgebraten werden. Nach einiger Zeit wenden.'),
|
||||||
|
(1393, 'R005', 6, 'Wenn alles fertig ist Gemüse und Reis sachte unterheben und mit dem Tofu toppen. Etwas fein geschnittene Petersilie darüber streuen.');
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes der exportierten Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes für die Tabelle `Zubereitung`
|
||||||
|
--
|
||||||
|
ALTER TABLE `Zubereitung`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für exportierte Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für Tabelle `Zubereitung`
|
||||||
|
--
|
||||||
|
ALTER TABLE `Zubereitung`
|
||||||
|
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1394;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
20
db_connection.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
if (session_status() === PHP_SESSION_NONE) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Docker environment variables with fallbacks for local development
|
||||||
|
$host_name = $_ENV['DB_HOST'] ?? 'localhost';
|
||||||
|
$database = $_ENV['DB_NAME'] ?? 'rezepte_klaus';
|
||||||
|
$user_name = $_ENV['DB_USER'] ?? 'root';
|
||||||
|
$password = $_ENV['DB_PASS'] ?? '';
|
||||||
|
|
||||||
|
$link = new mysqli($host_name, $user_name, $password, $database);
|
||||||
|
|
||||||
|
if ($link->connect_error) {
|
||||||
|
die('<p>Verbindung zum MySQL Server fehlgeschlagen: '. $link->connect_error .'</p>');
|
||||||
|
}
|
||||||
|
?>
|
||||||
20
db_connection_docker.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
if (session_status() === PHP_SESSION_NONE) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Docker environment variables with fallbacks for local development
|
||||||
|
$host_name = $_ENV['DB_HOST'] ?? 'localhost';
|
||||||
|
$database = $_ENV['DB_NAME'] ?? 'rezepte_klaus';
|
||||||
|
$user_name = $_ENV['DB_USER'] ?? 'root';
|
||||||
|
$password = $_ENV['DB_PASS'] ?? '';
|
||||||
|
|
||||||
|
$link = new mysqli($host_name, $user_name, $password, $database);
|
||||||
|
|
||||||
|
if ($link->connect_error) {
|
||||||
|
die('<p>Verbindung zum MySQL Server fehlgeschlagen: '. $link->connect_error .'</p>');
|
||||||
|
}
|
||||||
|
?>
|
||||||
18
db_connection_local.php
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
if (session_status() === PHP_SESSION_NONE) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
|
$host_name = 'localhost';
|
||||||
|
$database = 'rezepte_klaus';
|
||||||
|
$user_name = 'root';
|
||||||
|
$password = '';
|
||||||
|
|
||||||
|
$link = new mysqli($host_name, $user_name, $password, $database);
|
||||||
|
|
||||||
|
if ($link->connect_error) {
|
||||||
|
die('<p>Verbindung zum MySQL Server fehlgeschlagen: '. $link->connect_error .'</p>');
|
||||||
|
}
|
||||||
|
?>
|
||||||
61
docker-compose.yml
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
services:
|
||||||
|
# MySQL Database
|
||||||
|
mysql:
|
||||||
|
image: mysql:8.0
|
||||||
|
container_name: rezepte_mysql
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: rezepte123
|
||||||
|
MYSQL_DATABASE: rezepte_klaus
|
||||||
|
MYSQL_USER: rezepte_user
|
||||||
|
MYSQL_PASSWORD: rezepte_pass
|
||||||
|
ports:
|
||||||
|
- "3307:3306"
|
||||||
|
volumes:
|
||||||
|
- mysql_data:/var/lib/mysql
|
||||||
|
- ./sql-init:/docker-entrypoint-initdb.d
|
||||||
|
networks:
|
||||||
|
- rezepte_network
|
||||||
|
|
||||||
|
# PHP Application with Apache
|
||||||
|
php-app:
|
||||||
|
build: .
|
||||||
|
container_name: rezepte_app
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "8082:80"
|
||||||
|
volumes:
|
||||||
|
- .:/var/www/html
|
||||||
|
depends_on:
|
||||||
|
- mysql
|
||||||
|
networks:
|
||||||
|
- rezepte_network
|
||||||
|
environment:
|
||||||
|
DB_HOST: mysql
|
||||||
|
DB_NAME: rezepte_klaus
|
||||||
|
DB_USER: rezepte_user
|
||||||
|
DB_PASS: rezepte_pass
|
||||||
|
|
||||||
|
# phpMyAdmin
|
||||||
|
phpmyadmin:
|
||||||
|
image: phpmyadmin:latest
|
||||||
|
container_name: rezepte_phpmyadmin
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "8083:80"
|
||||||
|
environment:
|
||||||
|
PMA_HOST: mysql
|
||||||
|
PMA_USER: rezepte_user
|
||||||
|
PMA_PASSWORD: rezepte_pass
|
||||||
|
MYSQL_ROOT_PASSWORD: rezepte123
|
||||||
|
depends_on:
|
||||||
|
- mysql
|
||||||
|
networks:
|
||||||
|
- rezepte_network
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mysql_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
rezepte_network:
|
||||||
|
driver: bridge
|
||||||
207
index.php
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
<?php
|
||||||
|
if (session_status() === PHP_SESSION_NONE) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
require_once 'db_connection.php';
|
||||||
|
|
||||||
|
// Suchbegriff ermitteln
|
||||||
|
$search = isset($_GET['search']) ? trim($_GET['search']) : '';
|
||||||
|
|
||||||
|
// Erlaubte Sortierfelder
|
||||||
|
$sort_allowed = ['Rezeptnummer', 'Bezeichnung', 'Kategorie'];
|
||||||
|
|
||||||
|
// Sortierparameter aus URL oder Standard auf 'Rezeptnummer'
|
||||||
|
$sort = isset($_GET['sort']) && in_array($_GET['sort'], $sort_allowed) ? $_GET['sort'] : 'Rezeptnummer';
|
||||||
|
|
||||||
|
// SQL Query aufbauen
|
||||||
|
$sql = "SELECT id, Rezeptnummer, Bezeichnung, Kategorie FROM Rezepte";
|
||||||
|
$conditions = [];
|
||||||
|
$params = [];
|
||||||
|
$types = '';
|
||||||
|
|
||||||
|
// Suche in Bezeichnung, Beschreibung, Kategorie
|
||||||
|
if (!empty($search)) {
|
||||||
|
$search_term = "%" . $search . "%";
|
||||||
|
$conditions[] = "(Bezeichnung LIKE ? OR Beschreibung LIKE ? OR Kategorie LIKE ?)";
|
||||||
|
$params = array_merge($params, [$search_term, $search_term, $search_term]);
|
||||||
|
$types .= 'sss';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conditions)) {
|
||||||
|
$sql .= " WHERE " . implode(" AND ", $conditions);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sortierung: numerisch für Rezeptnummer, sonst alphabetisch
|
||||||
|
if ($sort === 'Rezeptnummer') {
|
||||||
|
$sql .= " ORDER BY CAST(`$sort` AS UNSIGNED) ASC";
|
||||||
|
} else {
|
||||||
|
$sql .= " ORDER BY `$sort` ASC";
|
||||||
|
}
|
||||||
|
|
||||||
|
$stmt = $link->prepare($sql);
|
||||||
|
if (!$stmt) {
|
||||||
|
die("Fehler bei der Vorbereitung der Abfrage: " . $link->error);
|
||||||
|
}
|
||||||
|
if (!empty($params)) {
|
||||||
|
$stmt->bind_param($types, ...$params);
|
||||||
|
}
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->get_result();
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Rezepte Übersicht</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: sans-serif;
|
||||||
|
background: #fcf6e3;
|
||||||
|
color: #5b4636;
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
.tabelle-container {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.table-aufgaben {
|
||||||
|
width: 900px;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-collapse: collapse;
|
||||||
|
table-layout: fixed;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.table-aufgaben th, .table-aufgaben td {
|
||||||
|
padding: 8px;
|
||||||
|
word-wrap: break-word;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
white-space: normal;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.table-aufgaben th:first-child, .table-aufgaben td:first-child {
|
||||||
|
width: 10%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.table-aufgaben th.rezeptnr, .table-aufgaben th.bezeichnung {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.table-aufgaben th.bezeichnung {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.table-aufgaben td.bezeichnung {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.table-aufgaben th a {
|
||||||
|
color: #8b5a2b;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.table-aufgaben td.bezeichnung a {
|
||||||
|
color: #c17e1b;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.table-aufgaben td.bezeichnung a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.table-aufgaben th.kategorie, .table-aufgaben td.kategorie {
|
||||||
|
width: 30%;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
tr {
|
||||||
|
background: #fbeee6;
|
||||||
|
}
|
||||||
|
.search-container {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.search-container form {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.search-container input[type="text"] {
|
||||||
|
padding: 8px;
|
||||||
|
font-size: 18px;
|
||||||
|
width: 15ch;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.search-container button {
|
||||||
|
padding: 8px 16px;
|
||||||
|
background: #bb7e19;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.search-container button:hover {
|
||||||
|
background: #a06d15;
|
||||||
|
}
|
||||||
|
.neu-container {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 22px;
|
||||||
|
}
|
||||||
|
.neu {
|
||||||
|
background: #bb7e19;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px 22px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 1.5em;
|
||||||
|
box-shadow: 1px 1px 4px #efd7b1;
|
||||||
|
}
|
||||||
|
.edit-button {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #2196F3;
|
||||||
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-family: Roboto, sans-serif;
|
||||||
|
font-size: 1em;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="top-bar">
|
||||||
|
<!-- <a href="Edit.php" class="neu">Neues Rezept</a>-->
|
||||||
|
<div class="search-container">
|
||||||
|
<form method="get" action="">
|
||||||
|
<input type="text" name="search" value="<?= htmlspecialchars($search) ?>" placeholder="Suche...">
|
||||||
|
<button type="submit" class="search-btn">Suche</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tabelle-container">
|
||||||
|
<table class="table-aufgaben">
|
||||||
|
<tr>
|
||||||
|
<th class="rezeptnr"><a href="?sort=Rezeptnummer&search=<?= htmlspecialchars($search) ?>">Rezeptnr.</a></th>
|
||||||
|
<th class="bezeichnung"><a href="?sort=Bezeichnung&search=<?= htmlspecialchars($search) ?>">Bezeichnung</a></th>
|
||||||
|
<th class="kategorie"><a href="?sort=Kategorie&search=<?= htmlspecialchars($search) ?>">Kategorie</a></th>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<?php while($row = $result->fetch_assoc()): ?>
|
||||||
|
<tr>
|
||||||
|
<td><?= htmlspecialchars($row['Rezeptnummer']) ?></td>
|
||||||
|
<td class="bezeichnung"><a href="main.php?id=<?= htmlspecialchars($row['id']) ?>"><?= htmlspecialchars($row['Bezeichnung']) ?></a></td>
|
||||||
|
<td class="kategorie"><?= htmlspecialchars($row['Kategorie']) ?></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<?php endwhile; ?>
|
||||||
|
</table>
|
||||||
|
<div class="neu-container">
|
||||||
|
<a href="Edit.php" class="neu">Neues Rezept</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
73
ingredients.sql
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.9.11
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: db5018537291.hosting-data.io
|
||||||
|
-- Erstellungszeit: 20. Sep 2025 um 09:44
|
||||||
|
-- Server-Version: 8.0.36
|
||||||
|
-- PHP-Version: 7.4.33
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET AUTOCOMMIT = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Datenbank: `dbs14717264`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Tabellenstruktur für Tabelle `ingredients`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `ingredients` (
|
||||||
|
`id` int NOT NULL,
|
||||||
|
`rezeptnr` varchar(20) COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
|
`ingr` text COLLATE utf8mb4_general_ci NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Daten für Tabelle `ingredients`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `ingredients` (`id`, `rezeptnr`, `ingr`) VALUES
|
||||||
|
(1, 'R001', '500 g Tomaten\r\n500 g grüne Bohnen\r\n400 g Kartoffel\r\neine mittelgroße Zwiebel\r\n4 EL Olivenöl\r\n2 EL Balsamico oder 1 EL Balsamico und eine Zitrone\r\n1/2 KL Salz\r\n1/2 KL Pfeffer\r\n1 Zitrone'),
|
||||||
|
(2, 'R002', '4 Stck dünne Schweineschnitzel\r\n40 g Butter\r\n2 EL Weissmehl\r\n0,15 l trockener Weisswein\r\n Salz, Pfeffer\r\n Eine Handvoll Rosmarin und Salbei'),
|
||||||
|
(3, 'R003', '500 g festkochende Kartoffeln\r\n4 Eier\r\neine Zwiebel\r\neine rote süße Paprika\r\n4-6 EL Olivenöl\r\n1/2 KL Salz\r\n1/2 KL Pfeffer'),
|
||||||
|
(5, 'R005', '1 Tasse Basmatireis\r\n1 große Karotte\r\n1 Zucchini\r\n1 mittelgroße Zwiebel\r\n1/2 Paprika\r\nTeil einer Lauchstange\r\n1 Knoblauchzehe\r\n6 EL Olivenöl / Sonnenblumenöl, halbe/halbe gemischt, oder nur Sonnenblumenöl\r\n200 gr Tofu\r\n0,05l Tamari, um den Tofu einzulegen\r\n30 gr Sesam, um den Tofu zu panieren\r\n2 EL Petersilie oder Koreander\r\nPfeffer und Salz'),
|
||||||
|
(69, 'R030', '160-200 gr Spaghetti\r\nca 12-20 Garnelen je nach Grösse\r\n600 gr Tomaten\r\n3 Knoblauchzehen\r\n1 grosse Zwiebel\r\n1 Bund Oregano\r\n2 Hände Petersilie\r\n2x0,4 l Olivenöl\r\n1 Chili scharf alt trocken\r\n Salz\r\n0,3l Weisswein trocken');
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes der exportierten Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes für die Tabelle `ingredients`
|
||||||
|
--
|
||||||
|
ALTER TABLE `ingredients`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `rezeptnr` (`rezeptnr`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für exportierte Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für Tabelle `ingredients`
|
||||||
|
--
|
||||||
|
ALTER TABLE `ingredients`
|
||||||
|
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=250;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
220
main.php
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
<?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']) : ' ' ?>
|
||||||
|
</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>
|
||||||
205
rezepte_bilder.sql
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.9.11
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: db5018537291.hosting-data.io
|
||||||
|
-- Erstellungszeit: 20. Sep 2025 um 09:44
|
||||||
|
-- Server-Version: 8.0.36
|
||||||
|
-- PHP-Version: 7.4.33
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET AUTOCOMMIT = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Datenbank: `dbs14717264`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Tabellenstruktur für Tabelle `rezepte_bilder`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `rezepte_bilder` (
|
||||||
|
`id` int NOT NULL,
|
||||||
|
`rezepte_id` int NOT NULL,
|
||||||
|
`datei_pfad` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Daten für Tabelle `rezepte_bilder`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `rezepte_bilder` (`id`, `rezepte_id`, `datei_pfad`) VALUES
|
||||||
|
(1, 6, 'uploads/R001/R001_0.jpg'),
|
||||||
|
(2, 6, 'uploads/R001/R001_1.jpg'),
|
||||||
|
(3, 6, 'uploads/R001/R001_2.jpg'),
|
||||||
|
(4, 11, 'uploads/R002/R002_0.jpg'),
|
||||||
|
(5, 11, 'uploads/R002/R002_1.jpg'),
|
||||||
|
(6, 11, 'uploads/R002/R002_2.jpg'),
|
||||||
|
(7, 11, 'uploads/R002/R002_3.jpg'),
|
||||||
|
(8, 7, 'uploads/R003/R003_0.jpg'),
|
||||||
|
(9, 7, 'uploads/R003/R003_1.jpg'),
|
||||||
|
(10, 7, 'uploads/R003/R003_2.jpg'),
|
||||||
|
(11, 8, 'uploads/R004/R004_0.jpg'),
|
||||||
|
(12, 8, 'uploads/R004/R004_1.jpg'),
|
||||||
|
(13, 8, 'uploads/R004/R004_2.jpg'),
|
||||||
|
(14, 8, 'uploads/R004/R004_3.jpg'),
|
||||||
|
(15, 8, 'uploads/R004/R004_4.jpg'),
|
||||||
|
(16, 8, 'uploads/R004/R004_5.jpg'),
|
||||||
|
(17, 12, 'uploads/R005/R005_0.jpg'),
|
||||||
|
(18, 9, 'uploads/R006/R006_0.jpg'),
|
||||||
|
(19, 9, 'uploads/R006/R006_1.jpg'),
|
||||||
|
(20, 9, 'uploads/R006/R006_2.jpg'),
|
||||||
|
(21, 9, 'uploads/R006/R006_3.jpg'),
|
||||||
|
(22, 9, 'uploads/R006/R006_4.jpg'),
|
||||||
|
(23, 10, 'uploads/R007/R007_0.jpg'),
|
||||||
|
(24, 10, 'uploads/R007/R007_1.jpg'),
|
||||||
|
(25, 10, 'uploads/R007/R007_2.jpg'),
|
||||||
|
(26, 10, 'uploads/R007/R007_3.jpg'),
|
||||||
|
(27, 10, 'uploads/R007/R007_4.jpg'),
|
||||||
|
(28, 10, 'uploads/R007/R007_5.jpg'),
|
||||||
|
(29, 13, 'uploads/R009/R009_0.jpg'),
|
||||||
|
(30, 13, 'uploads/R009/R009_1.jpg'),
|
||||||
|
(31, 13, 'uploads/R009/R009_2.jpg'),
|
||||||
|
(32, 13, 'uploads/R009/R009_3.jpg'),
|
||||||
|
(33, 13, 'uploads/R009/R009_4.jpg'),
|
||||||
|
(34, 5, 'uploads/R010/R010_0.jpg'),
|
||||||
|
(35, 5, 'uploads/R010/R010_1.jpg'),
|
||||||
|
(36, 5, 'uploads/R010/R010_2.jpg'),
|
||||||
|
(37, 5, 'uploads/R010/R010_3.jpg'),
|
||||||
|
(38, 4, 'uploads/R011/R011_0.jpg'),
|
||||||
|
(39, 14, 'uploads/R013/R013_0.jpg'),
|
||||||
|
(40, 14, 'uploads/R013/R013_1.jpg'),
|
||||||
|
(41, 14, 'uploads/R013/R013_2.jpg'),
|
||||||
|
(42, 14, 'uploads/R013/R013_3.jpg'),
|
||||||
|
(43, 14, 'uploads/R013/R013_4.jpg'),
|
||||||
|
(44, 16, 'uploads/R014/R014_0.jpg'),
|
||||||
|
(45, 16, 'uploads/R014/R014_1.jpg'),
|
||||||
|
(46, 16, 'uploads/R014/R014_2.jpg'),
|
||||||
|
(47, 16, 'uploads/R014/R014_3.jpg'),
|
||||||
|
(48, 16, 'uploads/R014/R014_4.jpg'),
|
||||||
|
(49, 15, 'uploads/R015/R015_0.jpg'),
|
||||||
|
(50, 15, 'uploads/R015/R015_1.jpg'),
|
||||||
|
(51, 15, 'uploads/R015/R015_2.jpg'),
|
||||||
|
(52, 15, 'uploads/R015/R015_3.jpg'),
|
||||||
|
(53, 15, 'uploads/R015/R015_4.jpg'),
|
||||||
|
(54, 17, 'uploads/R016/R016_0.jpg'),
|
||||||
|
(55, 17, 'uploads/R016/R016_1.jpg'),
|
||||||
|
(58, 17, 'uploads/R016/R016_4.jpg'),
|
||||||
|
(59, 18, 'uploads/R017/R017_0.jpg'),
|
||||||
|
(61, 19, 'uploads/R018/R018_0.jpg'),
|
||||||
|
(62, 19, 'uploads/R018/R018_1.jpg'),
|
||||||
|
(63, 19, 'uploads/R018/R018_2.jpg'),
|
||||||
|
(64, 19, 'uploads/R018/R018_3.jpg'),
|
||||||
|
(65, 20, 'uploads/R019/R019_0.jpg'),
|
||||||
|
(69, 21, 'uploads/R020/R020_0.jpg'),
|
||||||
|
(70, 21, 'uploads/R020/R020_1.jpg'),
|
||||||
|
(71, 21, 'uploads/R020/R020_2.jpg'),
|
||||||
|
(72, 22, 'uploads/R021/R021_0.jpg'),
|
||||||
|
(73, 22, 'uploads/R021/R021_1.jpg'),
|
||||||
|
(74, 22, 'uploads/R021/R021_2.jpg'),
|
||||||
|
(75, 22, 'uploads/R021/R021_3.jpg'),
|
||||||
|
(76, 23, 'uploads/R022/R022_0.jpg'),
|
||||||
|
(77, 23, 'uploads/R022/R022_1.jpg'),
|
||||||
|
(78, 23, 'uploads/R022/R022_2.jpg'),
|
||||||
|
(79, 23, 'uploads/R022/R022_3.jpg'),
|
||||||
|
(80, 24, 'uploads/R023/R023_0.jpg'),
|
||||||
|
(81, 25, 'uploads/R024/R024_1.jpg'),
|
||||||
|
(82, 26, 'uploads/R025/R025_0.jpg'),
|
||||||
|
(83, 27, 'uploads/R026/R026_0.jpg'),
|
||||||
|
(84, 28, 'uploads/R027/R027_0.jpg'),
|
||||||
|
(85, 28, 'uploads/R027/R027_1.jpg'),
|
||||||
|
(86, 29, 'uploads/R028/R028_0.jpg'),
|
||||||
|
(87, 29, 'uploads/R028/R028_1.jpg'),
|
||||||
|
(88, 29, 'uploads/R028/R028_2.jpg'),
|
||||||
|
(89, 30, 'uploads/R029/R029_0.jpg'),
|
||||||
|
(90, 31, 'uploads/R030/R030_0.jpg'),
|
||||||
|
(91, 31, 'uploads/R030/R030_1.jpg'),
|
||||||
|
(92, 31, 'uploads/R030/R030_2.jpg'),
|
||||||
|
(93, 31, 'uploads/R030/R030_3.jpg'),
|
||||||
|
(94, 32, 'uploads/R031/R031_0.jpg'),
|
||||||
|
(95, 32, 'uploads/R031/R031_1.jpg'),
|
||||||
|
(96, 32, 'uploads/R031/R031_2.jpg'),
|
||||||
|
(97, 32, 'uploads/R031/R031_3.jpg'),
|
||||||
|
(98, 32, 'uploads/R031/R031_4.jpg'),
|
||||||
|
(99, 33, 'uploads/R032/R032_0.jpg'),
|
||||||
|
(100, 34, 'uploads/R033/R033_0.jpg'),
|
||||||
|
(101, 34, 'uploads/R033/R033_1.jpg'),
|
||||||
|
(102, 34, 'uploads/R033/R033_2.jpg'),
|
||||||
|
(103, 34, 'uploads/R033/R033_3.jpg'),
|
||||||
|
(104, 34, 'uploads/R033/R033_4.jpg'),
|
||||||
|
(105, 35, 'uploads/R034/R034_0.jpg'),
|
||||||
|
(106, 35, 'uploads/R034/R034_1.jpg'),
|
||||||
|
(107, 35, 'uploads/R034/R034_2.jpg'),
|
||||||
|
(108, 35, 'uploads/R034/R034_3.jpg'),
|
||||||
|
(109, 35, 'uploads/R034/R034_4.jpg'),
|
||||||
|
(110, 36, 'uploads/R035/R035_0.jpg'),
|
||||||
|
(111, 36, 'uploads/R035/R035_1.jpg'),
|
||||||
|
(112, 36, 'uploads/R035/R035_2.jpg'),
|
||||||
|
(113, 36, 'uploads/R035/R035_3.jpg'),
|
||||||
|
(114, 36, 'uploads/R035/R035_4.jpg'),
|
||||||
|
(115, 36, 'uploads/R035/R035_5.jpg'),
|
||||||
|
(116, 37, 'uploads/R036/R036_0.jpg'),
|
||||||
|
(117, 37, 'uploads/R036/R036_1.jpg'),
|
||||||
|
(118, 37, 'uploads/R036/R036_2.jpg'),
|
||||||
|
(119, 37, 'uploads/R036/R036_3.jpg'),
|
||||||
|
(120, 37, 'uploads/R036/R036_4.jpg'),
|
||||||
|
(121, 40, 'uploads/R039/R039_0.jpg'),
|
||||||
|
(122, 41, 'uploads/R040/R040_0.jpg'),
|
||||||
|
(123, 41, 'uploads/R040/R040_1.jpg'),
|
||||||
|
(124, 41, 'uploads/R040/R040_2.jpg'),
|
||||||
|
(125, 41, 'uploads/R040/R040_3.jpg'),
|
||||||
|
(126, 41, 'uploads/R040/R040_4.jpg'),
|
||||||
|
(127, 42, 'uploads/R041/R041_0.jpg'),
|
||||||
|
(128, 42, 'uploads/R041/R041_1.jpg'),
|
||||||
|
(129, 43, 'uploads/R042/R042_0.jpg'),
|
||||||
|
(130, 44, 'uploads/R043/R043_0.jpg'),
|
||||||
|
(134, 50, 'uploads/R050/R050_0.jpg'),
|
||||||
|
(135, 50, 'uploads/R050/R050_1.jpg'),
|
||||||
|
(136, 51, 'uploads/R051/R051_0.jpg'),
|
||||||
|
(137, 12, 'uploads/R005/R005_2.jpg'),
|
||||||
|
(138, 12, 'uploads/R005/R005_3.jpg'),
|
||||||
|
(139, 12, 'uploads/R005/R005_4.jpg'),
|
||||||
|
(140, 12, 'uploads/R005/R005_5.jpg'),
|
||||||
|
(141, 12, 'uploads/R005/R005_6.jpg'),
|
||||||
|
(142, 12, 'uploads/R005/R005_7.jpg'),
|
||||||
|
(147, 20, 'uploads/R019/R019_1.jpg'),
|
||||||
|
(148, 20, 'uploads/R019/R019_2.jpg'),
|
||||||
|
(149, 20, 'uploads/R019/R019_3.jpg'),
|
||||||
|
(153, 18, 'uploads/R017/R017_1.jpg'),
|
||||||
|
(156, 52, 'uploads/R050/R050_2.jpg');
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes der exportierten Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes für die Tabelle `rezepte_bilder`
|
||||||
|
--
|
||||||
|
ALTER TABLE `rezepte_bilder`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD KEY `rezepte_id` (`rezepte_id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für exportierte Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für Tabelle `rezepte_bilder`
|
||||||
|
--
|
||||||
|
ALTER TABLE `rezepte_bilder`
|
||||||
|
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=157;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
444
sql-init/01-init.sql
Normal file
@@ -0,0 +1,444 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.9.11
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: db5018537291.hosting-data.io
|
||||||
|
-- Erstellungszeit: 20. Sep 2025 um 09:42
|
||||||
|
-- Server-Version: 8.0.36
|
||||||
|
-- PHP-Version: 7.4.33
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET AUTOCOMMIT = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Datenbank: `dbs14717264`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Tabellenstruktur für Tabelle `Rezepte`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `Rezepte` (
|
||||||
|
`id` int NOT NULL,
|
||||||
|
`Rezeptnummer` text COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
|
`Bezeichnung` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
|
`Beschreibung` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
||||||
|
`Kategorie` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||||
|
`datei_pfad` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||||
|
`Vorbereitung` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
||||||
|
`Anzahl` int NOT NULL,
|
||||||
|
`Zutaten` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
||||||
|
`Zubereitung` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
||||||
|
`Kommentar` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Daten für Tabelle `Rezepte`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `Rezepte` (`id`, `Rezeptnummer`, `Bezeichnung`, `Beschreibung`, `Kategorie`, `datei_pfad`, `Vorbereitung`, `Anzahl`, `Zutaten`, `Zubereitung`, `Kommentar`) VALUES
|
||||||
|
(6, '1', 'Warmer Bohnen-Kartoffel-Tomatensalat', 'Einfach und schnell - für einen warmen Sommerabend', 'Vegan', NULL, '', 2, '500 g Tomaten\r\n500 g grüne Bohnen\r\n400 g Kartoffel\r\neine mittelgroße Zwiebel\r\n4 EL Olivenöl\r\n2 EL Balsamico oder 1 EL Balsamico und eine Zitrone\r\n1/2 KL Salz\r\n1/2 KL Pfeffer\r\n1 Zitrone', '1 Alle Zutaten bereitstellen. Tomaten, Kartoffel und Bohnen waschen. Kartoffel als Pellkartoffel kochen. Bohnen brechen und zur Hälfte mit Wasser bedeckt kochen. \r\n\r\n2 Tomaten in Stücke und Zwiebel in feine Ringe schneiden. \r\n2 Tomaten und Zwiebel mit Zitrone, Balsamico, Salz, Pfeffer und Olivenöl anmachen. Die fertigen noch warmen Pellkartoffel würfeln und mit den garen warmen Bohnen zu den Tomaten geben und wie bei einem Salat unterheben.', 'Die Mengen müssen bei diesem Gericht nicht sehr genau sein. Wir mögen für dieses Gericht am liebsten die flachen Stangenbohnen und festkochende speckige Kartoffel. Die weißen Gemüsezwiebel haben einen feineren Geschmack als die gelben Zwiebel. Limonen schmecken oft feiner als Zitronen.'),
|
||||||
|
(7, '3', 'Tortilla', 'Alltagsessen in Mexiko', 'Vegetarisch', NULL, '', 2, '500 g festkochende Kartoffeln\r\n4 Eier\r\neine Zwiebel\r\neine rote süße Paprika\r\n4-6 EL Olivenöl\r\n1/2 KL Salz\r\n1/2 KL Pfeffer', '1 Alle Zutaten bereitstellen. Eine Antihaft-Pfanne ist nützlich, sonst muss man grosszügig Öl verwenden. Gemüse waschen, Kartoffel schälen. Kartoffel, Zwiebel und Paprika klein würfeln.\r\n\r\n2 Öl in die Pfanne, Zwiebel mit mittlerer Hitze glasig braten, Kartoffel hinzufügen, salzen und pfeffern und weiterbraten. Nach 10 Minuten Paprika hinzufügen und nochmals 5 Min weiterbraten. In dieser Zeit die Eier verkleppern. Vorsichtshalber eine Kartoffel probieren. Die Garzeit bei Kartoffel variiert. Wenn die Kartoffel fast gar ist können die Eier hinzugefügt werden. Weiterbraten bis das Ei von unten fest ist und die Tortilla sich in der Pfanne lockern lässt.\r\n\r\n3 Nervenstarke können mit einem Teller die Pfanne abdecken und die Tortilla mit Pfanne und Teller wenden, damit die Tortilla auf dem Teller zu liegen kommt. Die Pfanne wieder auf die Herdplatte stellen und die Tortilla mit der nicht fertig gegarten Seite in die Pfanne gleiten lassen und fertig braten.\r\nWer das Risiko nicht liebt, kann die Tortilla mit einem Deckel auf der Pfanne fertig braten, damit das Ei vollkommen stockt.', 'Wir essen gerne Tortilla zum späten Frühstück. Ein grüner Salat passt gut, muss aber nicht sein.'),
|
||||||
|
(11, '2', 'Scaloppine al vino bianco', 'Super schnell zubereitet und lecker', 'Fleisch', NULL, 'Zutaten bereitstellen', 2, '4', 'Alle Zutaten bereitstellen. Rosmarin und Salbei waschen, kleinschneiden.\r\nDie Schnitzel dünn klopfen, salzen und pfeffern und in dem Mehl wenden. Wenn die Schnitzel eine Zeit stehen zieht das Mehl oftmals ein. Dann nochmals in Mehl wenden.\r\n20 gr der Butter in der Pfanne erhitzen, damit sie schmilzt und Bläschen bildet, aber nicht brennt. Die abgetrocknete Rosmarin- und Salbei-Mischung zufügen und kurz braten, bis sich das Aroma der Kräuter entfaltet. Schnitzel hinzugeben und auf jeder Seite ganz kurz anbraten, nur bis sich auf dem Fleisch ein goldbraune Kruste gebildet hat (ca 1/2 Min pro Seite). Die restliche Butter kalt aus dem Kühschrank zufügen. Mit dem Weisswein ablöschen und rühren, damit die Butter mit dem Mehl und dem Wein bindet.', 'Bedenken: Die Mengen für Butter und Wein erhöhen sich nicht linear. Wenn man z.B. 4 Portionen kocht, nimmt man nicht die doppelte Menge an Wein und Butter, eher die halbe Menge dazu. Scaloppine machen wir gerne mit Schweineschnitzel, Rosmarin und Salbei. Dazu passen gut Bandnudel in Salbei mit Butter oder Öl sehr kurz gebraten. Eine zweite Variante sind Scaloppine vom Kalb dünn geschnitten mit fein geschnittener Petersilie. In diesem Fall wird die trockene Petersilie erst eine Minute vor dem Ende in die Sauce gerührt. Dazu machen wir Rösti oder Gemüse-Rösti.'),
|
||||||
|
(12, '5', 'Reis mit Gemüse und Tofu', 'Einfach und schnell zubereitet', 'Vegan', NULL, 'Tofu eine Stunde vor dem Kochen in Scheiben schneiden und in Tamari (Sojasauce) einlegen. Vorsicht, Tamari ist sehr salzig. Das muss beim Salzen des Essens berücksichtigt werden.', 2, '1', 'Zum Kochen alle Zutaten bereitstellen. Die Mengen muss man nicht ganz genau nehmen und wenn eines der Gemüse fehlt, schmeckt das auch lecker.\r\nDie Tasse Reis waschen und mit zwei Tassen Wasser und einem halben KL Salz in einem Topf bereitstellen. Karotte, Zucchini, Lauch, Petersilie, Paprika waschen und in lange schmale Streifen schneiden. Zwiebel halbieren und in halbe Ringe schneiden. Knoblauch in Stücke schneiden.\r\nReis zum Kochen bringen und bei kleiner Hitze köcheln lassen. Der Reis ist fertig, wenn das Wasser verkocht ist. Dann den Reis von der Platte nehmen und zugedeckt stehen lassen.\r\nIn einer Pfanne 3 EL des Öls erhitzen und zuerst die Zwiebel und den Knoblauch leicht braten, dann das Gemüse hinzufügen. Man kann das Gemüse entweder mit höherer Hitze unter ständigem Wenden garen oder bei kleiner Hitze mit dem Deckel auf der Pfanne garen. Um das Anbrennen zu verhindern, wenn man nicht dabei stehen möchte, kann man sicherheitshalber ca 0,1 Wasser in die Pfanne geben. Das Gemüse gart ca 10-12 Minuten. Es sollte gar, aber nicht zu weich sein.\r\nSesam in einen Teller schütten und die in Tamari eingelegten Tofuscheiben darin wenden. In einer zweiten Pfanne 3 EL des Öls erhitzen und den Tofu bei kleiner Hitze leicht bräunen. Überzähliger Sesam und Tamari kann mitgebraten werden. Nach einiger Zeit wenden.\r\nWenn alles fertig ist Gemüse und Reis sachte unterheben und mit dem Tofu toppen. Etwas fein geschnittene Petersilie darüber streuen.', 'Sowohl der Reis als auch das Gemüse und der Tofu sind nicht zeitkritisch. Wenn eines der beiden noch nicht fertig ist, kann das andere gegart warm gestellt werden. Reines Olivenöl passt nicht so gut zu diesem Gericht, deshalb mischen wir es mit Sonnenblumenöl. Fenchel passt auch sehr gut zu diesem Gericht. Wir nehmen gerne auch etwas frischen Ingwer in feine Scheiben geschnitten und Koriander dazu. Vorsicht, das Gemüse sollte nicht zu lange gegart werden, mit leichtem Knack schmeckt es am besten.'),
|
||||||
|
(31, '30', 'Pasta Gamberoni', 'Karins Rezept: Mit Oregano und Petersilie, ein scharfes Essen\r\nhttps://ricette.giallozafferano.it/Pasta-con-gamberoni.html\r\n', 'Fisch, Garnelen', NULL, 'Tomaten schneiden\r\nKnoblauch schneiden\r\nOregano und Peterling rüsten\r\nGarnelen vom Panzer und Köpfen befreien und Darm auswaschen', 2, '160', 'Zutaten bereitlegen. Garnelen aus Panzer und Köpfen entfernen. Die Panzer mit Zwiebel im Öl anbraten salzen und mit Wein aufgiessen. Das ergibt den Fischsud für die Pasta.\r\nParallel Nudel im Salzasser halbgar kochen Nudelwasser aufbewaren. Parallel Tomaten, Chili und Knoblauch braten, salzen und gegen Ende Oregano u Petersilie zufügen. Eventuell Nudelwasser zufügen, bis es eine gute Tomaten-Salsa ergibt.\r\nParallel Gamberoni auf beiden Seiten 1-2 Min anbraten und bei Seite stellen.\r\nNudel in die Tomatensauce giessen und mit dem Fischsud aufgiessen evtl durch Nudelwasser ergänzen und die Nudel auf diese Art al dente garen\r\nZum Schluss die Gamberoni zugeben.', 'Der Pfiff bei Pasta ist es, die Pasta in der Sauce fertig zu garen. Chili sind unterschiedlich scharf. Die Salsa soll scharf sein und es kann am Ende mit getrocknetem Chili abgeschmeckt werden.');
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes der exportierten Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes für die Tabelle `Rezepte`
|
||||||
|
--
|
||||||
|
ALTER TABLE `Rezepte`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für exportierte Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für Tabelle `Rezepte`
|
||||||
|
--
|
||||||
|
ALTER TABLE `Rezepte`
|
||||||
|
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=53;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.9.11
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: db5018537291.hosting-data.io
|
||||||
|
-- Erstellungszeit: 20. Sep 2025 um 09:44
|
||||||
|
-- Server-Version: 8.0.36
|
||||||
|
-- PHP-Version: 7.4.33
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET AUTOCOMMIT = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Datenbank: `dbs14717264`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Tabellenstruktur für Tabelle `ingredients`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `ingredients` (
|
||||||
|
`id` int NOT NULL,
|
||||||
|
`rezeptnr` varchar(20) COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
|
`ingr` text COLLATE utf8mb4_general_ci NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Daten für Tabelle `ingredients`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `ingredients` (`id`, `rezeptnr`, `ingr`) VALUES
|
||||||
|
(1, 'R001', '500 g Tomaten\r\n500 g grüne Bohnen\r\n400 g Kartoffel\r\neine mittelgroße Zwiebel\r\n4 EL Olivenöl\r\n2 EL Balsamico oder 1 EL Balsamico und eine Zitrone\r\n1/2 KL Salz\r\n1/2 KL Pfeffer\r\n1 Zitrone'),
|
||||||
|
(2, 'R002', '4 Stck dünne Schweineschnitzel\r\n40 g Butter\r\n2 EL Weissmehl\r\n0,15 l trockener Weisswein\r\n Salz, Pfeffer\r\n Eine Handvoll Rosmarin und Salbei'),
|
||||||
|
(3, 'R003', '500 g festkochende Kartoffeln\r\n4 Eier\r\neine Zwiebel\r\neine rote süße Paprika\r\n4-6 EL Olivenöl\r\n1/2 KL Salz\r\n1/2 KL Pfeffer'),
|
||||||
|
(5, 'R005', '1 Tasse Basmatireis\r\n1 große Karotte\r\n1 Zucchini\r\n1 mittelgroße Zwiebel\r\n1/2 Paprika\r\nTeil einer Lauchstange\r\n1 Knoblauchzehe\r\n6 EL Olivenöl / Sonnenblumenöl, halbe/halbe gemischt, oder nur Sonnenblumenöl\r\n200 gr Tofu\r\n0,05l Tamari, um den Tofu einzulegen\r\n30 gr Sesam, um den Tofu zu panieren\r\n2 EL Petersilie oder Koreander\r\nPfeffer und Salz'),
|
||||||
|
(69, 'R030', '160-200 gr Spaghetti\r\nca 12-20 Garnelen je nach Grösse\r\n600 gr Tomaten\r\n3 Knoblauchzehen\r\n1 grosse Zwiebel\r\n1 Bund Oregano\r\n2 Hände Petersilie\r\n2x0,4 l Olivenöl\r\n1 Chili scharf alt trocken\r\n Salz\r\n0,3l Weisswein trocken');
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes der exportierten Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes für die Tabelle `ingredients`
|
||||||
|
--
|
||||||
|
ALTER TABLE `ingredients`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `rezeptnr` (`rezeptnr`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für exportierte Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für Tabelle `ingredients`
|
||||||
|
--
|
||||||
|
ALTER TABLE `ingredients`
|
||||||
|
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=250;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.9.11
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: db5018537291.hosting-data.io
|
||||||
|
-- Erstellungszeit: 20. Sep 2025 um 09:44
|
||||||
|
-- Server-Version: 8.0.36
|
||||||
|
-- PHP-Version: 7.4.33
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET AUTOCOMMIT = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Datenbank: `dbs14717264`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Tabellenstruktur für Tabelle `Zubereitung`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `Zubereitung` (
|
||||||
|
`id` int NOT NULL,
|
||||||
|
`rezeptnummer` varchar(20) NOT NULL,
|
||||||
|
`schritt` int NOT NULL,
|
||||||
|
`text` varchar(1000) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Daten für Tabelle `Zubereitung`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `Zubereitung` (`id`, `rezeptnummer`, `schritt`, `text`) VALUES
|
||||||
|
(566, 'R001', 1, 'Alle Zutaten bereitstellen. Tomaten, Kartoffel und Bohnen waschen. Kartoffel als Pellkartoffel kochen. Bohnen brechen und zur Hälfte mit Wasser bedeckt kochen. Tomaten in Stücke und Zwiebel in feine Ringe schneiden. '),
|
||||||
|
(567, 'R001', 2, 'Tomaten und Zwiebel mit Zitrone, Balsamico, Salz, Pfeffer und Olivenöl anmachen. Die fertigen noch warmen Pellkartoffel würfeln und mit den garen warmen Bohnen zu den Tomaten geben und wie bei einem Salat unterheben. '),
|
||||||
|
(574, 'R003', 1, 'Alle Zutaten bereitstellen. Eine Antihaft-Pfanne ist nützlich, sonst muss man grosszügig Öl verwenden. Gemüse waschen, Kartoffel schälen. Kartoffel, Zwiebel und Paprika klein würfeln.'),
|
||||||
|
(575, 'R003', 2, 'Öl in die Pfanne, Zwiebel mit mittlerer Hitze glasig braten, Kartoffel hinzufügen, salzen und pfeffern und weiterbraten. Nach 10 Minuten Paprika hinzufügen und nochmals 5 Min weiterbraten. In dieser Zeit die Eier verkleppern. Vorsichtshalber eine Kartoffel probieren. Die Garzeit bei Kartoffel variiert. Wenn die Kartoffel fast gar ist können die Eier hinzugefügt werden. Weiterbraten bis das Ei von unten fest ist und die Tortilla sich in der Pfanne lockern lässt.'),
|
||||||
|
(576, 'R003', 3, 'Nervenstarke können mit einem Teller die Pfanne abdecken und die Tortilla mit Pfanne und Teller wenden, damit die Tortilla auf dem Teller zu liegen kommt. Die Pfanne wieder auf die Herdplatte stellen und die Tortilla mit der nicht fertig gegarten Seite in die Pfanne gleiten lassen und fertig braten.\r\nWer das Risiko nicht liebt, kann die Tortilla mit einem Deckel auf der Pfanne fertig braten, damit das Ei vollkommen stockt.'),
|
||||||
|
(1362, 'R030', 1, 'Zutaten bereitlegen. Garnelen aus Panzer und Köpfen entfernen. Die Panzer mit Zwiebel im Öl anbraten salzen und mit Wein aufgiessen. Das ergibt den Fischsud für die Pasta.'),
|
||||||
|
(1363, 'R030', 2, 'Parallel Nudel im Salzasser halbgar kochen Nudelwasser aufbewaren. Parallel Tomaten, Chili und Knoblauch braten, salzen und gegen Ende Oregano u Petersilie zufügen. Eventuell Nudelwasser zufügen, bis es eine gute Tomaten-Salsa ergibt.'),
|
||||||
|
(1364, 'R030', 3, 'Parallel Gamberoni auf beiden Seiten 1-2 Min anbraten und bei Seite stellen.'),
|
||||||
|
(1365, 'R030', 4, 'Nudel in die Tomatensauce giessen und mit dem Fischsud aufgiessen evtl durch Nudelwasser ergänzen und die Nudel auf diese Art al dente garen'),
|
||||||
|
(1366, 'R030', 5, 'Zum Schluss die Gamberoni zugeben.'),
|
||||||
|
(1373, 'R002', 1, 'Alle Zutaten bereitstellen. Rosmarin und Salbei waschen, kleinschneiden.'),
|
||||||
|
(1374, 'R002', 2, 'Die Schnitzel dünn klopfen, salzen und pfeffern und in dem Mehl wenden. Wenn die Schnitzel eine Zeit stehen zieht das Mehl oftmals ein. Dann nochmals in Mehl wenden.'),
|
||||||
|
(1375, 'R002', 3, '20 gr der Butter in der Pfanne erhitzen, damit sie schmilzt und Bläschen bildet, aber nicht brennt. Die abgetrocknete Rosmarin- und Salbei-Mischung zufügen und kurz braten, bis sich das Aroma der Kräuter entfaltet. Schnitzel hinzugeben und auf jeder Seite ganz kurz anbraten, nur bis sich auf dem Fleisch ein goldbraune Kruste gebildet hat (ca 1/2 Min pro Seite). Die restliche Butter kalt aus dem Kühschrank zufügen. Mit dem Weisswein ablöschen und rühren, damit die Butter mit dem Mehl und dem Wein bindet.'),
|
||||||
|
(1388, 'R005', 1, 'Zum Kochen alle Zutaten bereitstellen. Die Mengen muss man nicht ganz genau nehmen und wenn eines der Gemüse fehlt, schmeckt das auch lecker.'),
|
||||||
|
(1389, 'R005', 2, 'Die Tasse Reis waschen und mit zwei Tassen Wasser und einem halben KL Salz in einem Topf bereitstellen. Karotte, Zucchini, Lauch, Petersilie, Paprika waschen und in lange schmale Streifen schneiden. Zwiebel halbieren und in halbe Ringe schneiden. Knoblauch in Stücke schneiden.'),
|
||||||
|
(1390, 'R005', 3, 'Reis zum Kochen bringen und bei kleiner Hitze köcheln lassen. Der Reis ist fertig, wenn das Wasser verkocht ist. Dann den Reis von der Platte nehmen und zugedeckt stehen lassen.'),
|
||||||
|
(1391, 'R005', 4, 'In einer Pfanne 3 EL des Öls erhitzen und zuerst die Zwiebel und den Knoblauch leicht braten, dann das Gemüse hinzufügen. Man kann das Gemüse entweder mit höherer Hitze unter ständigem Wenden garen oder bei kleiner Hitze mit dem Deckel auf der Pfanne garen. Um das Anbrennen zu verhindern, wenn man nicht dabei stehen möchte, kann man sicherheitshalber ca 0,1 Wasser in die Pfanne geben. Das Gemüse gart ca 10-12 Minuten. Es sollte gar, aber nicht zu weich sein.'),
|
||||||
|
(1392, 'R005', 5, 'Sesam in einen Teller schütten und die in Tamari eingelegten Tofuscheiben darin wenden. In einer zweiten Pfanne 3 EL des Öls erhitzen und den Tofu bei kleiner Hitze leicht bräunen. Überzähliger Sesam und Tamari kann mitgebraten werden. Nach einiger Zeit wenden.'),
|
||||||
|
(1393, 'R005', 6, 'Wenn alles fertig ist Gemüse und Reis sachte unterheben und mit dem Tofu toppen. Etwas fein geschnittene Petersilie darüber streuen.');
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes der exportierten Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes für die Tabelle `Zubereitung`
|
||||||
|
--
|
||||||
|
ALTER TABLE `Zubereitung`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für exportierte Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für Tabelle `Zubereitung`
|
||||||
|
--
|
||||||
|
ALTER TABLE `Zubereitung`
|
||||||
|
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1394;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.9.11
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: db5018537291.hosting-data.io
|
||||||
|
-- Erstellungszeit: 20. Sep 2025 um 09:44
|
||||||
|
-- Server-Version: 8.0.36
|
||||||
|
-- PHP-Version: 7.4.33
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET AUTOCOMMIT = 0;
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Datenbank: `dbs14717264`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Tabellenstruktur für Tabelle `rezepte_bilder`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `rezepte_bilder` (
|
||||||
|
`id` int NOT NULL,
|
||||||
|
`rezepte_id` int NOT NULL,
|
||||||
|
`datei_pfad` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Daten für Tabelle `rezepte_bilder`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `rezepte_bilder` (`id`, `rezepte_id`, `datei_pfad`) VALUES
|
||||||
|
(1, 6, 'uploads/R001/R001_0.jpg'),
|
||||||
|
(2, 6, 'uploads/R001/R001_1.jpg'),
|
||||||
|
(3, 6, 'uploads/R001/R001_2.jpg'),
|
||||||
|
(4, 11, 'uploads/R002/R002_0.jpg'),
|
||||||
|
(5, 11, 'uploads/R002/R002_1.jpg'),
|
||||||
|
(6, 11, 'uploads/R002/R002_2.jpg'),
|
||||||
|
(7, 11, 'uploads/R002/R002_3.jpg'),
|
||||||
|
(8, 7, 'uploads/R003/R003_0.jpg'),
|
||||||
|
(9, 7, 'uploads/R003/R003_1.jpg'),
|
||||||
|
(10, 7, 'uploads/R003/R003_2.jpg'),
|
||||||
|
(11, 8, 'uploads/R004/R004_0.jpg'),
|
||||||
|
(12, 8, 'uploads/R004/R004_1.jpg'),
|
||||||
|
(13, 8, 'uploads/R004/R004_2.jpg'),
|
||||||
|
(14, 8, 'uploads/R004/R004_3.jpg'),
|
||||||
|
(15, 8, 'uploads/R004/R004_4.jpg'),
|
||||||
|
(16, 8, 'uploads/R004/R004_5.jpg'),
|
||||||
|
(17, 12, 'uploads/R005/R005_0.jpg'),
|
||||||
|
(18, 9, 'uploads/R006/R006_0.jpg'),
|
||||||
|
(19, 9, 'uploads/R006/R006_1.jpg'),
|
||||||
|
(20, 9, 'uploads/R006/R006_2.jpg'),
|
||||||
|
(21, 9, 'uploads/R006/R006_3.jpg'),
|
||||||
|
(22, 9, 'uploads/R006/R006_4.jpg'),
|
||||||
|
(23, 10, 'uploads/R007/R007_0.jpg'),
|
||||||
|
(24, 10, 'uploads/R007/R007_1.jpg'),
|
||||||
|
(25, 10, 'uploads/R007/R007_2.jpg'),
|
||||||
|
(26, 10, 'uploads/R007/R007_3.jpg'),
|
||||||
|
(27, 10, 'uploads/R007/R007_4.jpg'),
|
||||||
|
(28, 10, 'uploads/R007/R007_5.jpg'),
|
||||||
|
(29, 13, 'uploads/R009/R009_0.jpg'),
|
||||||
|
(30, 13, 'uploads/R009/R009_1.jpg'),
|
||||||
|
(31, 13, 'uploads/R009/R009_2.jpg'),
|
||||||
|
(32, 13, 'uploads/R009/R009_3.jpg'),
|
||||||
|
(33, 13, 'uploads/R009/R009_4.jpg'),
|
||||||
|
(34, 5, 'uploads/R010/R010_0.jpg'),
|
||||||
|
(35, 5, 'uploads/R010/R010_1.jpg'),
|
||||||
|
(36, 5, 'uploads/R010/R010_2.jpg'),
|
||||||
|
(37, 5, 'uploads/R010/R010_3.jpg'),
|
||||||
|
(38, 4, 'uploads/R011/R011_0.jpg'),
|
||||||
|
(39, 14, 'uploads/R013/R013_0.jpg'),
|
||||||
|
(40, 14, 'uploads/R013/R013_1.jpg'),
|
||||||
|
(41, 14, 'uploads/R013/R013_2.jpg'),
|
||||||
|
(42, 14, 'uploads/R013/R013_3.jpg'),
|
||||||
|
(43, 14, 'uploads/R013/R013_4.jpg'),
|
||||||
|
(44, 16, 'uploads/R014/R014_0.jpg'),
|
||||||
|
(45, 16, 'uploads/R014/R014_1.jpg'),
|
||||||
|
(46, 16, 'uploads/R014/R014_2.jpg'),
|
||||||
|
(47, 16, 'uploads/R014/R014_3.jpg'),
|
||||||
|
(48, 16, 'uploads/R014/R014_4.jpg'),
|
||||||
|
(49, 15, 'uploads/R015/R015_0.jpg'),
|
||||||
|
(50, 15, 'uploads/R015/R015_1.jpg'),
|
||||||
|
(51, 15, 'uploads/R015/R015_2.jpg'),
|
||||||
|
(52, 15, 'uploads/R015/R015_3.jpg'),
|
||||||
|
(53, 15, 'uploads/R015/R015_4.jpg'),
|
||||||
|
(54, 17, 'uploads/R016/R016_0.jpg'),
|
||||||
|
(55, 17, 'uploads/R016/R016_1.jpg'),
|
||||||
|
(58, 17, 'uploads/R016/R016_4.jpg'),
|
||||||
|
(59, 18, 'uploads/R017/R017_0.jpg'),
|
||||||
|
(61, 19, 'uploads/R018/R018_0.jpg'),
|
||||||
|
(62, 19, 'uploads/R018/R018_1.jpg'),
|
||||||
|
(63, 19, 'uploads/R018/R018_2.jpg'),
|
||||||
|
(64, 19, 'uploads/R018/R018_3.jpg'),
|
||||||
|
(65, 20, 'uploads/R019/R019_0.jpg'),
|
||||||
|
(69, 21, 'uploads/R020/R020_0.jpg'),
|
||||||
|
(70, 21, 'uploads/R020/R020_1.jpg'),
|
||||||
|
(71, 21, 'uploads/R020/R020_2.jpg'),
|
||||||
|
(72, 22, 'uploads/R021/R021_0.jpg'),
|
||||||
|
(73, 22, 'uploads/R021/R021_1.jpg'),
|
||||||
|
(74, 22, 'uploads/R021/R021_2.jpg'),
|
||||||
|
(75, 22, 'uploads/R021/R021_3.jpg'),
|
||||||
|
(76, 23, 'uploads/R022/R022_0.jpg'),
|
||||||
|
(77, 23, 'uploads/R022/R022_1.jpg'),
|
||||||
|
(78, 23, 'uploads/R022/R022_2.jpg'),
|
||||||
|
(79, 23, 'uploads/R022/R022_3.jpg'),
|
||||||
|
(80, 24, 'uploads/R023/R023_0.jpg'),
|
||||||
|
(81, 25, 'uploads/R024/R024_1.jpg'),
|
||||||
|
(82, 26, 'uploads/R025/R025_0.jpg'),
|
||||||
|
(83, 27, 'uploads/R026/R026_0.jpg'),
|
||||||
|
(84, 28, 'uploads/R027/R027_0.jpg'),
|
||||||
|
(85, 28, 'uploads/R027/R027_1.jpg'),
|
||||||
|
(86, 29, 'uploads/R028/R028_0.jpg'),
|
||||||
|
(87, 29, 'uploads/R028/R028_1.jpg'),
|
||||||
|
(88, 29, 'uploads/R028/R028_2.jpg'),
|
||||||
|
(89, 30, 'uploads/R029/R029_0.jpg'),
|
||||||
|
(90, 31, 'uploads/R030/R030_0.jpg'),
|
||||||
|
(91, 31, 'uploads/R030/R030_1.jpg'),
|
||||||
|
(92, 31, 'uploads/R030/R030_2.jpg'),
|
||||||
|
(93, 31, 'uploads/R030/R030_3.jpg'),
|
||||||
|
(94, 32, 'uploads/R031/R031_0.jpg'),
|
||||||
|
(95, 32, 'uploads/R031/R031_1.jpg'),
|
||||||
|
(96, 32, 'uploads/R031/R031_2.jpg'),
|
||||||
|
(97, 32, 'uploads/R031/R031_3.jpg'),
|
||||||
|
(98, 32, 'uploads/R031/R031_4.jpg'),
|
||||||
|
(99, 33, 'uploads/R032/R032_0.jpg'),
|
||||||
|
(100, 34, 'uploads/R033/R033_0.jpg'),
|
||||||
|
(101, 34, 'uploads/R033/R033_1.jpg'),
|
||||||
|
(102, 34, 'uploads/R033/R033_2.jpg'),
|
||||||
|
(103, 34, 'uploads/R033/R033_3.jpg'),
|
||||||
|
(104, 34, 'uploads/R033/R033_4.jpg'),
|
||||||
|
(105, 35, 'uploads/R034/R034_0.jpg'),
|
||||||
|
(106, 35, 'uploads/R034/R034_1.jpg'),
|
||||||
|
(107, 35, 'uploads/R034/R034_2.jpg'),
|
||||||
|
(108, 35, 'uploads/R034/R034_3.jpg'),
|
||||||
|
(109, 35, 'uploads/R034/R034_4.jpg'),
|
||||||
|
(110, 36, 'uploads/R035/R035_0.jpg'),
|
||||||
|
(111, 36, 'uploads/R035/R035_1.jpg'),
|
||||||
|
(112, 36, 'uploads/R035/R035_2.jpg'),
|
||||||
|
(113, 36, 'uploads/R035/R035_3.jpg'),
|
||||||
|
(114, 36, 'uploads/R035/R035_4.jpg'),
|
||||||
|
(115, 36, 'uploads/R035/R035_5.jpg'),
|
||||||
|
(116, 37, 'uploads/R036/R036_0.jpg'),
|
||||||
|
(117, 37, 'uploads/R036/R036_1.jpg'),
|
||||||
|
(118, 37, 'uploads/R036/R036_2.jpg'),
|
||||||
|
(119, 37, 'uploads/R036/R036_3.jpg'),
|
||||||
|
(120, 37, 'uploads/R036/R036_4.jpg'),
|
||||||
|
(121, 40, 'uploads/R039/R039_0.jpg'),
|
||||||
|
(122, 41, 'uploads/R040/R040_0.jpg'),
|
||||||
|
(123, 41, 'uploads/R040/R040_1.jpg'),
|
||||||
|
(124, 41, 'uploads/R040/R040_2.jpg'),
|
||||||
|
(125, 41, 'uploads/R040/R040_3.jpg'),
|
||||||
|
(126, 41, 'uploads/R040/R040_4.jpg'),
|
||||||
|
(127, 42, 'uploads/R041/R041_0.jpg'),
|
||||||
|
(128, 42, 'uploads/R041/R041_1.jpg'),
|
||||||
|
(129, 43, 'uploads/R042/R042_0.jpg'),
|
||||||
|
(130, 44, 'uploads/R043/R043_0.jpg'),
|
||||||
|
(134, 50, 'uploads/R050/R050_0.jpg'),
|
||||||
|
(135, 50, 'uploads/R050/R050_1.jpg'),
|
||||||
|
(136, 51, 'uploads/R051/R051_0.jpg'),
|
||||||
|
(137, 12, 'uploads/R005/R005_2.jpg'),
|
||||||
|
(138, 12, 'uploads/R005/R005_3.jpg'),
|
||||||
|
(139, 12, 'uploads/R005/R005_4.jpg'),
|
||||||
|
(140, 12, 'uploads/R005/R005_5.jpg'),
|
||||||
|
(141, 12, 'uploads/R005/R005_6.jpg'),
|
||||||
|
(142, 12, 'uploads/R005/R005_7.jpg'),
|
||||||
|
(147, 20, 'uploads/R019/R019_1.jpg'),
|
||||||
|
(148, 20, 'uploads/R019/R019_2.jpg'),
|
||||||
|
(149, 20, 'uploads/R019/R019_3.jpg'),
|
||||||
|
(153, 18, 'uploads/R017/R017_1.jpg'),
|
||||||
|
(156, 52, 'uploads/R050/R050_2.jpg');
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes der exportierten Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indizes für die Tabelle `rezepte_bilder`
|
||||||
|
--
|
||||||
|
ALTER TABLE `rezepte_bilder`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD KEY `rezepte_id` (`rezepte_id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für exportierte Tabellen
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT für Tabelle `rezepte_bilder`
|
||||||
|
--
|
||||||
|
ALTER TABLE `rezepte_bilder`
|
||||||
|
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=157;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
BIN
uploads/R001/R001_0.jpg
Normal file
|
After Width: | Height: | Size: 493 KiB |
BIN
uploads/R001/R001_1.jpg
Normal file
|
After Width: | Height: | Size: 524 KiB |
BIN
uploads/R001/R001_2.jpg
Normal file
|
After Width: | Height: | Size: 496 KiB |
44
uploads/R001/load_bilder.php
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'db_connection.php';
|
||||||
|
|
||||||
|
// 1. Alle bestehenden Einträge in rezepte_bilder löschen
|
||||||
|
$link->query("DELETE FROM rezepte_bilder");
|
||||||
|
$link->query("ALTER TABLE rezepte_bilder AUTO_INCREMENT = 1");
|
||||||
|
echo "Alle Einträge in rezepte_bilder wurden gelöscht.<br>";
|
||||||
|
|
||||||
|
// 2. Bilder für R001 bis R043 eintragen
|
||||||
|
for ($i = 1; $i <= 43; $i++) {
|
||||||
|
$r_nummer = 'R' . str_pad($i, 3, '0', STR_PAD_LEFT);
|
||||||
|
$upload_dir = 'uploads/' . $r_nummer . '/';
|
||||||
|
|
||||||
|
if (file_exists($upload_dir)) {
|
||||||
|
$files = glob($upload_dir . $r_nummer . '_*.jpg');
|
||||||
|
if (!empty($files)) {
|
||||||
|
// Hole die korrekte rezepte_id (id aus Rezepte für Rezeptnummer = $i)
|
||||||
|
$sql_rezept = "SELECT id FROM Rezepte WHERE Rezeptnummer = ?";
|
||||||
|
$stmt_rezept = $link->prepare($sql_rezept);
|
||||||
|
$stmt_rezept->bind_param('i', $i);
|
||||||
|
$stmt_rezept->execute();
|
||||||
|
$result_rezept = $stmt_rezept->get_result();
|
||||||
|
|
||||||
|
if ($result_rezept->num_rows > 0) {
|
||||||
|
$row_rezept = $result_rezept->fetch_assoc();
|
||||||
|
$rezepte_id = $row_rezept['id']; // Korrekte id aus Rezepte (z. B. 6 für Rezeptnummer 1)
|
||||||
|
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$file_name = basename($file);
|
||||||
|
$datei_pfad = 'uploads/' . $r_nummer . '/' . $file_name;
|
||||||
|
|
||||||
|
$insert_sql = "INSERT INTO rezepte_bilder (rezepte_id, datei_pfad) VALUES (?, ?)";
|
||||||
|
$insert_stmt = $link->prepare($insert_sql);
|
||||||
|
$insert_stmt->bind_param('is', $rezepte_id, $datei_pfad);
|
||||||
|
$insert_stmt->execute();
|
||||||
|
echo "Eintrag: rezepte_id = $rezepte_id, datei_pfad = $datei_pfad<br>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Fertig!";
|
||||||
|
?>
|
||||||
BIN
uploads/R002/R002_0.jpg
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
uploads/R002/R002_1.jpg
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
uploads/R002/R002_2.jpg
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
uploads/R002/R002_3.jpg
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
uploads/R003/R003_0.jpg
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
uploads/R003/R003_1.jpg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
uploads/R003/R003_2.jpg
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
uploads/R005/R005_0.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
uploads/R005/R005_1.jpg
Normal file
|
After Width: | Height: | Size: 155 KiB |
BIN
uploads/R005/R005_2.jpg
Normal file
|
After Width: | Height: | Size: 137 KiB |
BIN
uploads/R005/R005_3.jpg
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
uploads/R005/R005_4.jpg
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
uploads/R005/R005_5.jpg
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
uploads/R005/R005_6.jpg
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
uploads/R005/R005_7.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
uploads/R030/R030_0.jpg
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
uploads/R030/R030_1.jpg
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
uploads/R030/R030_2.jpg
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
BIN
uploads/R030/R030_3.jpg
Normal file
|
After Width: | Height: | Size: 2.9 MiB |