Gästebuch ohne Datenbank

Anwendungen für Webseiten. Künstliche Intelligenz verwenden.
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag von Tommy Herrmann »

Nein - geht nicht. E-Mail wird nicht gesendet:


E-Mail fehlgeschlagen.jpg
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag von Volker »

was hast du bei $SITE_NAME = eingetragen ?
Gruß Volker
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag 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
Gruß Volker
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag 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?
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag von Tommy Herrmann »

Ja - das Test-Script funktioniert einwandfrei "Mauil wurde gesendet"
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag 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.
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag 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!
Gruß Volker
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag 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>
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag von Volker »

hast du die eintrgasformular.php mal mit dem code geändert und probiert ? mit festem Absender ??
Gruß Volker
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag von Tommy Herrmann »

Es gibt keine Variable:

$from_address
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag 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
Gruß Volker
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag 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.
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag 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
Gruß Volker
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag 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`.
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag 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
Gruß Volker
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag 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.
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag von Tommy Herrmann »

jetzt ja - warte ...
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag 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
Gruß Volker
Volker
Moderator
Moderator
Beiträge: 1431
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch ohne Datenbank

Beitrag 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
Gruß Volker
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7752
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch ohne Datenbank

Beitrag 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!
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste