Seite 2 von 8

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 12:50
von Tommy Herrmann
Nein - geht nicht. E-Mail wird nicht gesendet:


E-Mail fehlgeschlagen.jpg

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 12:53
von Volker
was hast du bei $SITE_NAME = eingetragen ?

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 12:59
von Volker
schau mal bitte ob das bei dir geht :

Code: Alles auswählen

<?php
if (mail("deine@mailadresse.de", "Testmail", "Hallo, das ist ein Test.")) {
    echo "Mail wurde gesendet!";
} else {
    echo "Mail konnte NICHT gesendet werden!";
}
?>
Wenn nicht, liegts nicht am script

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 12:59
von Tommy Herrmann

Code: Alles auswählen

// ⚠️ E-MAIL KONFIGURATION - BITTE ANPASSEN! ⚠️
$ADMIN_EMAIL = 'Tommy@MeineDomain.com';     // ← IHRE E-MAIL HIER EINTRAGEN!
$SITE_NAME = 'Gästebuch von Volker';                // ← NAME IHRER WEBSITE
$EMAIL_NOTIFICATIONS = true;                        // ← E-Mail-Benachrichtigungen aktiviert?

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:02
von Tommy Herrmann
Ja - das Test-Script funktioniert einwandfrei "Mauil wurde gesendet"

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:03
von Tommy Herrmann
Dein Iframe Script funktioniert nicht. Außerdem wird es auch nicht auf der Arbeitsseite angezeigt, da es ja in einem IF steht:


Iframe funktioniert nicht.jpg



Ich baue mal jetzt das Original vom Werner ein. Das IF macht doch auch gar keinen Sinn. Wer das nicht als iFRame einbaut kann es dennoch so lassen.

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:07
von Volker
bitte tu mir einen gefallen, kopiere mal den code komplett in die eintragsformular.php:

Code: Alles auswählen

<?php
session_start();

// NEU: Zeitzone festlegen, um sicherzustellen, dass die Zeit korrekt ist
date_default_timezone_set('Europe/Berlin');

// ⚠️ E-MAIL KONFIGURATION - BITTE ANPASSEN! ⚠️
$ADMIN_EMAIL = 'volker@niederastroth.de';  // ← IHRE E-MAIL HIER EINTRAGEN!
$SITE_NAME = 'Mein Gästebuch';       // ← NAME IHRER WEBSITE
$EMAIL_NOTIFICATIONS = true;         // ← E-Mail-Benachrichtigungen aktiviert?

// Konfiguration
$entries_file = 'entries.json';
$pending_file = 'pending.json';

// Hilfsfunktionen
function loadEntries($file) {
    if (!file_exists($file)) {
        return [];
    }
    $content = file_get_contents($file);
    return json_decode($content, true) ?: [];
}

function saveEntries($entries, $file) {
    file_put_contents($file, json_encode($entries, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
}

function sanitizeInput($input) {
    return htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');
}

// E-Mail-Funktionen
function sendAdminNotification($entry, $admin_email, $site_name) {
    if (empty($admin_email) || !filter_var($admin_email, FILTER_VALIDATE_EMAIL)) {
        error_log("Gästebuch: Ungültige Admin E-Mail-Adresse: $admin_email");
        return false;
    }

    // Subject mit UTF-8 Encoding
    $subject = "=?UTF-8?B?" . base64_encode("[$site_name] Neuer Gästebucheintrag wartet auf Freischaltung") . "?=";

    // Admin-Link erstellen
    $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
    $admin_url = $protocol . '://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/admin.php';

    // Nachricht mit UTF-8 Kodierung
    $message = "Hallo Administrator,\n\n"
        . "ein neuer Eintrag in Ihr Gästebuch wartet auf Freischaltung:\n\n"
        . "═══════════════════════════════════════════════════════════════\n\n"
        . "Name: " . $entry['name'] . "\n"
        . "E-Mail: " . (!empty($entry['email']) ? $entry['email'] : 'Nicht angegeben') . "\n"
        . "Datum: " . $entry['date'] . "\n\n"
        . "Kommentar:\n" . $entry['comment'] . "\n\n"
        . "═══════════════════════════════════════════════════════════════\n\n"
        . "Freischalten können Sie den Eintrag hier:\n$admin_url\n\n"
        . "Viele Grüße\nIhr Gästebuch-System";

    // Feste gültige Absenderadresse verwenden
    $from_address = "noreply@meinedomain.de";   // ← hier eine echte Domain eintragen!

    $headers = [
        'From: ' . $site_name . ' <' . $from_address . '>',
        'Reply-To: ' . $from_address,
        'X-Mailer: PHP/' . phpversion(),
        'Content-Type: text/plain; charset=UTF-8'
    ];

    $success = mail($admin_email, $subject, $message, implode("\r\n", $headers));

    if ($success) {
        error_log("Gästebuch: E-Mail erfolgreich gesendet an $admin_email");
    } else {
        error_log("Gästebuch: FEHLER beim E-Mail-Versand an $admin_email");
    }

    return $success;
}


// Verarbeitung der Formulareingaben
$message = '';
$error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add_entry') {
    
    // NEU: CAPTCHA-Prüfung hinzufügen
    $captcha_input = isset($_POST['captcha']) ? sanitizeInput($_POST['captcha']) : '';
    $captcha_correct = isset($_SESSION['captcha']) && strtolower($captcha_input) === strtolower($_SESSION['captcha']);
    
    // Spam-Schutz-Prüfung (Honeypot + Zeit)
    if (!empty($_POST['website']) || (time() - $_POST['form_start_time']) < 3 || !$captcha_correct) {
        // Honeypot-Feld wurde ausgefüllt, Formular zu schnell übermittelt ODER CAPTCHA falsch
        $error = 'Ihre Anfrage konnte nicht verarbeitet werden. Bitte stellen Sie sicher, dass das CAPTCHA korrekt ausgefüllt ist.';
    } else {
        $name = sanitizeInput($_POST['name']);
        $email = sanitizeInput($_POST['email']);
        $comment = sanitizeInput($_POST['comment']);
        
        if (empty($name) || empty($comment)) {
            $error = 'Name und Kommentar sind Pflichtfelder.';
        } else {
            $pending = loadEntries($pending_file);
            $newEntry = [
                'id' => uniqid(),
                'name' => $name,
                'email' => $email,
                'comment' => $comment,
                'date' => date('d.m.Y H:i:s')
            ];
            $pending[] = $newEntry;
            saveEntries($pending, $pending_file);
            
            // E-Mail-Benachrichtigung an Admin senden
            if ($EMAIL_NOTIFICATIONS && !empty($ADMIN_EMAIL)) {
                $email_sent = sendAdminNotification($newEntry, $ADMIN_EMAIL, $SITE_NAME);
                if ($email_sent) {
                    $message = 'Ihr Eintrag wurde übermittelt und der Administrator wurde per E-Mail benachrichtigt. Ihr Eintrag wartet auf Freischaltung.';
                } else {
                    $message = 'Ihr Eintrag wurde übermittelt und wartet auf Freischaltung. (E-Mail-Benachrichtigung fehlgeschlagen - bitte Admin kontaktieren)';
                    error_log("Gästebuch: E-Mail-Benachrichtigung konnte nicht gesendet werden");
                }
            } else {
                $message = 'Ihr Eintrag wurde übermittelt und wartet auf Freischaltung durch den Administrator.';
            }
        }
    }
}
?>

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Gästebuch - Eintrag verfassen</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.0/font/bootstrap-icons.min.css" rel="stylesheet">
    <script type="module" src="https://cdn.jsdelivr.net/npm/emoji-picker-element@1/index.js"></script>
    <style>
        .gradient-bg {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        .form-card {
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            border: none;
        }
        /* NEU: CSS für das Honeypot-Feld */
        .honeypot {
            position: absolute;
            left: -9999px;
            visibility: hidden;
        }
    </style>
</head>
<body class="bg-light">
    <div class="gradient-bg text-white py-5 mb-5">
        <div class="container">
            <div class="row justify-content-center text-center">
                <div class="col-lg-8">
                    <h1 class="display-4 fw-bold mb-3">
                        <i class="bi bi-journal-plus"></i> Neuer Gästebucheintrag
                    </h1>
                    <p class="lead">Teilen Sie Ihre Gedanken und Erfahrungen mit uns!</p>
                </div>
            </div>
        </div>
    </div>

    <div class="container my-5">
        <div class="row justify-content-center">
            <div class="col-lg-8">
                <div class="d-flex justify-content-between mb-4">
                    <a href="index.php" class="btn btn-outline-primary">
                        <i class="bi bi-arrow-left"></i> Zurück zum Gästebuch
                    </a>
                    <a href="admin.php" class="btn btn-outline-secondary">
                        <i class="bi bi-shield-lock"></i> Admin-Bereich
                    </a>
                </div>

                <?php if ($message): ?>
                    <div class="alert alert-success alert-dismissible fade show" role="alert">
                        <i class="bi bi-check-circle"></i> <?= $message ?>
                        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
                    </div>
                <?php endif; ?>

                <?php if ($error): ?>
                    <div class="alert alert-danger alert-dismissible fade show" role="alert">
                        <i class="bi bi-exclamation-circle"></i> <?= $error ?>
                        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
                    </div>
                <?php endif; ?>

                <div class="card mb-5 form-card">
                    <div class="card-header bg-primary text-white">
                        <h5 class="mb-0"><i class="bi bi-plus-circle"></i> Neuen Eintrag verfassen</h5>
                    </div>
                    <div class="card-body p-4">
                        <form method="POST">
                            <input type="hidden" name="action" value="add_entry">
                            
                            <input type="hidden" name="form_start_time" value="<?= time() ?>">

                            <div class="row">
                                <div class="col-md-6 mb-3">
                                    <label for="name" class="form-label fw-semibold">Name *</label>
                                    <input type="text" class="form-control form-control-lg" id="name" name="name" required>
                                </div>
                                <div class="col-md-6 mb-3">
                                    <label for="email" class="form-label fw-semibold">E-Mail (optional)</label>
                                    <input type="email" class="form-control form-control-lg" id="email" name="email">
                                </div>
                            </div>

                            <div class="honeypot">
                                <label for="website">Website (nicht ausfüllen)</label>
                                <input type="text" id="website" name="website" tabindex="-1">
                            </div>

                            <div class="mb-4">
                                <label for="comment" class="form-label fw-semibold">Ihr Kommentar *</label>
                                <textarea class="form-control" id="comment" name="comment" rows="5" 
                                          placeholder="Teilen Sie Ihre Gedanken mit uns! 😊" required></textarea>
                                
                                <div class="mt-2">
                                    <emoji-picker></emoji-picker>
                                </div>
                            </div>

                            <div class="mb-4">
                                <label for="captcha" class="form-label fw-semibold">
                                    Sicherheitscode eingeben *
                                </label>
                                <div class="row">
                                    <div class="col-6">
                                        <img src="captcha.php" alt="CAPTCHA Bild" class="img-fluid border rounded" onclick="this.src='captcha.php?v='+Math.random()">
                                    </div>
                                    <div class="col-6">
                                        <input type="text" class="form-control form-control-lg" id="captcha" name="captcha" required>
                                    </div>
                                </div>
                                <small class="form-text text-muted mt-2">
                                    Klicken Sie auf das Bild, um es zu aktualisieren.
                                </small>
                            </div>

                            <div class="d-grid">
                                <button type="submit" class="btn btn-primary btn-lg">
                                    <i class="bi bi-send"></i> Eintrag senden
                                </button>
                            </div>
                        </form>
                    </div>
                </div>

                <div class="text-center mt-5 pt-4 border-top">
                    <p class="text-muted">
                        <i class="bi bi-heart-fill text-danger"></i> 
                        Vielen Dank für Ihren Besuch!
                    </p>
                </div>
            </div>
        </div>
    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
    <script>
        // Manuelle Steuerung für das Einfügen von Emojis
        document.querySelector('emoji-picker').addEventListener('emoji-click', event => {
            const textarea = document.getElementById('comment');
            const emoji = event.detail.unicode;
            const startPos = textarea.selectionStart;
            const endPos = textarea.selectionEnd;

            // Fügt das Emoji an der aktuellen Cursorposition ein
            textarea.value = textarea.value.substring(0, startPos) + 
                             emoji + 
                             textarea.value.substring(endPos);

            // Aktualisiert die Cursorposition, um sie hinter das eingefügte Emoji zu setzen
            textarea.selectionStart = textarea.selectionEnd = startPos + emoji.length;
            
            // Setzt den Fokus zurück auf das Textfeld, damit man weitertippen kann
            textarea.focus();
        });
    </script>
</body>
</html>
$from_address bitte mit deiner domain anpassen und natürlich deine email adresse
$from_address = "noreply@meinedomain.de"; // ← hier eine echte Domain eintragen!

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:14
von Tommy Herrmann
Also das Script vom Werner funktioniert einwandfrei:

https://www.mobirise-tutorials.com/Tuto ... Volker.php

... und sollte anstelle von Deinem Script in die:

index.php
admin.php


Code: Alles auswählen

    <!-- Resize-Skript  -->
    <script>
        window.addEventListener("load", fenster);
        window.addEventListener("resize", fenster);
        function fenster() {
          if (parent.document.getElementsByTagName("iframe")[0]) {
            parent.document.getElementsByTagName("iframe")[0].style.height =
              document.getElementsByTagName("html")[0].offsetHeight +'px';
          }
        }
    </script>

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:16
von Volker
hast du die eintrgasformular.php mal mit dem code geändert und probiert ? mit festem Absender ??

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:22
von Tommy Herrmann
Es gibt keine Variable:

$from_address

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:24
von Volker
Ich habe das zip geändert Tommy, mit Werners Iframe und auch der Mailversand sollte jetzt gehen.

Bitte mal runter laden
// Feste gültige Absenderadresse verwenden
$from_address = "noreply@domain.de"; // ← hier eine echte Domain eintragen!
Steht in der eintragsformular.php - muss geändert werden!

https://www.niederastroth.de/g%C3%A4stebuch.7z

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:26
von Tommy Herrmann
Ich kann mich entsinnen, dass im MAIL-Befehl keine Variable als E-Mailstehen darf, sondern die echte Mail-Adresse.

Muss jetzt für ca. 40 Minuten weg.

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:29
von Volker
Wenn Du wieder da bist probier das neue zip File. und sag bescheid ob der Mailversand jetzt geht ;)

Vertrau mir :D :D :D :D

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:49
von Tommy Herrmann
Welche Datei(en) hast Du genau geändert. Ich will das wissen, weil ich schon wieder selbst am Sytel geschraubt habe, denn so geht das schlecht im iFrame. Da braucht man keine Mega-Überschriften. Es fehlt auch unten ein `margin`.

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 13:52
von Volker
Ich habe alle sichtbaren Dateien , index, admin und eintragsformular mit dem Iframe Script ausgestattet. Und ich habe eine feste Absender Adresse eingebaut damit die Mails auch sicher versendet werden.

Das muss aber auch dann mit einer richtigen Domain gemacht werden :

in der eintragsformular.php :

MUSS das rein :
// Feste gültige Absenderadresse verwenden
$from_address = "noreply@domain.de"; // ← hier eine echte Domain eintragen!
Läuft auch bei mir gerade auf niederastroth.de

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 14:16
von Tommy Herrmann
Äh - wo muss ich downloaden - bei mir ist keine Fest Adresse auf Deiner Downloadseite gewesen. Sah alles aus wie zuvor und gehen tut es entsprechend auch noch nicht.

Ich hatte es gerade erst hier neu herunter geladen. Werners Skripte waren drinnen - keine Änderung an der Mail:

https://www.niederastroth.de/page2.html

Was hast Du da für Seitennamen "page2", "page3" - soll das so bleiben :eek:

Ich verlinke auf diese Seiten.

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 14:20
von Tommy Herrmann
jetzt ja - warte ...

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 14:21
von Volker
Tommy, wenn Du das gerade runter geladen hast, hast du auch die neuen Dateien.

Schau in die eintragsformular.php - da steht folgender code
// Nachricht mit UTF-8 Kodierung
$message = "Hallo Administrator,\n\n"
. "ein neuer Eintrag in Ihr Gästebuch wartet auf Freischaltung:\n\n"
. "═══════════════════════════════════════════════════════════════\n\n"
. "Name: " . $entry['name'] . "\n"
. "E-Mail: " . (!empty($entry['email']) ? $entry['email'] : 'Nicht angegeben') . "\n"
. "Datum: " . $entry['date'] . "\n\n"
. "Kommentar:\n" . $entry['comment'] . "\n\n"
. "═══════════════════════════════════════════════════════════════\n\n"
. "Freischalten können Sie den Eintrag hier:\n$admin_url\n\n"
. "Viele Grüße\nIhr Gästebuch-System";

// Feste gültige Absenderadresse verwenden
$from_address = "noreply@domain.de"; // ← hier eine echte Domain eintragen!
Da muss deine Domain rein !!! Zwingend weil,IONOS das senden per mail sonst nicht durch lässt

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 14:22
von Volker
Die Seitennamen sind noch nicht geändert, hab ja gerade erst die Seite online :D

Aber Du kannst ja driekt verlinken : https://www.niederastroth.de/g%C3%A4stebuch.7z

Hab die Seitennamen jetzt angepasst

Re: Gästebuch ohne Datenbank

Verfasst: Do 4. Sep 2025, 14:24
von Tommy Herrmann
Nein - immer noch gleiche Fehlermeldung und auch keine E-Mail angekommen.


Hier mein (Dein) Code:

Code: Alles auswählen

    // Nachricht mit UTF-8 Kodierung
    $message = "Hallo Administrator,\n\n"
        . "ein neuer Eintrag in Ihr Gästebuch wartet auf Freischaltung:\n\n"
        . "═══════════════════════════════════════════════════════════════\n\n"
        . "Name: " . $entry['name'] . "\n"
        . "E-Mail: " . (!empty($entry['email']) ? $entry['email'] : 'Nicht angegeben') . "\n"
        . "Datum: " . $entry['date'] . "\n\n"
        . "Kommentar:\n" . $entry['comment'] . "\n\n"
        . "═══════════════════════════════════════════════════════════════\n\n"
        . "Freischalten können Sie den Eintrag hier:\n$admin_url\n\n"
        . "Viele Grüße\nIhr Gästebuch-System";

    // Feste gültige Absenderadresse verwenden
    $from_address = "Tommy@example.com";   // ← hier eine echte Domain eintragen!