@Stef mein PHP-Problem

  • Moin Stef,

    hier das neue Thema, wie gewünscht. Als Anhang habe ich eine Screenshot des Fehlers angehängt und ganz unten siehst Du meinen Verzeichnis-Baum.


    Das ist meine html-Datei:


    <!DOCTYPE html>

    <html lang="de">


    <head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=Edge">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <meta name="keywords" content="web-cap,Webdesign,günstig,Homepage,Webseite,Gestaltung,SEO,CMS,Responsive,Adaptiv,Duingen,Capellenhagen">

    <meta name="description" content="WEB-CAP Webdesign Britta Krueger">

    <meta name="author" content="Britta Krueger">

    <!-- Site title

    ================================================== -->

    <title>WEB-CAP Webdesign Britta Krüger - Wir geben Ihrer Vorstellung Gestalt!</title>


    <!-- Bootstrap CSS

    ================================================== -->

    <link rel="stylesheet" href="css/bootstrap.min.css">


    <!-- Animate CSS

    ================================================== -->

    <link rel="stylesheet" href="css/animate.min.css">


    <!-- Font Icons CSS

    ================================================== -->

    <link rel="stylesheet" href="css/font-awesome.min.css">

    <link rel="stylesheet" href="css/ionicons.min.css">


    <!-- Main CSS

    ================================================== -->

    <link rel="stylesheet" href="css/style.css">

    <link href="favicon.ico" type="image/x-icon" rel="shortcut icon" />

    <!-- Google web font

    ================================================== -->

    <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700,300' rel='stylesheet' type='text/css'>



    </head>


    <body>


    <div class="container">

    <form action="PHPMailer/kontaktformular.php" method="post" class="py-5">

    <div class="form-group">

    <label for="name">Name</label>

    <input type="text" name="name" class="form-control" id="name" placeholder="Name" value="Name">

    </div>

    <div class="form-group">

    <label for="email">E-Mail</label>

    <input type="email" name="email" class="form-control" id="email" placeholder="E-Mail" value="Email">

    </div>

    <div class="form-group">

    <label for="subject">Betreff</label>

    <input type="text" name="subject" class="form-control" id="subject" placeholder="Betreff" value="Betreff">

    </div>

    <div class="form-group">

    <label for="message">Nachricht</label>

    <textarea class="form-control" name="message" id="message" rows="10">Nachricht</textarea>

    </div> <!-- nur zum Testen -->

    <div class="form-group">

    <label for="receiver">E-Mail Empfänger</label>

    <input type="email" name="receiver" class="form-control" id="receiver" placeholder="Empfänger" value="">

    </div> <input type="submit" name="submit" class="btn btn-primary" value="Senden">

    </form>

    </div>

    </body>


    </html>


    und hier die beiden PHP-Dateien entsprechend modifiziert für mich:

    datenüberprüfung.php:

    <?php

    // PHP-Mailer hinzufügen

    use PHPMailer\src\PHPMailer;

    use PHPMailer\src\Exception;

    require_once 'phpmailer/src/Exception.php';

    require_once 'phpmailer/src/PHPMailer.php';

    const HTML_ERROR_START = '<div class="alert alert-danger" role="alert"><p class="m-0">';

    const HTML_ERROR_END = '</p></div>';

    const HTML_SUCCESS_START = '<div class="alert alert-success" role="alert"><p class="m-0">';

    const HTML_SUCCESS_END = '</p></div>';

    /**

    * 1. Überprüfung, ob das Formular abgesendet wurde, denn wir erhalten die Daten erst, wenn das Formular abgesendet wurde.

    */

    if (isset($_POST['submit'])) {

    /**

    * 2. Alle Eingangsdaten filtern

    * - Dazu verwenden wir die Funktion htmlspecialchars()

    * - die Funktion trim() wird genutzt, um alle Leerzeichen am Anfang und Ende des Strings (Zeichenkette) zu entfernen

    */

    $name = htmlspecialchars(trim($_POST['name']));

    $email = htmlspecialchars(trim($_POST['email']));

    $subject = htmlspecialchars(trim($_POST['subject']));

    $message = htmlspecialchars(trim($_POST['message']));


    // Empfänger, nur zum Testen

    $receiver = htmlspecialchars(trim($_POST['receiver']));

    /**

    * 3. Kriterienprüfung

    * - Kriterien, wie z.B., wie viele Zeichen müssen mindestens eingegeben werden, ...

    *

    * Was brauchen wir dafür?

    * 1. Array, welches die ganzen Fehler zugeordnet bekommt

    *

    * Beachte:

    * Alle Daten, welche durch das Formular abgesendet werden, sind erstmal Strings, dies heißt, dass man diese zuerst in deren gewünschten Typ umwandeln muss

    */

    $errors = [];

    $success = false;

    /**

    * input textfeld | name="name"

    * Typ: string

    * Kriterien: mindestens 3 Zeichen lang

    */

    if (empty($name)) {

    $errors[] = HTML_ERROR_START . 'Bitte geben Sie Ihren Namen an!' . HTML_ERROR_END;

    } else if (strlen($name) < 3){

    $errors[] = HTML_ERROR_START . 'Der Name muss mindestens 3 Zeichen lang sein!' . HTML_ERROR_END;

    }

    /**

    * input emailfeld | name="email"

    * Typ: string

    * Kriterien: mindestens 7 Zeichen lang

    */

    if (empty($email)) {

    $errors[] = HTML_ERROR_START . 'Bitte geben Sie Ihre E-Mail-Adresse an!' . HTML_ERROR_END;

    } else if (strlen($email) < 7) {

    $errors[] = HTML_ERROR_START . 'Die E-Mail-Adresse muss mindestens 7 Zeichen lang sein!' . HTML_ERROR_END;

    } else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {

    $errors[] = HTML_ERROR_START . 'Bitte geben Sie eine gültige E-Mail-Adresse an!' . HTML_ERROR_END;

    }

    /**

    * input textfeld | name="subject"

    * Typ: string

    * Kriterien: mindestens 3 Zeichen lang, maximal 50 Zeichen lang

    */

    if (empty($subject)) {

    $errors[] = HTML_ERROR_START . 'Bitte geben Sie einen Betreff an!' . HTML_ERROR_END;

    } else if (strlen($subject) < 3) {

    $errors[] = HTML_ERROR_START . 'Der Betreff muss mindestens 3 Zeichen lang sein!' . HTML_ERROR_END;

    } else if (strlen($subject) > 50) {

    $errors[] = HTML_ERROR_START . 'Der Betreff darf maximal 50 Zeichen lang sein!' . HTML_ERROR_END;

    }

    /**

    * textarea | name="message"

    * Typ: string

    * Kriterien: mindestens 10 Zeichen lang (man kann erwarten, dass eine Nachricht länger als 10 Zeichen lang ist)

    */

    if (empty($message)) {

    $errors[] = HTML_ERROR_START . 'Bitte geben Sie eine Nachricht an!' . HTML_ERROR_END;

    } else if (strlen($message) < 10) {

    $errors[] = HTML_ERROR_START . 'Die Nachricht muss mindestens 10 Zeichen lang sein!' . HTML_ERROR_END;

    }


    // nur zum Testen

    if (empty($receiver)) {

    $errors[] = HTML_ERROR_START . 'Bitte geben Sie die E-Mail des Empfängers an!' . HTML_ERROR_END;

    }

    /**

    * 4. Überprüfung, ob Fehler vorhanden sind, wenn nicht, dann Mailversand ausführen

    * - für den Mailversand verwenden wir den PHPMailer

    */

    if (count($errors) === 0) {

    $mailer = new PHPMailer();

    $mailer->CharSet = 'UTF-8'; // Charset setzen (für richtige Darstellung von Sonderzeichen/Umlauten)

    $mailer->setFrom($email, $name); // Absenderemail und -name setzen

    $mailer->addAddress(info@web-cap.de); // Empfängeradresse

    $mailer->isHTML(true);

    $mailer->Subject = 'Neue Nachricht vom Kontaktformular'; // Betreff der Email

    $mailer->Body = '<h3>Neue Nachricht von: ' . $name . '</h3>

    <h4>E-Mail-Adresse: ' . $email . '</h4>

    <h2>Betreff: ' . $subject . '</h2>

    <p>' . nl2br($message) . '</p>'; // Inhalt der Email

    /**

    * Überprüfung, ob Mail abgesendet wurde, wenn nicht: Fehlermeldung ausgeben, wenn ja: Erfolgsmeldung ausgeben

    */

    if (!$mailer->send()) {

    $errors[] = HTML_ERROR_START . 'Es ist ein Fehler aufgetreten. Bitte versuchen Sie es in ein paar Minuten nochmal!' . HTML_ERROR_END;

    } else {

    $success = HTML_SUCCESS_START . 'Ihre Nachricht wurde erfolgreich abgesendet!' . HTML_SUCCESS_END;

    }

    }

    }


    kontaktformular.php


    <?php

    require_once 'PHPMailer/datenUeberpruefung.php';

    ?>

    <!DOCTYPE html>

    <html lang="de">

    <head> <title>PHP Kontaktformular</title>

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

    </head>

    <body>

    <div class="container">

    <form action="" method="post" class="py-5">

    <div class="form-group">

    <label for="name">Name</label>

    <input type="text" name="name" class="form-control" id="name" placeholder="Name" value="<?php echo !empty($name) ? $name : '' ?>">

    </div> <div class="form-group">

    <label for="email">E-Mail</label>

    <input type="email" name="email" class="form-control" id="email" placeholder="E-Mail" value="<?php echo !empty($email) ? $email : '' ?>">

    </div> <div class="form-group">

    <label for="subject">Betreff</label>

    <input type="text" name="subject" class="form-control" id="subject" placeholder="Betreff" value="<?php echo !empty($subject) ? $subject : '' ?>">

    </div> <div class="form-group">

    <label for="message">Nachricht</label>

    <textarea class="form-control" name="message" id="message" rows="10"><?php echo !empty($message) ? $message : '' ?></textarea>

    </div> <!-- nur zum Testen -->

    <div class="form-group">

    <label for="receiver">E-Mail Empfänger</label>

    <input type="email" name="receiver" class="form-control" id="receiver" placeholder="Empfänger" value="<?php echo !empty($receiver) ? $receiver : '' ?>">

    </div> <input type="submit" name="submit" class="btn btn-primary" value="Senden">

    </form> <?php

    if (!empty($errors) && count($errors) > 0 && !$success) {

    echo implode('', $errors);

    } else if (!empty($success) && count($errors) === 0) {

    echo $success;

    }

    ?>

    </div>

    </body>

    </html>


    Verzeichnis-Baum:
    Siehe jpg.Anhang


    Ich hoffe ich habe das alles richtig zur Verfügung gestellt.


    LGbaum.jpg

    fehler.pngBritta


  • müssen wir dir das wirklich übersetzen?

    Nein. So blöd bin ich auch nicht!

    Desweiteren hatte Stef mich gestern gebeten meinen Code in einem neuen Thema einzugeben, er wollte sich das Problem bei Gelegenheit mal ansehen. Daher auch die direkte Ansprache Stef . Und warum mischt sich m.scatello da wieder ein? Hast Du nix besseres zu tun? Ständig moserst Du nur die Leute an und bringst besserwisserische Kommentare. :cursing:

    Ich weiß sehrwohl das es heißt das keine Datei vorhanden ist, aber ich sehe den verdammten Fehler nicht!!! Also, statt zu kritisieren zeig mir den Fehler, dann komm ich weiter und gehe euch nicht länger auf den Zeiger!

    Gruß

  • Zitat

    Daher auch die direkte Ansprache

    Ist das hier dein privater Chat?

    Zitat

    Und warum mischt sich m.scatello da wieder ein?

    Weil das hier ein Forum ist und jeder schreiben darf.

    Zitat

    und bringst besserwisserische Kommentare.

    Aber nur dann, wenn der Fragensteller das Mitdenken verweigert.

    Zitat

    Ich weiß sehrwohl das es heißt das keine Datei vorhanden ist

    Und was glaubst du, bringt uns dein (unformatiert geposteten) Quellcode weiter? Können wir deshalb auf dein Dateisystem zugreifen? Und komm mir nicht mit der Aussage, die Datei existiert. Nein, tut sie nicht, da glaube ich PHP mehr als dir!


    Aber da das Mitdenken ja anscheinend nicht so dein Ding ist:

    Code
    1. <form action="PHPMailer/kontaktformular.php" method="post" class="py-5">

    Damit wird das Script kontaktformular.php im Verzeichnis PHPMailer aufgerufen.

    PHP
    1. <?php
    2. require_once 'PHPMailer/datenUeberpruefung.php';
    3. ?>

    Und hier willst du eine Datei aus dem Verzeichnis PHPMailer einbinden. Allerdings bist du schon im Verzeichnis PHPMailer. Also müsste deine Verzeichnisstruktur so ausehen

    Code
    1. PHPMailer/PHPMailer/datenUeberpruefung.php

    Ich wette, dass das aber nicht zutrifft.


    Alles zusammengefasst: Wenn man nicht in der Lage ist, eine eindeutige Fehlermeldung zu interpretieren und daraus nicht die logischen Schlüsse ziehen kann, dann sollte man besser nicht derart rumposaunen!


    Aber trotzdem gebe ich noch einen Tipp, bevor du später wieder auf das gleiche Problem stößt und hier rumjammers:

    Vermeide Groß/Kleinschreibungen bei Dateinamen. Auf Windows ist das noch egal, aber auf Webservern, die meist mit Linux betrieben werden, ist datenUeberpruefung.php eine andere Datei als datenueberpruefung.php. Da handelt man sich unnötige Probleme ein.


    Und nun: möge dein Rechner abrauchen!

  • Und nun: möge dein Rechner abrauchen!

    Ist er nicht. Ok ich habe Deine Kritik angenommen und Du hast Recht. Ich habe tagelang auf diesen Code geschaut und da ich mich mit PHP nicht auskenne den Wald von lauter Bäumen nicht mehr gesehen. Ausserdem das mit dem unformatiertem Code habe ich erst jetzt gesehen, wie man das macht.

    Die Datei exestiert, aber wie Du erkannt hast, in dem gleichen Verzeichnis. Die von Dir angegebenen Anmerkungen habe ich übernommen und werde morgen testen. Heute ist Sonntag und schalte sowieso gleich ab.

    Also, danke, auch fürs zurückmotzen, habe ich verdient.