Bootstrap-Website komplett: Parallax Hero, Logo, PHPMailer, responsive Banner-Bilder und neue Baumaschinen (CAT 906, Volvo ZL 302)

This commit is contained in:
2026-02-11 17:54:01 +01:00
parent 1bf30b23a3
commit a5dce8673c
43 changed files with 11484 additions and 0 deletions

10
.gitignore vendored Normal file
View File

@@ -0,0 +1,10 @@
# Ignoriere Editor/System-Dateien
.DS_Store
Thumbs.db
*.swp
.vscode/
.idea/
# Backup-Dateien
*.bak
*~

18
.htaccess Normal file
View File

@@ -0,0 +1,18 @@
# Schutz der Konfigurationsdatei
<Files "config.php">
Order allow,deny
Deny from all
</Files>
# Schutz der PHPMailer-Dateien (nur über PHP-Includes erreichbar)
<FilesMatch "^(PHPMailer|SMTP|Exception)\.php$">
Order allow,deny
Deny from all
</FilesMatch>
# Optional: Schutz vor Directory Browsing
Options -Indexes
# Optional: PHP Fehler nicht anzeigen (für Produktivbetrieb)
php_flag display_errors Off
php_flag log_errors On

257
PHPMAILER-ANLEITUNG.md Normal file
View File

@@ -0,0 +1,257 @@
# 📧 PHPMailer Einrichtungsanleitung
Diese Anleitung erklärt, wie Sie das Kontaktformular mit PHPMailer auf Ihrem Webserver einrichten.
## ✅ Was wurde installiert
```
webseite/
├── config.php # E-Mail-Konfiguration (WICHTIG: Anpassen!)
├── send-mail.php # Mail-Versand-Script
├── .htaccess # Schutz der Konfiguration
└── phpmailer/ # PHPMailer Bibliothek
├── PHPMailer.php
├── SMTP.php
└── Exception.php
```
## 🔧 Schritt 1: Konfiguration anpassen
Öffnen Sie `config.php` und passen Sie folgende Einstellungen an:
### E-Mail Grundeinstellungen
```php
define('MAIL_TO', 'baumer@traidendorf.de'); // IHR POSTFACH
define('MAIL_FROM', 'noreply@ihre-domain.de'); // Absender-Adresse
```
### Option A: Standard PHP mail() Funktion (Einfachste Lösung)
Die meisten Webhosting-Anbieter unterstützen die `mail()` Funktion direkt:
```php
define('USE_SMTP', false); // So belassen
```
**Vorteile:**
- ✅ Keine zusätzliche Konfiguration nötig
- ✅ Funktioniert bei den meisten Hostern out-of-the-box
**Nachteile:**
- ⚠️ E-Mails landen manchmal im Spam
- ⚠️ Nicht alle Hoster erlauben mail()
**Geeignet für:** Strato, 1&1, All-Inkl, Host Europe, etc.
### Option B: SMTP (Zuverlässigste Lösung)
Für professionellen Versand mit SMTP:
```php
define('USE_SMTP', true);
define('SMTP_HOST', 'smtp.ihre-domain.de'); // SMTP-Server
define('SMTP_PORT', 587); // 587 für TLS, 465 für SSL
define('SMTP_SECURE', 'tls'); // 'tls' oder 'ssl'
define('SMTP_USERNAME', 'ihre-email@ihre-domain.de');
define('SMTP_PASSWORD', 'ihr-sicheres-passwort');
```
**Vorteile:**
- ✅ Zuverlässigster Versand
- ✅ Bessere Spam-Bewertung
- ✅ Authentifizierung
**SMTP-Einstellungen für beliebte Hoster:**
#### Strato
```php
define('SMTP_HOST', 'smtp.strato.de');
define('SMTP_PORT', 587);
define('SMTP_SECURE', 'tls');
define('SMTP_USERNAME', 'ihre-email@ihre-domain.de');
```
#### 1&1 / IONOS
```php
define('SMTP_HOST', 'smtp.ionos.de');
define('SMTP_PORT', 587);
define('SMTP_SECURE', 'tls');
define('SMTP_USERNAME', 'ihre-email@ihre-domain.de');
```
#### All-Inkl
```php
define('SMTP_HOST', 'ihr-servername.kasserver.com');
define('SMTP_PORT', 587);
define('SMTP_SECURE', 'tls');
define('SMTP_USERNAME', 'ihre-email@ihre-domain.de');
```
#### Gmail (für Tests)
```php
define('SMTP_HOST', 'smtp.gmail.com');
define('SMTP_PORT', 587);
define('SMTP_SECURE', 'tls');
define('SMTP_USERNAME', 'ihre-gmail@gmail.com');
define('SMTP_PASSWORD', 'app-spezifisches-passwort'); // Nicht Ihr normales Passwort!
```
⚠️ Bei Gmail: [App-spezifisches Passwort erstellen](https://support.google.com/accounts/answer/185833)
## 🚀 Schritt 2: Auf Webserver hochladen
Laden Sie alle Dateien per FTP auf Ihren Webserver:
```
/public_html/ (oder /htdocs/, /www/)
├── index.html
├── kontakt.html
├── config.php ← WICHTIG: Passwort hier drin!
├── send-mail.php
├── .htaccess
├── phpmailer/
├── css/
├── js/
└── ...
```
## 🧪 Schritt 3: Testen
1. Öffnen Sie Ihre Website im Browser
2. Gehen Sie zur Kontaktseite
3. Füllen Sie das Formular aus
4. Senden Sie eine Test-Nachricht
5. Prüfen Sie Ihr Postfach (auch Spam-Ordner!)
### Fehlerbehebung
#### E-Mail kommt nicht an
**Lösung 1: Logfile prüfen**
- Schauen Sie im `error_log` Ihres Webservers
- Meist zu finden im Root-Verzeichnis oder `/logs/`
**Lösung 2: SMTP statt mail() verwenden**
- Setzen Sie `USE_SMTP` auf `true` in der `config.php`
- Konfigurieren Sie die SMTP-Einstellungen
**Lösung 3: PHP mail() aktivieren**
- Kontaktieren Sie Ihren Hoster
- Fragen Sie, ob die `mail()` Funktion aktiviert ist
#### E-Mails landen im Spam
**Lösung:**
- Verwenden Sie SMTP statt mail()
- Stellen Sie sicher, dass `MAIL_FROM` eine echte E-Mail Ihrer Domain ist
- Richten Sie SPF/DKIM Records ein (bei Ihrem Hoster)
#### Fehler "Could not instantiate mail function"
**Lösung:**
- Die PHP `mail()` Funktion ist deaktiviert
- Wechseln Sie zu SMTP (`USE_SMTP = true`)
#### Fehler "SMTP connect() failed"
**Lösung:**
- SMTP-Host falsch → Prüfen Sie bei Ihrem Hoster
- Port falsch → Meist 587 (TLS) oder 465 (SSL)
- Benutzername/Passwort falsch
- Firewall blockiert → Kontaktieren Sie Ihren Hoster
## 🔒 Sicherheit
### WICHTIG: Schützen Sie config.php!
Die `.htaccess` Datei schützt bereits Ihre `config.php`. Überprüfen Sie:
```bash
# Test: Diese URL sollte NICHT funktionieren:
https://ihre-domain.de/config.php
```
Sie sollten einen "403 Forbidden" Fehler sehen.
### Weitere Sicherheitsmaßnahmen
1. **Sichere Passwörter verwenden**
- Mindestens 16 Zeichen
- Groß-/Kleinbuchstaben, Zahlen, Sonderzeichen
2. **SSL/HTTPS verwenden**
- Ihr Hoster sollte ein kostenloses Let's Encrypt Zertifikat anbieten
3. **Rate Limiting ist bereits aktiv**
- Maximal 1 E-Mail pro Minute pro IP-Adresse
- Schutz gegen Spam-Bots
4. **Honeypot ist bereits integriert**
- Verstecktes Feld zum Spam-Schutz
## 📊 Features des Kontaktformulars
**Spam-Schutz**
- Honeypot-Feld (verstecktes Feld für Bots)
- Rate Limiting (max. 1 Mail pro Minute)
- Eingabe-Validierung
**Benutzerfreundlich**
- Erfolgs-/Fehlermeldungen
- Formular-Vorausfüllung (Maschine aus Link)
- Loading-Animation beim Absenden
**Professionell**
- HTML-E-Mails mit Styling
- Plain-Text Fallback
- IP-Adresse und Zeitstempel in E-Mail
**Datenschutz**
- Keine Daten werden extern gespeichert
- Alles auf Ihrem Server
- DSGVO-konform
## 🎯 Anpassungen
### E-Mail-Design ändern
Bearbeiten Sie in `send-mail.php` den HTML-Code ab Zeile ~95:
```php
$mailBody = '
<html>
<!-- Hier können Sie das Design anpassen -->
</html>
';
```
### Weiterleitungs-URLs ändern
In `config.php`:
```php
define('SUCCESS_URL', 'kontakt.html?success=1');
define('ERROR_URL', 'kontakt.html?error=1');
```
### Zusätzliche Formularfelder
1. Feld in `kontakt.html` hinzufügen
2. Feld in `send-mail.php` validieren und einbinden
3. E-Mail-Template in `send-mail.php` anpassen
## 📞 Support
**Bei technischen Problemen:**
1. Prüfen Sie das `error_log` auf Ihrem Server
2. Kontaktieren Sie Ihren Webhoster für SMTP-Einstellungen
3. Testen Sie zunächst mit `USE_SMTP = false` (mail() Funktion)
**Hoster-Support fragen nach:**
- "PHP mail() Funktion aktiviert?"
- "SMTP-Server Zugangsdaten für E-Mail-Versand"
- "Welcher Port für SMTP? (587 oder 465)"
---
**Viel Erfolg! 🚀**

102
README.md
View File

@@ -0,0 +1,102 @@
# 🚜 Baumer Maschinenverleih - Bootstrap Website
Moderne, responsive Website für Andreas Baumer Maschinenverleih mit Bootstrap 5.
## ✨ Features
-**Keine Build-Tools** - Einfach per FTP hochladen
-**Komplett offline** - Bootstrap lokal eingebunden
-**PHPMailer** - Professionelles Kontaktformular ohne externe Dienste
-**Bootstrap 5** - Modernes, responsives Design
-**JSON-basiert** - Maschinen in `data/maschinen.json`
-**Spam-Schutz** - Honeypot & Rate Limiting integriert
-**Komplett responsive** - Funktioniert auf allen Geräten
## 📁 Projektstruktur
```
webseite/
├── index.html # Startseite
├── kontakt.html # Kontaktseite mit PHPMailer
├── impressum.html # Impressum
├── datenschutz.html # Datenschutz
├── config.php # E-Mail Konfiguration (ANPASSEN!)
├── send-mail.php # Mail-Versand-Script
├── .htaccess # Sicherheit & Schutz
├── css/
│ ├── bootstrap.min.css # Bootstrap CSS (lokal)
│ ├── bootstrap-icons.css # Bootstrap Icons (lokal)
│ └── style.css # Custom Styling
├── js/
│ ├── bootstrap.bundle.min.js # Bootstrap JS (lokal)
│ └── main.js # Custom JavaScript
├── phpmailer/ # PHPMailer Bibliothek
│ ├── PHPMailer.php
│ ├── SMTP.php
│ └── Exception.php
├── fonts/
**⚠️ Wichtig:** Das Kontaktformular funktioniert nur auf einem Webserver mit PHP!
## 📧 Kontaktformular einrichten
Das Kontaktformular verwendet PHPMailer und ist bereits vollständig integriert.
**Schnellstart:**
1. Öffnen Sie `config.php`
2. Tragen Sie Ihre E-Mail ein:
```php
define('MAIL_TO', 'baumer@traidendorf.de');
```
3. Fertig! (Bei den meisten Hostern funktioniert es sofort)
**Ausführliche Anleitung:** Siehe [PHPMAILER-ANLEITUNG.md](PHPMAILER-ANLEITUNG.md)
### SMTP konfigurieren (optional, für bessere Zustellbarkeit)
Falls E-Mails nicht ankommen, SMTP in `config.php` aktivieren:
```php
define('USE_SMTP', true);
define('SMTP_HOST', 'smtp.ihre-domain.de');
define('SMTP_USERNAME', 'ihre-email@ihre-domain.de');
define('SMTP_PASSWORD', 'ihr-passwort');
``` # Icon Font (lokal)
│ └── bootstrap-icons.woff # Icon Font (lokal)
├── data/
│ └── maschinen.json # Alle Maschinen (editierbar!)
└── images/ # Bilder (optional)
```
## 🚀 Website öffnen
Einfach `index.html` im Browser öffnen oder per FTP auf Webserver hochladen.
## ✏️ Neue Maschine hinzufügen
In `data/maschinen.json` einen neuen Eintrag hinzufügen:
```json
{
"id": "neue-maschine",
"title": "Neue Maschine",
"preis": "50€/Tag",
"beschreibung": "Beschreibung...",
"besonderheiten": ["Feature 1", "Feature 2"]
}
```
## 📧 Kontaktformular
In `kontakt.html` Formspree-ID eintragen:
```html
<form action="https://formspree.io/f/YOUR_FORM_ID" method="POST">
```
Mehr Details und Anleitungen in der ausführlichen Dokumentation oben! 📚

38
config.php Normal file
View File

@@ -0,0 +1,38 @@
<?php
/**
* E-Mail Konfiguration für Kontaktformular
*
* WICHTIG: Diese Datei enthält sensible Daten!
* Bitte nicht öffentlich zugänglich machen (.htaccess verwenden)
*/
// E-Mail Einstellungen
define('MAIL_TO', 'baumer@traidendorf.de'); // Empfänger-E-Mail
define('MAIL_FROM', 'noreply@baumer.traidendorf.de'); // Absender-E-Mail
define('MAIL_FROM_NAME', 'Kontaktformular Baumer');
// SMTP Einstellungen (für sicheres Versenden)
// Option 1: SMTP verwenden (empfohlen für zuverlässiges Versenden)
define('USE_SMTP', false); // Auf true setzen, wenn SMTP verwendet werden soll
define('SMTP_HOST', 'smtp.example.com'); // z.B. smtp.strato.de, smtp.1und1.de
define('SMTP_PORT', 587); // 587 für TLS, 465 für SSL
define('SMTP_SECURE', 'tls'); // 'tls' oder 'ssl'
define('SMTP_USERNAME', 'ihre-email@example.com');
define('SMTP_PASSWORD', 'ihr-passwort');
// Option 2: Standard PHP mail() Funktion
// Wenn USE_SMTP = false, wird die normale mail() Funktion verwendet
// Dies funktioniert auf den meisten Webservern, ist aber weniger zuverlässig
// Erfolgs-URL (wohin nach erfolgreichem Absenden geleitet wird)
define('SUCCESS_URL', 'kontakt.html?success=1');
// Fehler-URL
define('ERROR_URL', 'kontakt.html?error=1');
// Spam-Schutz: Honeypot-Feld Name (sollte leer bleiben)
define('HONEYPOT_FIELD', 'website');
// Rate Limiting: Max. Anfragen pro IP in Sekunden
define('RATE_LIMIT_SECONDS', 60); // 1 Minute zwischen Anfragen
?>

2078
css/bootstrap-icons.css vendored Normal file

File diff suppressed because it is too large Load Diff

6
css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

262
css/style.css Normal file
View File

@@ -0,0 +1,262 @@
:root {
--primary-color: #2c5f2d;
--secondary-color: #97bc62;
--accent-color: #ff8c00;
}
/* Custom Bootstrap Theme Colors */
.bg-primary {
background-color: var(--primary-color) !important;
}
.btn-primary {
background-color: var(--primary-color);
border-color: var(--primary-color);
}
.btn-primary:hover {
background-color: #234a24;
border-color: #234a24;
}
.text-primary {
color: var(--primary-color) !important;
}
.btn-outline-primary {
color: var(--primary-color);
border-color: var(--primary-color);
}
.btn-outline-primary:hover {
background-color: var(--primary-color);
border-color: var(--primary-color);
}
/* Header Styling */
.navbar-brand {
font-size: 1.5rem;
}
.navbar-logo {
height: 50px;
width: auto;
max-width: 200px;
object-fit: contain;
}
.contact-bar a:hover {
color: var(--primary-color) !important;
}
/* Hero Section mit Parallax */
.hero-section {
position: relative;
min-height: 500px;
background-image: url('../images/banner_home-sm.jpg');
background-attachment: fixed;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
display: flex;
align-items: center;
}
/* Responsive Banner Bilder */
@media (min-width: 768px) {
.hero-section {
background-image: url('../images/banner_home-md.jpg');
}
}
@media (min-width: 1200px) {
.hero-section {
background-image: url('../images/banner_home-lg.jpg');
}
}
@media (min-width: 1920px) {
.hero-section {
background-image: url('../images/banner_home-xl.jpg');
}
}
/* Parallax auf mobilen Geräten deaktivieren für bessere Performance */
@media (max-width: 768px) {
.hero-section {
background-attachment: scroll;
min-height: 400px;
}
}
.hero-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(44, 95, 45, 0.7);
z-index: 1;
}
.hero-section .container {
z-index: 2;
}
/* Card Styling */
.hover-card {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.hover-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15) !important;
}
.card-header {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
}
.preis-box {
padding: 1rem;
background-color: #f8f9fa;
border-radius: 0.5rem;
margin-top: 1rem;
}
/* Besonderheiten Liste */
.list-unstyled li {
padding: 0.3rem 0;
}
/* Specs Badges */
.specs .badge {
font-size: 0.85rem;
font-weight: normal;
padding: 0.5rem 0.75rem;
}
/* CTA Section */
.cta-section {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
}
/* Footer */
footer h5 {
font-weight: 600;
}
footer a:hover {
color: var(--secondary-color) !important;
}
/* Kontaktformular */
.form-control:focus,
.form-select:focus {
border-color: var(--primary-color);
box-shadow: 0 0 0 0.25rem rgba(44, 95, 45, 0.25);
}
.contact-info-box {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
color: white;
padding: 2rem;
border-radius: 0.5rem;
height: 100%;
}
.contact-info-box h4 {
margin-bottom: 1.5rem;
}
.contact-info-box .info-item {
margin-bottom: 1.5rem;
}
.contact-info-box .info-item i {
font-size: 1.5rem;
margin-right: 1rem;
}
.contact-info-box a {
color: white;
text-decoration: none;
}
.contact-info-box a:hover {
text-decoration: underline;
}
/* Impressum / Datenschutz */
.content-section {
max-width: 900px;
}
.content-section h2 {
color: var(--primary-color);
margin-top: 2rem;
margin-bottom: 1rem;
font-size: 1.5rem;
}
.content-section h3 {
color: var(--primary-color);
margin-top: 1.5rem;
margin-bottom: 0.75rem;
font-size: 1.25rem;
}
.content-section h4 {
color: #333;
margin-top: 1rem;
margin-bottom: 0.5rem;
font-size: 1.1rem;
}
/* Responsive */
@media (max-width: 768px) {
.navbar-brand {
font-size: 1.2rem;
}
.hero-section h1 {
font-size: 2rem;
}
.contact-bar {
font-size: 0.9rem;
}
}
/* Scroll to Top Button (optional) */
.scroll-to-top {
position: fixed;
bottom: 2rem;
right: 2rem;
display: none;
width: 3rem;
height: 3rem;
background-color: var(--primary-color);
color: white;
border-radius: 50%;
text-align: center;
line-height: 3rem;
cursor: pointer;
z-index: 1000;
transition: all 0.3s ease;
}
.scroll-to-top:hover {
background-color: var(--secondary-color);
transform: translateY(-5px);
}
/* Loading Animation (optional) */
.loading {
text-align: center;
padding: 3rem;
}
.spinner-border {
color: var(--primary-color);
}

177
data/maschinen.json Normal file
View File

@@ -0,0 +1,177 @@
{
"baumaschinen": [
{
"id": "radlader-cat-906",
"title": "CAT 906 Radlader",
"preis": "250€/Tag",
"preisMehrtagig": "ab dem 2. Tag 220€/Tag",
"gewicht": "5.7 Tonnen",
"beschreibung": "Leistungsstarker CAT 906 Kompaktradlader für vielseitige Erdbewegungen und Transportarbeiten. Ideal für Baustellen, Landwirtschaft und Garten- und Landschaftsbau. Kombiniert hohe Leistung mit kompakten Abmessungen.",
"besonderheiten": [
"kompakte Bauweise",
"hohe Kipplast",
"wendiger Allrounder"
],
"lieferung": "Der Lader wird geliefert, Kosten für Lieferung auf Anfrage",
"image": "images/lader_5-7t.jpg"
},
{
"id": "radlader-volvo-zl302",
"title": "Volvo ZL 302 C Pro Radlader",
"preis": "150€/Tag",
"preisMehrtagig": "ab dem 2. Tag 130€/Tag",
"gewicht": "ca. 3 Tonnen",
"beschreibung": "Kompakter Volvo ZL 302 C Pro Radlader für vielseitige Lade- und Transportarbeiten. Ideal geeignet für Baustellen, Landwirtschaft und kommunale Einsätze. Robust, zuverlässig und effizient.",
"besonderheiten": [
"kompakte Abmessungen",
"hohe Wendigkeit",
"bewährte Volvo-Qualität"
],
"lieferung": "Der Lader wird geliefert, Kosten für Lieferung auf Anfrage",
"image": "images/lader.jpg"
},
{
"id": "minibagger-2-0t",
"title": "Minibagger 2.0 Tonnen",
"preis": "135€/Tag",
"preisMehrtagig": "ab dem 2. Tag 120€/Tag",
"gewicht": "2.0 Tonnen",
"beschreibung": "Unser leistungsstarker Minibagger 2.0 Tonnen ist ideal für präzise Erdarbeiten auf engem Raum. Mit dem Powertilt-System können Sie den Löffel bis zu 180 Grad schwenken - perfekt für schwer zugängliche Stellen.",
"besonderheiten": [
"mit Powertilt ausgestattet",
"Löffel bis 180 Grad schwenkbar",
"inkl. Löffelpaket"
],
"lieferung": "Minibagger wird geliefert, Kosten für Lieferung auf Anfrage",
"image": "images/minibagger-2t.jpg"
},
{
"id": "minibagger-1-8t",
"title": "Minibagger 1.8 Tonnen",
"preis": "110€/Tag",
"preisMehrtagig": "ab dem 2. Tag 100€/Tag",
"gewicht": "1.8 Tonnen",
"beschreibung": "Der kompakte Minibagger 1.8 Tonnen ist perfekt für kleinere Bauprojekte und enge Arbeitsbereiche. Trotz seiner kompakten Größe bietet er mit dem Powertilt-System maximale Flexibilität.",
"besonderheiten": [
"mit Powertilt ausgestattet",
"Löffel bis 180 Grad schwenkbar",
"inkl. Löffelpaket"
],
"lieferung": "Minibagger wird geliefert, Kosten für Lieferung auf Anfrage",
"image": "images/minibagger-1-8t.jpg"
},
{
"id": "ruettelplatten",
"title": "Rüttelplatten",
"preis": "Auf Anfrage",
"gewicht": "von 82kg bis 450kg",
"beschreibung": "Professionelle Rüttelplatten für die Bodenverdichtung. Verfügbar in verschiedenen Gewichtsklassen von ca. 82kg bis 450kg, passend für jeden Einsatzbereich.",
"besonderheiten": [
"verschiedene Gewichtsklassen verfügbar",
"für unterschiedliche Verdichtungsaufgaben"
],
"image": "images/ruettelplatte.jpg"
},
{
"id": "stampfer",
"title": "Stampfer",
"preis": "30€/Tag",
"gewicht": "ca. 62kg",
"beschreibung": "Robuster Stampfer für die Verdichtung von Erde in engen Bereichen wie Gräben oder Fundamenten.",
"besonderheiten": [],
"image": "images/stampfer.jpg"
},
{
"id": "nassschneider",
"title": "Nassschneider / Steintrennmaschine",
"preis": "ab 35€/Tag",
"beschreibung": "Professioneller Nassschneider für präzise Schnitte in Stein, Beton und anderen Materialien. Ideal für saubere Trennarbeiten.",
"besonderheiten": [
"zuzüglich je 1mm Verschleiß der Scheibe 10€",
"Steintrennmaschine"
],
"image": "images/nassschneider.jpg"
},
{
"id": "motorflex",
"title": "Motorflex Stihl TS 420",
"preis": "35€/Tag",
"beschreibung": "Hochwertige Stihl Motorflex TS 420 für mobile Trennarbeiten. Vielseitig einsetzbar für verschiedenste Materialien.",
"besonderheiten": [
"zuzüglich je 1mm Verschleiß der Scheibe 10€",
"Stihl Qualität"
],
"image": "images/motorflex.jpg"
}
],
"gartengeraete": [
{
"id": "wurzelstockfraese",
"title": "Wurzelstockfräse / Stubbenfräse",
"preis": "80€/Tag",
"preisMehrtagig": "Mietpreis für mehrere Tage auf Anfrage",
"leistung": "15 PS",
"gewicht": "120kg",
"arbeitsbreite": "75cm",
"beschreibung": "Die professionelle Baumstumpffräse entfernt Wurzelstöcke effizient und gründlich. Mit 15 PS Leistung bewältigt sie auch größere Stümpfe problemlos.",
"besonderheiten": [],
"image": "images/wurzelstockfraese.jpg"
},
{
"id": "gartenfraesen",
"title": "Gartenfräsen Professional",
"preis": "65€/Tag",
"arbeitsbreite": "65cm",
"beschreibung": "Professionelle Gartenfräsen für die Bodenbearbeitung. Verfügbar mit 11 PS oder 9 PS Motor, beide mit 65cm Arbeitsbreite für effizientes Arbeiten.",
"besonderheiten": [
"11 PS Modell verfügbar",
"9 PS Modell verfügbar",
"beide mit 65cm Arbeitsbreite"
],
"image": "images/gartenfraese.jpg"
},
{
"id": "erdbohrer",
"title": "Erdbohrer",
"preis": "25€/Tag",
"preisMehrtagig": "Mietpreis für mehrere Tage auf Anfrage",
"beschreibung": "Leistungsstarker Erdbohrer für Zaunpfähle, Pflanzlöcher und mehr. Im Preis sind drei verschiedene Bohraufsätze mit 10cm, 15cm und 20cm Durchmesser enthalten.",
"besonderheiten": [
"Bohrtiefe bis zu 60cm",
"mit Verlängerung bis zu 1m",
"drei Bohraufsätze enthalten (10cm, 15cm, 20cm)"
],
"image": "images/erdbohrer.jpg"
},
{
"id": "vertikutierer",
"title": "Vertikutierer",
"preis": "30€/Tag",
"beschreibung": "Professioneller Vertikutierer für die Rasenpflege. Entfernt Moos und Rasenfilz und sorgt für einen gesunden, dichten Rasen.",
"besonderheiten": [],
"image": "images/vertikutierer.jpg"
},
{
"id": "haecksler",
"title": "Häcksler",
"preis": "35€/Tag",
"leistung": "4 PS",
"beschreibung": "Leistungsstarker Häcksler mit 4 PS für Gartenabfälle. Verarbeitet Äste bis ca. 5cm Durchmesser mühelos.",
"besonderheiten": [
"bis ca. 5cm Aststärke"
],
"image": "images/haecksler.jpg"
},
{
"id": "heckenschere",
"title": "Heckenschere Stihl",
"preis": "25€/Tag",
"beschreibung": "Professionelle Stihl Heckenschere für präzise Schnitte. Ideal für die Pflege von Hecken und Sträuchern.",
"besonderheiten": [
"Stihl Qualität",
"professionelles Gerät"
],
"image": "images/heckenschere.jpg"
}
]
}

260
datenschutz.html Normal file
View File

@@ -0,0 +1,260 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Datenschutzerklärung - Andreas Baumer Baumaschinen und Gartengeräte">
<title>Datenschutz - Andreas Baumer</title>
<!-- Bootstrap 5 CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="css/bootstrap-icons.css">
<!-- Custom CSS -->
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!-- Header / Navigation -->
<header class="sticky-top">
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="index.html">
<img src="images/logo_invert.png" alt="Andreas Baumer Logo" class="navbar-logo me-3">
<div>
<strong>Andreas Baumer</strong>
<small class="d-block text-light-emphasis" style="font-size: 0.75rem;">Baumaschinen & Gartengeräte</small>
</div>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="index.html">Start</a>
</li>
<li class="nav-item">
<a class="nav-link" href="kontakt.html">Kontakt</a>
</li>
<li class="nav-item">
<a class="nav-link" href="impressum.html">Impressum</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<!-- Page Content -->
<section class="py-5">
<div class="container">
<div class="content-section mx-auto">
<h1 class="text-primary mb-4">Datenschutzerklärung</h1>
<div class="card mb-4">
<div class="card-body">
<h2>1. Datenschutz auf einen Blick</h2>
<h3>Allgemeine Hinweise</h3>
<p>
Die folgenden Hinweise geben einen einfachen Überblick darüber, was mit Ihren personenbezogenen Daten
passiert, wenn Sie diese Website besuchen. Personenbezogene Daten sind alle Daten, mit denen Sie
persönlich identifiziert werden können.
</p>
<h4>Wer ist verantwortlich für die Datenerfassung auf dieser Website?</h4>
<p>
Die Datenverarbeitung auf dieser Website erfolgt durch den Websitebetreiber. Dessen Kontaktdaten
können Sie dem Impressum dieser Website entnehmen.
</p>
<h4>Wie erfassen wir Ihre Daten?</h4>
<p>
Ihre Daten werden zum einen dadurch erhoben, dass Sie uns diese mitteilen. Hierbei kann es sich z.B.
um Daten handeln, die Sie in ein Kontaktformular eingeben.
</p>
<p>
Andere Daten werden automatisch oder nach Ihrer Einwilligung beim Besuch der Website durch unsere
IT-Systeme erfasst. Das sind vor allem technische Daten (z.B. Internetbrowser, Betriebssystem oder
Uhrzeit des Seitenaufrufs). Die Erfassung dieser Daten erfolgt automatisch, sobald Sie diese Website
betreten.
</p>
<h4>Wofür nutzen wir Ihre Daten?</h4>
<p>
Ein Teil der Daten wird erhoben, um eine fehlerfreie Bereitstellung der Website zu gewährleisten.
Andere Daten können zur Analyse Ihres Nutzerverhaltens verwendet werden.
</p>
<h4>Welche Rechte haben Sie bezüglich Ihrer Daten?</h4>
<p>
Sie haben jederzeit das Recht, unentgeltlich Auskunft über Herkunft, Empfänger und Zweck Ihrer
gespeicherten personenbezogenen Daten zu erhalten. Sie haben außerdem ein Recht, die Berichtigung
oder Löschung dieser Daten zu verlangen. Wenn Sie eine Einwilligung zur Datenverarbeitung erteilt
haben, können Sie diese Einwilligung jederzeit für die Zukunft widerrufen.
</p>
</div>
</div>
<div class="card mb-4">
<div class="card-body">
<h2>2. Hosting</h2>
<p>
Diese Website wird extern gehostet. Die personenbezogenen Daten, die auf dieser Website erfasst werden,
werden auf den Servern des Hosters gespeichert. Hierbei kann es sich v.a. um IP-Adressen,
Kontaktanfragen, Meta- und Kommunikationsdaten, Vertragsdaten, Kontaktdaten, Namen, Websitezugriffe
und sonstige Daten, die über eine Website generiert werden, handeln.
</p>
<p>
Der Einsatz des Hosters erfolgt zum Zwecke der Vertragserfüllung gegenüber unseren potenziellen und
bestehenden Kunden (Art. 6 Abs. 1 lit. b DSGVO) und im Interesse einer sicheren, schnellen und
effizienten Bereitstellung unseres Online-Angebots durch einen professionellen Anbieter
(Art. 6 Abs. 1 lit. f DSGVO).
</p>
</div>
</div>
<div class="card mb-4">
<div class="card-body">
<h2>3. Allgemeine Hinweise und Pflichtinformationen</h2>
<h3>Datenschutz</h3>
<p>
Die Betreiber dieser Seiten nehmen den Schutz Ihrer persönlichen Daten sehr ernst. Wir behandeln
Ihre personenbezogenen Daten vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften
sowie dieser Datenschutzerklärung.
</p>
<h3>Hinweis zur verantwortlichen Stelle</h3>
<p>
Die verantwortliche Stelle für die Datenverarbeitung auf dieser Website ist:
</p>
<p>
Andreas Baumer<br>
Angerstraße 19<br>
93183 Kallmünz<br>
Ortsteil Traidendorf
</p>
<p>
Telefon: +49 (0) 160 966 074 70<br>
E-Mail: baumer@traidendorf.de
</p>
<h3>Speicherdauer</h3>
<p>
Soweit innerhalb dieser Datenschutzerklärung keine speziellere Speicherdauer genannt wurde, verbleiben
Ihre personenbezogenen Daten bei uns, bis der Zweck für die Datenverarbeitung entfällt.
</p>
<h3>Widerruf Ihrer Einwilligung zur Datenverarbeitung</h3>
<p>
Viele Datenverarbeitungsvorgänge sind nur mit Ihrer ausdrücklichen Einwilligung möglich. Sie können
eine bereits erteilte Einwilligung jederzeit widerrufen.
</p>
<h3>Auskunft, Löschung und Berichtigung</h3>
<p>
Sie haben im Rahmen der geltenden gesetzlichen Bestimmungen jederzeit das Recht auf unentgeltliche
Auskunft über Ihre gespeicherten personenbezogenen Daten, deren Herkunft und Empfänger und den
Zweck der Datenverarbeitung und ggf. ein Recht auf Berichtigung oder Löschung dieser Daten.
</p>
</div>
</div>
<div class="card mb-4">
<div class="card-body">
<h2>4. Datenerfassung auf dieser Website</h2>
<h3>Server-Log-Dateien</h3>
<p>
Der Provider der Seiten erhebt und speichert automatisch Informationen in so genannten Server-Log-Dateien,
die Ihr Browser automatisch an uns übermittelt. Dies sind:
</p>
<ul>
<li>Browsertyp und Browserversion</li>
<li>verwendetes Betriebssystem</li>
<li>Referrer URL</li>
<li>Hostname des zugreifenden Rechners</li>
<li>Uhrzeit der Serveranfrage</li>
<li>IP-Adresse</li>
</ul>
<p>
Eine Zusammenführung dieser Daten mit anderen Datenquellen wird nicht vorgenommen. Die Erfassung dieser
Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. f DSGVO.
</p>
<h3>Kontaktformular</h3>
<p>
Wenn Sie uns per Kontaktformular Anfragen zukommen lassen, werden Ihre Angaben aus dem Anfrageformular
inklusive der von Ihnen dort angegebenen Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall
von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter.
</p>
</div>
</div>
<div class="alert alert-warning" role="alert">
<h5><i class="bi bi-exclamation-triangle-fill"></i> Wichtiger Hinweis</h5>
<p class="mb-0">
Diese Datenschutzerklärung ist ein Muster und muss ggf. an Ihre spezifischen
Gegebenheiten angepasst werden. Bitte konsultieren Sie einen Rechtsanwalt oder einen
Datenschutzbeauftragten, um sicherzustellen, dass Ihre Datenschutzerklärung vollständig und korrekt ist.
</p>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="bg-dark text-white py-5">
<div class="container">
<div class="row g-4">
<div class="col-md-4">
<h5 class="text-success mb-3">Andreas Baumer</h5>
<p class="mb-1">Angerstraße 19</p>
<p class="mb-1">93183 Kallmünz</p>
<p>Ortsteil Traidendorf</p>
</div>
<div class="col-md-4">
<h5 class="text-success mb-3">Kontakt</h5>
<p class="mb-1">
<i class="bi bi-telephone"></i>
<a href="tel:+4994739515530" class="text-white text-decoration-none">+49 (0) 9473 951 5530</a>
</p>
<p class="mb-1">
<i class="bi bi-phone"></i>
<a href="tel:+49160966074 70" class="text-white text-decoration-none">+49 (0) 160 966 074 70</a>
</p>
<p>
<i class="bi bi-envelope"></i>
<a href="mailto:baumer@traidendorf.de" class="text-white text-decoration-none">baumer@traidendorf.de</a>
</p>
</div>
<div class="col-md-4">
<h5 class="text-success mb-3">Rechtliches</h5>
<ul class="list-unstyled">
<li class="mb-2">
<a href="impressum.html" class="text-white text-decoration-none">
<i class="bi bi-arrow-right"></i> Impressum
</a>
</li>
<li>
<a href="datenschutz.html" class="text-white text-decoration-none">
<i class="bi bi-arrow-right"></i> Datenschutz
</a>
</li>
</ul>
</div>
</div>
<hr class="my-4 bg-light">
<div class="text-center">
<p class="mb-0">&copy; <span id="year"></span> Andreas Baumer - Alle Rechte vorbehalten</p>
</div>
</div>
</footer>
<!-- Bootstrap JS -->
<script src="js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<script src="js/main.js"></script>
</body>
</html>

BIN
fonts/bootstrap-icons.woff Normal file

Binary file not shown.

BIN
fonts/bootstrap-icons.woff2 Normal file

Binary file not shown.

View File

@@ -0,0 +1,40 @@
<?php
/**
* PHPMailer Exception class.
* PHP Version 5.5.
*
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
*
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
* @author Brent R. Matzelle (original founder)
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*/
namespace PHPMailer\PHPMailer;
/**
* PHPMailer exception handler.
*
* @author Marcus Bointon <phpmailer@synchromedia.co.uk>
*/
class Exception extends \Exception
{
/**
* Prettify error message output.
*
* @return string
*/
public function errorMessage()
{
return '<strong>' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "</strong><br />\n";
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

19
images/README.md Normal file
View File

@@ -0,0 +1,19 @@
# Bilder-Verzeichnis
Legen Sie hier Bilder Ihrer Maschinen ab.
Empfohlene Bildgröße: 600x400px oder ähnliches Seitenverhältnis (3:2)
Beispiel:
- minibagger-2t.jpg
- minibagger-1-8t.jpg
- ruettelplatte.jpg
- etc.
Die Bilder werden dann in `data/maschinen.json` referenziert:
```json
{
"image": "images/minibagger-2t.jpg"
}
```

BIN
images/banner_home-lg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

BIN
images/banner_home-md.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

BIN
images/banner_home-sm.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
images/banner_home-xl.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 KiB

BIN
images/banner_home.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
images/erdbohrer.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
images/gartenfraese.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
images/haecksler.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
images/heckenschere.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
images/lader.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
images/lader_5-7t.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
images/logo_farbe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

BIN
images/logo_invert.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
images/minibagger-1-8t.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
images/minibagger-2t.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
images/motorflex.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
images/nassschneider.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
images/ruettelplatte.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
images/stampfer.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
images/vertikutierer.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

219
impressum.html Normal file
View File

@@ -0,0 +1,219 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Impressum - Andreas Baumer Baumaschinen und Gartengeräte">
<title>Impressum - Andreas Baumer</title>
<!-- Bootstrap 5 CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="css/bootstrap-icons.css">
<!-- Custom CSS -->
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!-- Header / Navigation -->
<header class="sticky-top">
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="index.html">
<img src="images/logo_invert.png" alt="Andreas Baumer Logo" class="navbar-logo me-3">
<div>
<strong>Andreas Baumer</strong>
<small class="d-block text-light-emphasis" style="font-size: 0.75rem;">Baumaschinen & Gartengeräte</small>
</div>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="index.html">Start</a>
</li>
<li class="nav-item">
<a class="nav-link" href="kontakt.html">Kontakt</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="impressum.html">Impressum</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<!-- Page Content -->
<section class="py-5">
<div class="container">
<div class="content-section mx-auto">
<h1 class="text-primary mb-4">Impressum</h1>
<div class="card mb-4">
<div class="card-body">
<h2>Angaben gemäß § 5 TMG</h2>
<p>
Andreas Baumer<br>
Baumaschinen und Dienstleistungen<br>
Angerstraße 19<br>
93183 Kallmünz<br>
Ortsteil Traidendorf
</p>
</div>
</div>
<div class="card mb-4">
<div class="card-body">
<h2>Kontakt</h2>
<p>
Telefon: +49 (0) 9473 951 5530<br>
Mobil: +49 (0) 160 966 074 70<br>
E-Mail: <a href="mailto:baumer@traidendorf.de">baumer@traidendorf.de</a>
</p>
</div>
</div>
<div class="card mb-4">
<div class="card-body">
<h2>Umsatzsteuer-ID</h2>
<p>
Umsatzsteuer-Identifikationsnummer gemäß § 27 a Umsatzsteuergesetz:<br>
[Bitte hier Ihre USt-IdNr. eintragen, falls vorhanden]
</p>
</div>
</div>
<div class="card mb-4">
<div class="card-body">
<h2>Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV</h2>
<p>
Andreas Baumer<br>
Angerstraße 19<br>
93183 Kallmünz
</p>
</div>
</div>
<div class="card mb-4">
<div class="card-body">
<h2>Haftungsausschluss</h2>
<h3>Haftung für Inhalte</h3>
<p>
Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den
allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht
verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen
zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.
</p>
<p>
Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen
Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der
Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden
Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.
</p>
<h3>Haftung für Links</h3>
<p>
Unser Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben.
Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der
verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die
verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft.
Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar.
</p>
<p>
Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte
einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige
Links umgehend entfernen.
</p>
<h3>Urheberrecht</h3>
<p>
Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen
Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der
Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers.
Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.
</p>
<p>
Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte
Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem
auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei
Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.
</p>
</div>
</div>
<div class="card mb-4">
<div class="card-body">
<h2>Streitschlichtung</h2>
<p>
Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit:
<a href="https://ec.europa.eu/consumers/odr" target="_blank" rel="noopener">
https://ec.europa.eu/consumers/odr
</a>.
</p>
<p>
Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer
Verbraucherschlichtungsstelle teilzunehmen.
</p>
</div>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="bg-dark text-white py-5">
<div class="container">
<div class="row g-4">
<div class="col-md-4">
<h5 class="text-success mb-3">Andreas Baumer</h5>
<p class="mb-1">Angerstraße 19</p>
<p class="mb-1">93183 Kallmünz</p>
<p>Ortsteil Traidendorf</p>
</div>
<div class="col-md-4">
<h5 class="text-success mb-3">Kontakt</h5>
<p class="mb-1">
<i class="bi bi-telephone"></i>
<a href="tel:+4994739515530" class="text-white text-decoration-none">+49 (0) 9473 951 5530</a>
</p>
<p class="mb-1">
<i class="bi bi-phone"></i>
<a href="tel:+49160966074 70" class="text-white text-decoration-none">+49 (0) 160 966 074 70</a>
</p>
<p>
<i class="bi bi-envelope"></i>
<a href="mailto:baumer@traidendorf.de" class="text-white text-decoration-none">baumer@traidendorf.de</a>
</p>
</div>
<div class="col-md-4">
<h5 class="text-success mb-3">Rechtliches</h5>
<ul class="list-unstyled">
<li class="mb-2">
<a href="impressum.html" class="text-white text-decoration-none">
<i class="bi bi-arrow-right"></i> Impressum
</a>
</li>
<li>
<a href="datenschutz.html" class="text-white text-decoration-none">
<i class="bi bi-arrow-right"></i> Datenschutz
</a>
</li>
</ul>
</div>
</div>
<hr class="my-4 bg-light">
<div class="text-center">
<p class="mb-0">&copy; <span id="year"></span> Andreas Baumer - Alle Rechte vorbehalten</p>
</div>
</div>
</footer>
<!-- Bootstrap JS -->
<script src="js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<script src="js/main.js"></script>
</body>
</html>

179
index.html Normal file
View File

@@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Professionelle Baumaschinen und Gartengeräte zu vermieten - Andreas Baumer, Traidendorf">
<title>Andreas Baumer - Baumaschinen & Gartengeräte Verleih</title>
<!-- Bootstrap 5 CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="css/bootstrap-icons.css">
<!-- Custom CSS -->
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!-- Header / Navigation -->
<header class="sticky-top">
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="index.html">
<img src="images/logo_invert.png" alt="Andreas Baumer Logo" class="navbar-logo me-3">
<!-- <div>
<strong>Andreas Baumer</strong>
<small class="d-block text-light-emphasis" style="font-size: 0.75rem;">Baumaschinen & Gartengeräte</small>
</div> -->
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link active" href="index.html">Start</a>
</li>
<li class="nav-item">
<a class="nav-link" href="kontakt.html">Kontakt</a>
</li>
<li class="nav-item">
<a class="nav-link" href="impressum.html">Impressum</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Contact Bar -->
<div class="contact-bar bg-primary-subtle py-2">
<div class="container">
<div class="row g-2 text-center text-lg-start">
<div class="col-lg-4 col-12">
<i class="bi bi-telephone-fill text-primary"></i>
<a href="tel:+4994739515530" class="text-decoration-none text-dark ms-2">+49 (0) 9473 951 5530</a>
</div>
<div class="col-lg-4 col-12">
<i class="bi bi-phone-fill text-primary"></i>
<a href="tel:+49160966074 70" class="text-decoration-none text-dark ms-2">+49 (0) 160 966 074 70</a>
</div>
<div class="col-lg-4 col-12">
<i class="bi bi-envelope-fill text-primary"></i>
<a href="mailto:baumer@traidendorf.de" class="text-decoration-none text-dark ms-2">baumer@traidendorf.de</a>
</div>
</div>
</div>
</div>
</header>
<!-- Hero Section -->
<section class="hero-section py-5">
<div class="hero-overlay"></div>
<div class="container position-relative">
<div class="row align-items-center">
<div class="col-lg-12 text-center">
<h1 class="display-4 fw-bold text-white mb-3">
Professionelle Baumaschinen und Gartengeräte zu vermieten
</h1>
<p class="lead mb-3 text-white">
Sie wollen Ihr Grundstück umgestalten oder neu anlegen und zusätzliche
Neuanschaffungen vermeiden? Dann sind Sie bei uns genau richtig!
</p>
<p class="text-white-50">
Wir vermieten professionelle Garten- und Baumaschinen sowohl für den
gewerblichen Bereich, als auch für den privaten Handwerker.
</p>
</div>
</div>
</div>
</section>
<!-- Baumaschinen Section -->
<section class="py-5">
<div class="container">
<h2 class="mb-4">
<i class="bi bi-building text-primary"></i> Baumaschinen
</h2>
<div id="baumaschinen-container" class="row g-4">
<!-- Wird dynamisch mit JavaScript gefüllt -->
</div>
</div>
</section>
<!-- Gartengeräte Section -->
<section class="py-5 bg-light">
<div class="container">
<h2 class="mb-4">
<i class="bi bi-tree text-success"></i> Gartengeräte
</h2>
<div id="gartengeraete-container" class="row g-4">
<!-- Wird dynamisch mit JavaScript gefüllt -->
</div>
</div>
</section>
<!-- CTA Section -->
<section class="cta-section py-5 bg-primary text-white">
<div class="container text-center">
<h2 class="mb-3">Haben Sie noch Fragen?</h2>
<p class="lead mb-2">Wir sind immer bemüht, unsere Maschinenauswahl für Sie zu erweitern.</p>
<p class="mb-4">Melden Sie sich einfach bei uns!</p>
<a href="kontakt.html" class="btn btn-light btn-lg">
<i class="bi bi-envelope"></i> Kontakt aufnehmen
</a>
</div>
</section>
<!-- Footer -->
<footer class="bg-dark text-white py-5">
<div class="container">
<div class="row g-4">
<div class="col-md-4">
<h5 class="text-success mb-3">Andreas Baumer</h5>
<p class="mb-1">Angerstraße 19</p>
<p class="mb-1">93183 Kallmünz</p>
<p>Ortsteil Traidendorf</p>
</div>
<div class="col-md-4">
<h5 class="text-success mb-3">Kontakt</h5>
<p class="mb-1">
<i class="bi bi-telephone"></i>
<a href="tel:+4994739515530" class="text-white text-decoration-none">+49 (0) 9473 951 5530</a>
</p>
<p class="mb-1">
<i class="bi bi-phone"></i>
<a href="tel:+49160966074 70" class="text-white text-decoration-none">+49 (0) 160 966 074 70</a>
</p>
<p>
<i class="bi bi-envelope"></i>
<a href="mailto:baumer@traidendorf.de" class="text-white text-decoration-none">baumer@traidendorf.de</a>
</p>
</div>
<div class="col-md-4">
<h5 class="text-success mb-3">Rechtliches</h5>
<ul class="list-unstyled">
<li class="mb-2">
<a href="impressum.html" class="text-white text-decoration-none">
<i class="bi bi-arrow-right"></i> Impressum
</a>
</li>
<li>
<a href="datenschutz.html" class="text-white text-decoration-none">
<i class="bi bi-arrow-right"></i> Datenschutz
</a>
</li>
</ul>
</div>
</div>
<hr class="my-4 bg-light">
<div class="text-center">
<p class="mb-0">&copy; <span id="year"></span> Andreas Baumer - Alle Rechte vorbehalten</p>
</div>
</div>
</footer>
<!-- Bootstrap JS -->
<script src="js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<script src="js/main.js"></script>
</body>
</html>

7
js/bootstrap.bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

196
js/main.js Normal file
View File

@@ -0,0 +1,196 @@
// Aktuelles Jahr im Footer setzen
document.getElementById('year').textContent = new Date().getFullYear();
// URL-Parameter für Erfolgs-/Fehlermeldungen prüfen (Kontaktformular)
document.addEventListener('DOMContentLoaded', () => {
const urlParams = new URLSearchParams(window.location.search);
// Erfolgsmeldung anzeigen
if (urlParams.get('success') === '1') {
const successAlert = document.getElementById('alertSuccess');
if (successAlert) {
successAlert.classList.remove('d-none');
// Formular leeren
const form = document.getElementById('contactForm');
if (form) form.reset();
// Nach oben scrollen
window.scrollTo({ top: 0, behavior: 'smooth' });
}
}
// Fehlermeldung anzeigen
if (urlParams.get('error') === '1') {
const errorAlert = document.getElementById('alertError');
if (errorAlert) {
errorAlert.classList.remove('d-none');
const reason = urlParams.get('reason');
if (reason === 'rate_limit') {
errorAlert.innerHTML = '<i class="bi bi-exclamation-triangle-fill"></i> <strong>Zu viele Anfragen!</strong> Bitte warten Sie einen Moment, bevor Sie erneut versuchen.';
}
// Nach oben scrollen
window.scrollTo({ top: 0, behavior: 'smooth' });
}
}
// Kontaktformular: Maschine aus URL Parameter vorausfüllen
const maschine = urlParams.get('maschine');
const maschineInput = document.getElementById('maschine');
if (maschine && maschineInput) {
maschineInput.value = decodeURIComponent(maschine);
}
// Submit-Button Feedback
const contactForm = document.getElementById('contactForm');
if (contactForm) {
contactForm.addEventListener('submit', function() {
const submitBtn = document.getElementById('submitBtn');
if (submitBtn) {
submitBtn.disabled = true;
submitBtn.innerHTML = '<span class="spinner-border spinner-border-sm me-2"></span>Wird gesendet...';
}
});
}
// Maschinen laden
loadMaschinen();
});
// Maschinen laden und anzeigen
async function loadMaschinen() {
try {
const response = await fetch('data/maschinen.json');
const data = await response.json();
// Baumaschinen anzeigen
displayMaschinen(data.baumaschinen, 'baumaschinen-container');
// Gartengeräte anzeigen
displayMaschinen(data.gartengeraete, 'gartengeraete-container');
} catch (error) {
console.error('Fehler beim Laden der Maschinen:', error);
}
}
// Maschinen-Karten erstellen und anzeigen
function displayMaschinen(maschinen, containerId) {
const container = document.getElementById(containerId);
if (!container) return;
container.innerHTML = '';
maschinen.forEach(maschine => {
const card = createMaschinenCard(maschine);
container.appendChild(card);
});
}
// Einzelne Maschinen-Karte erstellen
function createMaschinenCard(maschine) {
const col = document.createElement('div');
col.className = 'col-md-6 col-lg-4';
// Besonderheiten als Liste
let besonderheitenHTML = '';
if (maschine.besonderheiten && maschine.besonderheiten.length > 0) {
besonderheitenHTML = '<ul class="list-unstyled mt-3">';
maschine.besonderheiten.forEach(item => {
besonderheitenHTML += `<li><i class="bi bi-check-circle-fill text-success"></i> ${item}</li>`;
});
besonderheitenHTML += '</ul>';
}
// Spezifikationen
let specsHTML = '<div class="specs mt-3 mb-3">';
if (maschine.gewicht) {
specsHTML += `<span class="badge bg-secondary me-2 mb-2"><i class="bi bi-weight"></i> ${maschine.gewicht}</span>`;
}
if (maschine.leistung) {
specsHTML += `<span class="badge bg-secondary me-2 mb-2"><i class="bi bi-lightning-charge"></i> ${maschine.leistung}</span>`;
}
if (maschine.arbeitsbreite) {
specsHTML += `<span class="badge bg-secondary me-2 mb-2"><i class="bi bi-arrows-expand"></i> ${maschine.arbeitsbreite}</span>`;
}
specsHTML += '</div>';
// Lieferung Info
let lieferungHTML = '';
if (maschine.lieferung) {
lieferungHTML = `
<div class="alert alert-info mt-3 mb-0">
<small><i class="bi bi-truck"></i> <strong>Lieferung:</strong> ${maschine.lieferung}</small>
</div>
`;
}
// Mehrtagiger Preis
let mehrtagigHTML = '';
if (maschine.preisMehrtagig) {
mehrtagigHTML = `<p class="text-muted small mb-2">${maschine.preisMehrtagig}</p>`;
}
// Bild HTML
let imageHTML = '';
if (maschine.image) {
imageHTML = `<img src="${maschine.image}" class="card-img-top" alt="${maschine.title}">`;
}
col.innerHTML = `
<div class="card h-100 shadow-sm hover-card">
${imageHTML}
<div class="card-header bg-primary text-white">
<h5 class="card-title mb-0">${maschine.title}</h5>
</div>
<div class="card-body">
<p class="card-text">${maschine.beschreibung}</p>
${specsHTML}
${besonderheitenHTML}
<div class="preis-box mt-auto">
<div class="d-flex justify-content-between align-items-center">
<span class="text-muted">Preis:</span>
<span class="h4 mb-0 text-primary fw-bold">${maschine.preis}</span>
</div>
${mehrtagigHTML}
</div>
${lieferungHTML}
</div>
<div class="card-footer bg-transparent border-top-0">
<a href="kontakt.html?maschine=${encodeURIComponent(maschine.title)}" class="btn btn-outline-primary w-100">
<i class="bi bi-envelope"></i> Anfrage senden
</a>
</div>
</div>
`;
return col;
}
// Beim Laden der Seite
document.addEventListener('DOMContentLoaded', () => {
loadMaschinen();
// Kontaktformular: Maschine aus URL Parameter vorausfüllen
const urlParams = new URLSearchParams(window.location.search);
const maschine = urlParams.get('maschine');
const maschineInput = document.getElementById('maschine');
if (maschine && maschineInput) {
maschineInput.value = decodeURIComponent(maschine);
}
});
// Smooth Scroll für Anker-Links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});

263
kontakt.html Normal file
View File

@@ -0,0 +1,263 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Kontaktieren Sie Andreas Baumer für Baumaschinen und Gartengeräte Verleih">
<title>Kontakt - Andreas Baumer</title>
<!-- Bootstrap 5 CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="css/bootstrap-icons.css">
<!-- Custom CSS -->
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!-- Header / Navigation -->
<header class="sticky-top">
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="index.html">
<img src="images/logo_invert.png" alt="Andreas Baumer Logo" class="navbar-logo me-3">
<div>
<strong>Andreas Baumer</strong>
<small class="d-block text-light-emphasis" style="font-size: 0.75rem;">Baumaschinen & Gartengeräte</small>
</div>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="index.html">Start</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="kontakt.html">Kontakt</a>
</li>
<li class="nav-item">
<a class="nav-link" href="impressum.html">Impressum</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Contact Bar -->
<div class="contact-bar bg-primary-subtle py-2">
<div class="container">
<div class="row g-2 text-center text-lg-start">
<div class="col-lg-4 col-12">
<i class="bi bi-telephone-fill text-primary"></i>
<a href="tel:+4994739515530" class="text-decoration-none text-dark ms-2">+49 (0) 9473 951 5530</a>
</div>
<div class="col-lg-4 col-12">
<i class="bi bi-phone-fill text-primary"></i>
<a href="tel:+49160966074 70" class="text-decoration-none text-dark ms-2">+49 (0) 160 966 074 70</a>
</div>
<div class="col-lg-4 col-12">
<i class="bi bi-envelope-fill text-primary"></i>
<a href="mailto:baumer@traidendorf.de" class="text-decoration-none text-dark ms-2">baumer@traidendorf.de</a>
</div>
</div>
</div>
</div>
</header>
<!-- Page Header -->
<section class="py-5 bg-light">
<div class="container text-center">
<h1 class="display-4 text-primary mb-3">Kontakt</h1>
<p class="lead">Haben Sie Fragen zu unseren Maschinen? Kontaktieren Sie uns gerne!</p>
</div>
</section>
<!-- Contact Content -->
<section class="py-5">
<div class="container">
<div class="row g-4">
<!-- Contact Information -->
<div class="col-lg-5">
<div class="contact-info-box">
<h4><i class="bi bi-person-circle"></i> Andreas Baumer</h4>
<div class="info-item">
<i class="bi bi-geo-alt-fill"></i>
<div class="d-inline-block">
<strong>Adresse</strong><br>
Angerstraße 19<br>
93183 Kallmünz<br>
Ortsteil Traidendorf
</div>
</div>
<div class="info-item">
<i class="bi bi-telephone-fill"></i>
<div class="d-inline-block">
<strong>Telefon</strong><br>
<a href="tel:+4994739515530">+49 (0) 9473 951 5530</a>
</div>
</div>
<div class="info-item">
<i class="bi bi-phone-fill"></i>
<div class="d-inline-block">
<strong>Mobil / WhatsApp</strong><br>
<a href="tel:+49160966074 70">+49 (0) 160 966 074 70</a><br>
<small>Auch per WhatsApp erreichbar</small>
</div>
</div>
<div class="info-item">
<i class="bi bi-envelope-fill"></i>
<div class="d-inline-block">
<strong>E-Mail</strong><br>
<a href="mailto:baumer@traidendorf.de">baumer@traidendorf.de</a>
</div>
</div>
<div class="info-item">
<i class="bi bi-clock-fill"></i>
<div class="d-inline-block">
<strong>Erreichbarkeit</strong><br>
Montag - Freitag: Nach Vereinbarung<br>
Wochenende: Nach Vereinbarung<br>
<small>Bitte kontaktieren Sie uns telefonisch oder per E-Mail.</small>
</div>
</div>
</div>
</div>
<!-- Contact Form -->
<div class="col-lg-7">
<div class="card shadow">
<div class="card-body p-4">
<h4 class="card-title mb-4">Anfrage senden</h4>
<!-- Erfolgs-/Fehlermeldung -->
<div id="alertSuccess" class="alert alert-success alert-dismissible fade show d-none" role="alert">
<i class="bi bi-check-circle-fill"></i>
<strong>Vielen Dank!</strong> Ihre Nachricht wurde erfolgreich versendet. Wir melden uns in Kürze bei Ihnen.
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
<div id="alertError" class="alert alert-danger alert-dismissible fade show d-none" role="alert">
<i class="bi bi-exclamation-triangle-fill"></i>
<strong>Fehler!</strong> Ihre Nachricht konnte nicht gesendet werden. Bitte versuchen Sie es erneut oder kontaktieren Sie uns telefonisch.
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
<form action="send-mail.php" method="POST" id="contactForm">
<!-- Honeypot für Spam-Schutz (versteckt) -->
<input type="text" name="website" style="display:none" tabindex="-1" autocomplete="off">
<div class="row g-3">
<div class="col-md-6">
<label for="name" class="form-label">Name *</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="col-md-6">
<label for="email" class="form-label">E-Mail *</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="col-md-6">
<label for="phone" class="form-label">Telefon</label>
<input type="tel" class="form-control" id="phone" name="phone">
</div>
<div class="col-md-6">
<label for="maschine" class="form-label">Gewünschte Maschine</label>
<input type="text" class="form-control" id="maschine" name="maschine"
placeholder="z.B. Minibagger 2.0 Tonnen">
</div>
<div class="col-12">
<label for="zeitraum" class="form-label">Gewünschter Zeitraum</label>
<input type="text" class="form-control" id="zeitraum" name="zeitraum"
placeholder="z.B. 15.03.2026 - 17.03.2026">
</div>
<div class="col-12">
<label for="nachricht" class="form-label">Nachricht *</label>
<textarea class="form-control" id="nachricht" name="nachricht"
rows="5" required></textarea>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary btn-lg w-100" id="submitBtn">
<i class="bi bi-send"></i> Anfrage senden
</button>
</div>
<div class="col-12">
<p class="text-muted small mb-0">
* Pflichtfelder<br>
Ihre Daten werden vertraulich behandelt und nur zur Bearbeitung Ihrer Anfrage verwendet.
</p>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="bg-dark text-white py-5">
<div class="container">
<div class="row g-4">
<div class="col-md-4">
<h5 class="text-success mb-3">Andreas Baumer</h5>
<p class="mb-1">Angerstraße 19</p>
<p class="mb-1">93183 Kallmünz</p>
<p>Ortsteil Traidendorf</p>
</div>
<div class="col-md-4">
<h5 class="text-success mb-3">Kontakt</h5>
<p class="mb-1">
<i class="bi bi-telephone"></i>
<a href="tel:+4994739515530" class="text-white text-decoration-none">+49 (0) 9473 951 5530</a>
</p>
<p class="mb-1">
<i class="bi bi-phone"></i>
<a href="tel:+49160966074 70" class="text-white text-decoration-none">+49 (0) 160 966 074 70</a>
</p>
<p>
<i class="bi bi-envelope"></i>
<a href="mailto:baumer@traidendorf.de" class="text-white text-decoration-none">baumer@traidendorf.de</a>
</p>
</div>
<div class="col-md-4">
<h5 class="text-success mb-3">Rechtliches</h5>
<ul class="list-unstyled">
<li class="mb-2">
<a href="impressum.html" class="text-white text-decoration-none">
<i class="bi bi-arrow-right"></i> Impressum
</a>
</li>
<li>
<a href="datenschutz.html" class="text-white text-decoration-none">
<i class="bi bi-arrow-right"></i> Datenschutz
</a>
</li>
</ul>
</div>
</div>
<hr class="my-4 bg-light">
<div class="text-center">
<p class="mb-0">&copy; <span id="year"></span> Andreas Baumer - Alle Rechte vorbehalten</p>
</div>
</div>
</footer>
<!-- Bootstrap JS -->
<script src="js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<script src="js/main.js"></script>
</body>
</html>

211
send-mail.php Normal file
View File

@@ -0,0 +1,211 @@
<?php
/**
* Kontaktformular Mail-Script mit PHPMailer
* Baumer Maschinenverleih
*/
// Fehlerberichterstattung
error_reporting(E_ALL);
ini_set('display_errors', 0); // Auf dem Live-Server auf 0 setzen
ini_set('log_errors', 1);
// Session für Rate Limiting
session_start();
// Konfiguration laden
require_once 'config.php';
// PHPMailer laden
require_once 'phpmailer/Exception.php';
require_once 'phpmailer/PHPMailer.php';
require_once 'phpmailer/SMTP.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Funktion für sichere Ausgabe
function clean($data) {
return htmlspecialchars(strip_tags(trim($data)), ENT_QUOTES, 'UTF-8');
}
// Funktion für Rate Limiting
function checkRateLimit() {
$ip = $_SERVER['REMOTE_ADDR'];
$now = time();
if (isset($_SESSION['last_submit_' . $ip])) {
$timeSinceLastSubmit = $now - $_SESSION['last_submit_' . $ip];
if ($timeSinceLastSubmit < RATE_LIMIT_SECONDS) {
return false;
}
}
$_SESSION['last_submit_' . $ip] = $now;
return true;
}
// Nur POST-Anfragen erlauben
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: kontakt.html');
exit;
}
// Rate Limiting prüfen
if (!checkRateLimit()) {
header('Location: ' . ERROR_URL . '&reason=rate_limit');
exit;
}
// Honeypot-Spam-Schutz (verstecktes Feld - sollte leer sein)
if (!empty($_POST[HONEYPOT_FIELD])) {
// Spam erkannt - still ablehnen
header('Location: ' . SUCCESS_URL);
exit;
}
// Formulardaten validieren
$name = isset($_POST['name']) ? clean($_POST['name']) : '';
$email = isset($_POST['email']) ? clean($_POST['email']) : '';
$phone = isset($_POST['phone']) ? clean($_POST['phone']) : '';
$maschine = isset($_POST['maschine']) ? clean($_POST['maschine']) : '';
$zeitraum = isset($_POST['zeitraum']) ? clean($_POST['zeitraum']) : '';
$nachricht = isset($_POST['nachricht']) ? clean($_POST['nachricht']) : '';
// Pflichtfelder prüfen
if (empty($name) || empty($email) || empty($nachricht)) {
header('Location: ' . ERROR_URL . '&reason=missing_fields');
exit;
}
// E-Mail-Format validieren
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
header('Location: ' . ERROR_URL . '&reason=invalid_email');
exit;
}
// PHPMailer initialisieren
$mail = new PHPMailer(true);
try {
// Server-Einstellungen
$mail->CharSet = 'UTF-8';
if (USE_SMTP) {
$mail->isSMTP();
$mail->Host = SMTP_HOST;
$mail->SMTPAuth = true;
$mail->Username = SMTP_USERNAME;
$mail->Password = SMTP_PASSWORD;
$mail->SMTPSecure = SMTP_SECURE;
$mail->Port = SMTP_PORT;
}
// Empfänger
$mail->setFrom(MAIL_FROM, MAIL_FROM_NAME);
$mail->addAddress(MAIL_TO, 'Andreas Baumer');
$mail->addReplyTo($email, $name);
// Inhalt
$mail->isHTML(true);
$mail->Subject = 'Neue Anfrage über Kontaktformular';
// E-Mail-Body
$mailBody = '
<html>
<head>
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
.header { background: #2c5f2d; color: white; padding: 20px; text-align: center; }
.content { background: #f8f9fa; padding: 20px; margin: 20px 0; }
.field { margin-bottom: 15px; padding: 10px; background: white; border-left: 3px solid #2c5f2d; }
.label { font-weight: bold; color: #2c5f2d; }
.value { margin-top: 5px; }
.footer { text-align: center; color: #666; font-size: 12px; margin-top: 20px; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h2>Neue Kontaktanfrage</h2>
<p>Baumer Maschinenverleih</p>
</div>
<div class="content">
<div class="field">
<div class="label">Name:</div>
<div class="value">' . $name . '</div>
</div>
<div class="field">
<div class="label">E-Mail:</div>
<div class="value"><a href="mailto:' . $email . '">' . $email . '</a></div>
</div>
' . (!empty($phone) ? '
<div class="field">
<div class="label">Telefon:</div>
<div class="value"><a href="tel:' . $phone . '">' . $phone . '</a></div>
</div>
' : '') . '
' . (!empty($maschine) ? '
<div class="field">
<div class="label">Gewünschte Maschine:</div>
<div class="value">' . $maschine . '</div>
</div>
' : '') . '
' . (!empty($zeitraum) ? '
<div class="field">
<div class="label">Gewünschter Zeitraum:</div>
<div class="value">' . $zeitraum . '</div>
</div>
' : '') . '
<div class="field">
<div class="label">Nachricht:</div>
<div class="value">' . nl2br($nachricht) . '</div>
</div>
</div>
<div class="footer">
<p>Diese E-Mail wurde über das Kontaktformular auf baumer.traidendorf.de gesendet</p>
<p>IP-Adresse: ' . $_SERVER['REMOTE_ADDR'] . ' | Zeitpunkt: ' . date('d.m.Y H:i:s') . '</p>
</div>
</div>
</body>
</html>
';
$mail->Body = $mailBody;
// Alternative Text-Version (für E-Mail-Clients ohne HTML)
$mail->AltBody =
"Neue Kontaktanfrage - Baumer Maschinenverleih\n\n" .
"Name: $name\n" .
"E-Mail: $email\n" .
($phone ? "Telefon: $phone\n" : "") .
($maschine ? "Gewünschte Maschine: $maschine\n" : "") .
($zeitraum ? "Gewünschter Zeitraum: $zeitraum\n" : "") .
"\nNachricht:\n$nachricht\n\n" .
"---\n" .
"IP: " . $_SERVER['REMOTE_ADDR'] . "\n" .
"Zeitpunkt: " . date('d.m.Y H:i:s');
// E-Mail senden
$mail->send();
// Erfolg - weiterleiten
header('Location: ' . SUCCESS_URL);
exit;
} catch (Exception $e) {
// Fehler loggen
error_log("Mail-Fehler: {$mail->ErrorInfo}");
// Fehlerseite
header('Location: ' . ERROR_URL . '&reason=send_error');
exit;
}
?>