liebewinter: PHP - Class Form gebe keine antwort

Hallo , ersate zu sage das mein deutsch nicht so gut ist …

Ich have zwei dateien , index.php wo wird meine Webformular gezeigt und ClassProveContakt.php , wo meine PHP Code Steht .

Der index.php Code;

<?php include 'ClassProveContakt.php'; header('Content-Type: text/html; Charset=utf-8'); mb_internal_encoding('UTF-8'); date_default_timezone_set('Europe/Paris'); error_reporting(-1); $ProveContackt=new ClassProveContakt(); ?> <!DOCTYPE html> <html lang="en_mx"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <form name="form" id="form" method="post" action="" > <?php $ProveContackt->form(); $ProveContackt->PostOk(); ?> </form> </body> </html>

Der ClassProveContakt.php Code;

<?php header('Content-Type: text/html; Charset=utf-8'); mb_internal_encoding('UTF-8'); date_default_timezone_set('Europe/Paris'); error_reporting(-1); class ClassProveContakt { private $Name; private $Email; private $Message; function __construct() { $this->Name=""; $this->Email=""; $this->Message=""; } function Form() { echo('<table>'); echo('<label for="name">Name </label>'); echo('<input type="text" name="Name" value="'.$this->Name.'">'); echo('<label for="email"> Email </label>'); echo('<input type="email" value="'.$this->Email.'" name="Email" '); echo('<tr>'); echo('<td>'); echo('<br>'); echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>'); echo('<br><br>'); echo('<input type="submit" name="post" value="POST COMMENT" id="comment">'); echo('</td>'); echo('</tr>'); echo('</table>'); } function PostOk() { $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"]; if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) { echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>"; } else { $file = inclued_get_data("test.txt"); $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $data = array("name" => $name, "email" => $email, "message" => $message); $data = serialize($data); file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX); } $messages = file($file); foreach ($messages as $key => $value) { $data = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $value->name) . "<b> at: </b>" . htmlspecialchars( $value->datetime) . "<br><br>" . htmlspecialchars( $value->message) . "<br><hr>"; } } } ?>

Das probleme ist die bekome diese warnung :

Fatal error: Uncaught Error: Call to undefined function inclued_get_data() in /var/www/html/ClassProveContakt.php:58 Stack trace: #0 /var/www/html/index4.php(28): ClassProveContakt->PostOk() #1 {main} thrown in /var/www/html/ClassProveContakt.php on line 58

ich bin ganz neue mit php.... , es gibt die möglichkeit mit Json machen was ich möchte , aber ich möchte ohne ihn....

kann Bitte jemand hilfe um diesem probleme zu lösung ? , Danke !

Akzeptierte Antworten zum Thema:

  1. Mahlzeit,

    inclued_get_data()

    Ich würde sagen, dir fehlt die entsprechende PECL-Erweiterung. Prüfe entsprechend deinen Server und wenn du die Möglichkeit hast, installiere die Erweiterung nach, wenn du sie brauchst.

    BTW: Dass du in der Klassendatei nochmal header sendest, ist nur nur überflüssig sondern kann ggf. einen Fehler werfen.

    -- 42
    1. Danke for deine vorschlag ! , aber habe das probleme gelöscht !☺️

      ich habe vor einiger Monat diese Code auf diesem Forum bekomme ... , das Fehler war mit $file = inclued_get_data("test.txt"); , jetzt habe die zeile gelöscht noch fehlte mir auf $data = array("name" => $name, "email" => $email, "message" => $message); die datatime einzufüllen.. so , wie jetzt habe...

      $data = array("name" => $name, "email" => $email, "message" => $message, "datetime" => $datetime);

      meine screenshot

  2. Hallo liebewinter,

    <html lang="en_mx">

    Sprachcodes werden mit - getrennt, en-mx gibt es nicht.

    <form name="form" id="form" method="post" action="" >

    Das action-Attribut darf nicht leer sein, wie ich schon sagte.

    Ob filter_input wirklich das leistet, was es leisten soll, können die PHP-Experten sagen.

    function Form() { echo('<table>'); echo('<label for="name">Name </label>'); echo('<input type="text" name="Name" value="'.$this->Name.'">'); echo('<label for="email"> Email </label>'); echo('<input type="email" value="'.$this->Email.'" name="Email" '); echo('<tr>'); echo('<td>'); echo('<br>'); echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>'); echo('<br><br>'); echo('<input type="submit" name="post" value="POST COMMENT" id="comment">'); echo('</td>'); echo('</tr>'); echo('</table>'); }

    erzeugt ungültiges HTML.

    $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"]; if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) {

    Warum das Umkopieren?

    echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";

    Das kannst du auch kürzer schreiben, aber "Please enter all required fields" ist keine Überschrift.

    Fatal error: Uncaught Error: Call to undefined function inclued_get_data() in /var/www/html/ClassProveContakt.php:58 Stack trace: #0 /var/www/html/index4.php(28): ClassProveContakt->PostOk() #1 {main} thrown in /var/www/html/ClassProveContakt.php on line 58

    In deinem gezeigten Code gibt es keine Funktion inclued_get_data(). Wahrscheinlich heißt sie auch include_get_data().

    Bis demnächst
    Matthias

    -- Pantoffeltierchen haben keine Hobbys.
    1. danke für deinen Bemüht !

      ich habe

      $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"];

      geschrieben weil einen Person als vorschlag gegeben hat , er meintet , mit dem werden wieder die Variablen von Post erhalten kann.

      was ich nich habe verstande , was meinst mit

      Warum das Umkopieren?

      echo "<br>" . "<b>" . "<h3>** Please enter all required fields **</h3>" . "</b>";

      $file = inclued_get_data("test.txt");

      habe gelöscht von dem Code...

      1. Mahlzeit,

        $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"];

        geschrieben weil einen Person als vorschlag gegeben hat , er meintet , mit dem werden wieder die Variablen von Post erhalten kann.

        Von dieser Person solltest du keine Vorschläge mehr annehmen. Wenn du schon umkopierst, solltest du zumindest die Daten auf Validität und Schadcode prüfen.

        -- 42
    2. Hallo @Matthias Apsel,

      In deinem gezeigten Code gibt es keine Funktion inclued_get_data(). Wahrscheinlich heißt sie auch include_get_data().

      Da bist Du möglicherweise im Irrtum; es gibt eine PECL-Erweiterung namens inclued, die genau diese Funktion definiert. Allerdings ruft man inclued_get_data() ohne Parameter auf und das Ergebnis ist kein Dateiname, sondern ein assoziatives Array das Informationen über includete Files liefert. Eine Art Debug-Hilfe, die hier mutmaßlich nichts verloren hat.

      Rolf

      -- sumpsi - posui - clusi
    3. Mahlzeit,

      In deinem gezeigten Code gibt es keine Funktion inclued_get_data(). Wahrscheinlich heißt sie auch include_get_data().

      Google hätte da geholfen, dass es sich im eine PECL-Erweiterung handelt ...

      -- 42
  3. so , jetzt möchte Ein Bissen noch schwieriger machen ...ich möchte mit ein Nested die Kommentare auch auf andere Datei speicher wird (ich möchte $me = "me.txt"; als Kommentar Verwalter benutze) , aber wenn auf dem Webformular habe alles eingefüllt , bekomme keine kommentar .... .

    mein Code:

    <?php header('Content-Type: text/html; Charset=utf-8'); mb_internal_encoding('UTF-8'); date_default_timezone_set('Europe/Paris'); error_reporting(-1); class ClassProveContakt5 { private $Name; private $Email; private $Message; function __construct() { $this->Name=""; $this->Email=""; $this->Message=""; } function Form() { echo('<table>'); echo('<label for="name">Name </label>'); echo('<input type="text" name="Name" value="'.$this->Name.'">'); echo('<label for="email"> Email </label>'); echo('<input type="email" value="'.$this->Email.'" name="Email" '); echo('<tr>'); echo('<td>'); echo('<br>'); echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>'); echo('<br><br>'); echo('<input type="submit" name="post" value="POST COMMENT" id="comment">'); echo('</td>'); echo('</tr>'); echo('</table>'); } function PostOk() { $file = "test.txt"; if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) { echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>"; if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"]; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $data = array("name" => $name, "message" => $message, "datetime" => $datetime); $data = serialize($data); file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX); } $messages = file($file); foreach ($messages as $value) { $data = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $data["name"]) . "<b> at: </b>" . htmlspecialchars( $data["datetime"]) . "<br><br>" . htmlspecialchars( $data["message"]) . "<br><hr>"; } if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $me = "me.txt"; $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"]; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $datas = array("name" => $name, "email" => $email, "message" => $message, "datetime" => $datetime); $datas = serialize($datas); file_put_contents($me, $datas . "\n", FILE_APPEND|LOCK_EX); } $messages = file($me); foreach ($messages as $value) { $datas = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $datas["name"]) . "<b> at: </b>" . htmlspecialchars( $datas["datetime"]) . "<br><br>" . htmlspecialchars( $datas["email"]) . "<br><br>" . htmlspecialchars( $datas["message"]) . "<br><hr>"; } } } } ?>
    1. Hallo liebewinter,

      Matthias hatte geschrieben:

      echo "<br>" . "<b>" . "<h3>** Please enter all required fields **</h3>" . "</b>";

      Das geht auch kürzer.

      Du setzt mehrere Strings mit dem Punkt-Operator zusammen, aber Du könntest das als einen String schreiben. So:

      echo "<br><b><h3>** Please enter all required fields **</h3></b>";

      Dazu muss man jetzt aber andere Kritik geben:

      • Statt <br> solltest Du lieber dem <h3> Element über CSS einen margin-top geben.

      • Wenn Du die h3 Überschrift fett haben möchtest, dann mach das auch mit CSS, dafür gibt es font-weight:bold. Es sollte aber nicht nötig sein - mein Browser macht h3 Überschriften sowieso fett.

      • Dass <b>FETT</b> einen Text fett macht, kommt aus der Zeit von HTML 4. Mit HTML 5 ist das nicht mehr so. Früher hat man b, i und u für Fett, Kursiv und Unterstrichen verwendet. Heute nicht mehr. Du kannst VERMUTEN, dass der Browser den Text <b>FETT</b> in fetten Buchstaben schreibt, aber es ist nicht garantiert.

      • Es ist grundsätzlich falsch, ein h3 Element in ein b Element zu setzen. Bei HTML Elementen ist festgelegt, für was sie stehen und was darin sein darf. In <b> Elementen ist „phrasing content“ erlaubt, also sowas wie fließener Text. Ein <h3> Element ist aber „sectioning content“, also etwas, das den Text aufteilt. Das ist etwas anderes. Guck Dir mal das Bild an, da siehst Du, welche Kategorien es gibt und wie sie zusammenhängen.

      Falsches HTML: <b><h3>Überschrift 3</h3></b>

      Richtiges HTML, aber unnötig: <h3><b>Überschrift 3</b></h3>

      • Aber wie Matthias schon sagte: h3 ist nicht das richtige Element. h3 ist für Überschriften. Du willst eine Fehlermeldung ausgeben. Setze die in ein p Element, gib dem p Element eine Klasse, zum Beispiel class="error", und sorge mit CSS dafür dass die Fehlermeldung so aussieht wie Du es gern möchtest (Fett, Rot, ...).

      Weiter…

      Das hier:

      $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"];

      und das hier

      $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING);

      ist doppelt. Du KANNST dein Programm so schreiben, dass das Form von einem PHP Objekt gesteuert wird. Dann ist es gut, die Daten aus $_POST in Variablen des Objekts zu kopieren. Aber dann: (1) Mache es nur einmal, (2) mache es konsequent, (3) mache es zum richtigen Zeitpunkt.

      Du hast eine Prüfung, ob $_POST deine Form-Werte enthält. Wenn nicht, schreibst Du deine „Please enter all required fields“ Meldung. Gut. Wenn doch, möchtest Du die Form-Werte verarbeiten. Auch gut. Aber lies sie nicht vorher. Es sollte so aussehen:

      function PostOk() { if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) { echo "<p class='error'>*** Please enter all required fields ***</p>"; } else { $this->Name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $this->Email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $this->Message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message); ... } }

      Die ... Zeile ist kein PHP, das bedeutet nur: „hier geht es so weiter wie Du es geschrieben hattest“

      Was Du "ein bisschen schwieriger" machen willst, ist, die Form-Werte in zwei Dateien zu schreiben. Einmal in text.txt, einmal in me.txt. Die Programmteile sehen eigentlich gleich aus und auch nicht falsch. Hast Du auf dem Server geguckt, ob me.txt entsteht? Wenn nicht - vielleicht gibt es einen PHP Fehler. Mit error_reporting(-1) möchtest Du vielleicht alle Fehlermeldungen einschalten, das funktioniert so aber nicht auf jedem Computer. Richtig ist error_reporting(E_ALL).

      Du hast auch viel zu viel kopiert - das Übertragen der POST-Werte in Variablen musst Du nur einmal machen.

      Rolf

      -- sumpsi - posui - clusi
      1. hallo,

        Mit error_reporting(-1) möchtest Du vielleicht alle Fehlermeldungen einschalten

        ich habe error_reporting(-1) instaliet auf test.php und me.php und geben keine fehler...

        ich morgen arbeite , nach dem arbeit möchte ich deinen Vorschlag machen..

        ich bedanke mich dich für deine bemüht !

        1. Hallo liebewinter,

          ich habe error_reporting(-1) instaliet auf test.php und me.php und geben keine fehler…

          Nein, das gibt auch keinen Fehler. Aber es muss auch nicht funktionieren.

          Wenn Du alle Fehlermeldungen von PHP sehen willst, ist error_reporting(E_ALL) korrekt.

          Rolf

          -- sumpsi - posui - clusi
          1. Wenn Du alle Fehlermeldungen von PHP sehen willst, ist error_reporting(E_ALL) korrekt.

            Auf den index.php und ClassProveContakt.php , habe ich so geschrieben

            header('Content-Type: text/html; Charset=utf-8'); mb_internal_encoding('UTF-8'); date_default_timezone_set('Europe/Paris'); error_reporting(-1); error_reporting(E_ALL);
            1. Hallo liebewinter,

              bitte entschuldige. Ich habe mir deinen neuen Code gar nicht so genau angeschaut. Da machst Du ein paar merkwürdige Dinge mit der Programmlogik. Ich schreibe das mal kürzer auf:

              if (empty($_POST['Name'])) { if (isset($_POST['Name'])) { // Datei schreiben } }

              Das ist der Kern des Problems: Wenn der gepostete Name leer ist, UND wenn was drin steht, dann schreibe in die Datei.

              Schau Dir mal den Code an, den Du am 13.10 gezeigt hast. Da sah das noch anders aus. Du hast das else entfernt.

              Rolf

              -- sumpsi - posui - clusi
              1. so wie der code auf ClassProveContakt.php habe...

                <?php include 'ClassProveContakt.php'; header('Content-Type: text/html; Charset=utf-8'); mb_internal_encoding('UTF-8'); date_default_timezone_set('Europe/Paris'); error_reporting(-1); error_reporting(E_ALL) class ClassProveContakt { private $Name; private $Email; private $Message; function __construct() { $this->Name=""; $this->Email=""; $this->Message=""; } function Form() { echo('<table>'); echo('<label for="name">Name </label>'); echo('<input type="text" name="Name" value="'.$this->Name.'">'); echo('<label for="email"> Email </label>'); echo('<input type="email" value="'.$this->Email.'" name="Email" '); echo('<tr>'); echo('<td>'); echo('<br>'); echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>'); echo('<br><br>'); echo('<input type="submit" name="post" value="POST COMMENT" id="comment">'); echo('</td>'); echo('</tr>'); echo('</table>'); } function PostOk() { $file = "test.txt"; if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) { echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>"; if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"]; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $data = array("name" => $name, "message" => $message, "datetime" => $datetime); $data = serialize($data); file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX); } $messages = file($file); foreach ($messages as $value) { $data = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $data["name"]) . "<b> at: </b>" . htmlspecialchars( $data["datetime"]) . "<br><br>" . htmlspecialchars( $data["message"]) . "<br><hr>"; } if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $me = "me.txt"; $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"]; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $datas = array("name" => $name, "email" => $email, "message" => $message, "datetime" => $datetime); $datas = serialize($datas); file_put_contents($me, $datas . "\n", FILE_APPEND|LOCK_EX); } $messages = file($me); foreach ($messages as $value) { $datas = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $datas["name"]) . "<b> at: </b>" . htmlspecialchars( $datas["datetime"]) . "<br><br>" . htmlspecialchars( $datas["email"]) . "<br><br>" . htmlspecialchars( $datas["message"]) . "<br><hr>"; } } } } ?>

                auf der Bownser mit diese adresse, localhost/index.php

                bekome dieser fehler…

                Parse error: syntax error, unexpected 'class' (T_CLASS) in /var/www/html/ClassProveContakt5.php on line 10

                1. Hallo,

                  … include 'ClassProveContakt.php';

                  error_reporting(-1);
                  error_reporting(E_ALL)

                  class ClassProveContakt {

                  bekome dieser fehler…

                  Parse error: syntax error, unexpected 'class' (T_CLASS) in /var/www/html/ClassProveContakt5.php on line 10

                  Kann es sein, dass du gerne Dinge doppelt machst? Bzw. dir nicht klarmachst, warum du welchen Befehl in deinem Code hast?

                  1. Was bewirken denn die beiden error_reporting-Befehle?

                  2. Inkludierst du erst die Klasse ClassProveContakt um sie dann nochmal zu erstellen?

                  3. Mach dir mal einen Plan!

                  Gruß
                  Kalk

                  1. danke für deine hilfe !

                    entschüldigung warum frühr nicht dir geantwortet habe , ich arbeit und machmal nachts bin sehr müde (ich arbeite als Spüler..) .

                    Mein Code;

                    header('Content-Type: text/html; Charset=utf-8'); mb_internal_encoding('UTF-8'); date_default_timezone_set('Europe/Paris'); error_reporting(-1); error_reporting(E_ALL); class ClassProveContakt5 { private $Name; private $Email; private $Message; function __construct() { $this->Name=""; $this->Email=""; $this->Message=""; } function Form() { echo('<table>'); echo('<label for="name">Name </label>'); echo('<input type="text" name="Name" value="'.$this->Name.'">'); echo('<label for="email"> Email </label>'); echo('<input type="email" value="'.$this->Email.'" name="Email" '); echo('<tr>'); echo('<td>'); echo('<br>'); echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>'); echo('<br><br>'); echo('<input type="submit" name="post" value="POST COMMENT" id="comment">'); echo('</td>'); echo('</tr>'); echo('</table>'); } function PostOk() { $file = "test.txt"; $me = "me.txt"; if(empty($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) { echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>"; if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"]; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $data = array("name" => $name, "message" => $message, "email" => $email, "datetime" => $datetime); $data = serialize($data); file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX); } $messages = file($file); foreach ($messages as $value) { $data = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $data["name"]) . "<b> at: </b>" . htmlspecialchars( $data["datetime"]) . "<br><br>" . htmlspecialchars( $data["email"]) . "<br><br>" . htmlspecialchars( $data["message"]) . "<br><hr>"; } }if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $this->Name=$_POST["Name"]; $this->Email=$_POST["Email"]; $this->Message=$_POST["Message"]; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $datas = array("name" => $name, "message" => $message, "datetime" => $datetime); $datas = serialize($datas); file_put_contents($me, $datas . "\n", FILE_APPEND|LOCK_EX); } $nachricht = file($me); foreach ($nachricht as $value) { $datas = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $datas["name"]) . "<b> at: </b>" . htmlspecialchars( $datas["datetime"]) . "<br><br>" . htmlspecialchars( $datas["message"]) . "<br><hr>"; } } } ?>

                    jetzt bekomme kein Fehler Meldung , aber auf meine text.txt Datei bekomme nur

                    a:4:{s:4:"name";s:0:"";s:7:"message";s:0:"";s:5:"email";s:0:"";s:8:"datetime";s:22:"10/17/2018 12:03:58 am";}

                    wie du siehst , auf den Variablen name, message und email , sind leer..

                    Auf meine me.txt Datei ich bekomme alles was ich eingefüllt habe

                    a:3:{s:4:"name";s:13:"ddddddddddddd";s:7:"message";s:26:"cccccccccccccccccccccccccc";s:8:"datetime";s:22:"10/17/2018 12:03:23 am";}

                2. Hallo liebewinter,

                  PHP Befehle brauchen ein Semikolon ; am Ende. Bei dir fehlt eins. Deswegen versteht er class nicht.

                  Der include an Anfang muss weg, das ist eine Endlosschleife.

                  Der Fehler in der Programmstruktur, den ich gestern genannt habe, ist immer noch drin.

                  Rolf

                  -- sumpsi - posui - clusi
                  1. Entschuldigung warum habe nicht frühr geantwortet aber Gestern war sehr müde wegen arbeit..

                    ich verstehe nicht was meinst du mit

                    Der Fehler in der Programmstruktur, den ich gestern genannt habe, ist immer noch drin.

                    1. Hallo liebewinter,

                      Programmstruktur meint die Art, wie die Logik im Programm angeordnet ist.

                      Konkret meine ich das hier. Das kann nicht funktionieren. $_POST["Name"] kann nicht gleichzeitig leer und gefüllt sein.

                      if (empty($_POST['Name'])) { if (isset($_POST['Name'])) { // Datei schreiben } }

                      Früher war da noch ein ELSE drin. Das fehlt hier. Aber auch dann ist es nicht richtig. Ich muss jetzt etwas Theorie machen.

                      empty und isset prüfen ähnliche Dinge:

                      isset($variable): Ist true wenn die Variable vorhanden ist. Egal was drin steht. empty($variable): Ist true wenn die Variable fehlt, ODER wenn ihr Wert gleich FALSE ist.

                      "Wenn ihr Wert gleich FALSE ist" - das ist in PHP auch nicht so einfach. Es gibt TRUE und FALSE als Wahrheitswerte. Aber einige andere Werte gelten in Vergleichen auch als FALSE: die Zahl 0, der leere String "" (aber nicht " "), und ein leeres Array.

                      Also: empty($_POST["Name"]) kann wahr sein, wenn:

                      1. das Formular nicht mit POST gesendet wurde (das heißt: der erste Aufruf)
                      2. das Formular kein <input name="Name"> enthält
                      3. der Benutzer in diesem input nichts eingegeben hat. Aber ein Leerzeichen reicht schon, dann ist empty nicht mehr wahr.

                      Wenn man mit PHP ein Formular programmiert, dann gibt es drei Situationen

                      • der erste Aufruf
                      • ein POST mit richtigen Daten
                      • ein POST mit falschen Daten

                      Du musst die Situationen erkennen, und du musst wissen, was dann passieren soll.

                      Erster Aufruf und POST unterscheidest Du mit isset($_POST['post']). Das ist der Name des Submit-Button. Er wird auch gepostet. Das ist beim ersten Aufruf FALSE, und wenn der Browser das Formular sendet ist es TRUE.

                      Mit isset($_POST['Name']) kannst Du ersten Aufruf und POST nicht unterscheiden. Wenn der Anwender nichts in den Namen schreibt, wird 'Name' nicht gesendet und isset($_POST['Name']) ist FALSE.

                      Richtige und falsche Daten sind schwieriger zu erkennen. Bei Dir ist es so, dass die Felder ausgefüllt sein müssen. Du kannst die Funktion trim benutzen, um unnötige Leerstellen zu entfernen. trim(" Hallo WELT ") wird zu "Hallo WELT".

                      Du hast eine Klasse gemacht, in der Name, Email und Message gespeichert werden. Das benutze auch! Wenn man es richtig macht, muss man zuerst die $_POST Daten lesen, bevor man das Form ausgibt. Das ist bei Dir nicht drin, das sollte man ändern.

                      In deiner HTML Seite schreibst Du das form so:

                      <form name="form" id="form" method="post" action="" > <?php $ProveContackt->GetPostData(); $ProveContackt->Form(); $ProveContackt->PostOk(); ?> </form>

                      GetPostData ist neu und liest die Werte aus $_POST ein:

                      function GetPostData() { if (!isset($_POST['Name'])) $this->Name = trim($_POST['Name']); // Übung: mache das für Email und Message auch so } Vorteil: Wenn es eine Fehlermeldung gibt, bleiben ausgefüllte Werte im Form stehen. Das PHP in der Form-Funktion kann so bleiben. Die Funktion PostOk kann die Werte benutzen, die GetPostData gespeichert hat. ~~~php function PostOk() { // Kein POST - nichts tun, gleich wieder raus. if (!isset($_POST['post']) return; if (empty($this->Name) || empty($this->Email) || empty($this->Message)) { // Fehlermeldung schreiben - Please enter all required fields } else { // Datei schreiben // Datei wieder lesen // Ausgeben was Du gelesen hast. } }

                      So - das ist jetzt nicht fertig und du musst schon selbst drüber nachdenken, wie Du das benutzen kannst :)

                      Rolf

                      -- sumpsi - posui - clusi
                      1. ich habe der Code geschrieben wie du sagst , aber bekomme nichts... , wenn auf Webformular schreibe name, email und message , sie werde schrieben auf dem webformular noch auf test.txt .…

                        Mein Code:

                        <?php header('Content-Type: text/html; Charset=utf-8'); mb_internal_encoding('UTF-8'); date_default_timezone_set('Europe/Berlin'); error_reporting(-1); error_reporting(E_ALL); class ClassProveContakt3 { private $Name; private $Email; private $Message; function __construct() { $this->Name=""; $this->Email=""; $this->Message=""; } function Form() { // y aqui muestras lo que recuperaste, al inicio nombre="" asi que no sale nada // en el primer submit se recupera nombre y se debe mostrar en el inpu echo('<table>'); echo('<label for="name">Name </label>'); echo('<input type="text" name="Name" value="'.$this->Name.'">'); echo('<label for="email"> Email </label>'); echo('<input type="email" value="'.$this->Email.'" name="Email" '); echo('<tr>'); echo('<td>'); echo('<br>'); echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>'); echo('<br><br>'); echo('<input type="submit" name="post" value="POST COMMENT" id="comment">'); echo('</td>'); echo('</tr>'); echo('</table>'); } function GetPostData() { if (!isset($_POST['Name']) || empty($_POST['Email']) || empty($_POST['Message'])) { $this->Name = trim($_POST['Name']); $this->Email = trim($_POST['Email']); $this->Message = trim($_POST['Message']); } } function PostOk() { // aqui recuperas las variables desde Post // pon los filtros que consideres necesarios if (!isset($_POST['post'])) { return; } if (empty($this->Name) || empty($this->Email) || empty($this->Message)) { echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>"; } else { $file = "test.txt"; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $data = array("name" => $name, "email" => $email, "message" => $message, "datetime" => $datetime); $data = serialize($data); file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX); $messages = file($file); foreach ($messages as $value) { $data = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $data["name"]) . "<b> at: </b>" . htmlspecialchars( $data["datetime"]) . "<br><br>" . htmlspecialchars( $data["email"]) . "<br><br>" . htmlspecialchars( $data["message"]) . "<br><hr>"; } } } } ?>
                        1. Hallo liebewinter,

                          behebe bitte erst alle Fehler, auf die du hingewiesen wurdest.

                          Bis demnächst
                          Matthias

                          -- Pantoffeltierchen haben keine Hobbys.
                          1. danke für deine Antwort !

                            ich habe versuche der Code zu verstehe.…

                            bei Spiel wie Rolf B sagtet über diesen Teil..

                            Das war Unsinn - damit wird nur was gespeichert wenn $_POST['Name'] nicht da ist. Das ! muss weg, ein ! bedeutet "NICHT". Bitte entschuldige.

                            if (!isset($_POST['Name']) $this->Name = trim($_POST['Name']);> Hallo liebewinter,

                            ich auch gedacht die eine Fehler war weil

                            if (!isset($_POST['post']))

                            macht gleich .…

                            wie ich verstehe ,das symbol ! bedeutet wie wenn nicht , !isse auf diesen Kontex wäre , wenn POST (die Variablen die auf POST stehen) nicht sind , return ...

                        2. Hallo liebewinter,

                          ich muss mich entschuldigen, mein GetPostData war FALSCH!

                          if (!isset($_POST['Name']) $this->Name = trim($_POST['Name']);

                          Das war Unsinn - damit wird nur was gespeichert wenn $_POST['Name'] nicht da ist. Das ! muss weg, ein ! bedeutet "NICHT". Bitte entschuldige.

                          Im übrigen will dein error_reporting(-1); immer noch gelöscht werden 😀

                          Ich habe am Wochenende wenig Zeit und kann darum nicht mehr antworten. Versuche einfach, zu verstehen was das Programm tut. Und baue ein paar echo Befehle ein, die Dir ausgeben wo das Programm gerade ist. Ein echo "Beginn GetPostData<br>"; oder Ein echo "Ende GetPostData<br>"; an der richtigen Stelle kann Dir sagen, ob das Programm da gewesen ist wo es sein sollte. Man kann auch Werte von Variablen mit echo ausgeben, um zu schauen, ob das drinsteht, was Du erwartest.

                          Rolf

                          -- sumpsi - posui - clusi
                          1. macht keine sorge !

                            Genießt das Leben ! , das Leben ist mehr als nur Komputer...

                          2. Hallo , ich habe einen neue Function function mella () gebaut , um auf meiner me.txt datei zu geschreiben .Ich möchte dass die Name, E-mail und Message von meinem Webformat werden auch auf dieser datei gespeichen , das probleme ist das wird nichts speichert... .Auf meiner test.txt wird gespeicht wie auch auf meiner Webformat wird gezeigt . Meine Idee ist die me.txt Datei als Verwaltung für Form benutz, Beispiel Message lösen... Was kann machen damit data auch auf me.txt Datei , speichen werden ?

                            <?php header('Content-Type: text/html; Charset=utf-8'); mb_internal_encoding('UTF-8'); date_default_timezone_set('Europe/Berlin'); error_reporting(E_ALL); class ClassProveContakt3 { private $Name; private $Email; private $Message; function __construct() { $this->Name=""; $this->Email=""; $this->Message=""; } function Form() { echo('<table>'); echo('<label for="name">Name </label>'); echo('<input type="text" name="Name" value="'.$this->Name.'">'); echo('<label for="email"> E-mail </label>'); echo('<input type="email" value="'.$this->Email.'" name="Email" '); echo('<tr>'); echo('<td>'); echo('<br>'); echo('<label> Message: <br><textarea cols="45" rows="6" name="Message">'.$this->Message.'</textarea></label>'); echo('<br><br>'); echo('<input type="submit" name="post" value="POST COMMENT" id="comment">'); echo('</td>'); echo('</tr>'); echo('</table>'); } function GetPostData() { if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $this->Name = trim($_POST['Name']); $this->Email = trim($_POST['Email']); $this->Message = trim($_POST['Message']); } } function PostOk() { if (!isset($_POST['post'])) { return; } if (empty($this->Name) || empty($this->Email) || empty($this->Message)) { echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>"; } else { $file = "test.txt"; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $data = array("name" => $name, "email" => $email, "message" => $message, "datetime" => $datetime); $data = serialize($data); file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX); $messages = file($file); foreach ($messages as $value) { $data = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $data["name"]) . "<b> at: </b>" . htmlspecialchars( $data["datetime"]) . "<br><br>" . htmlspecialchars( $data["email"]) . "<br><br>" . htmlspecialchars( $data["message"]) . "<br><hr>"; } } }function mella () { if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $me = "me.txt"; $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $datas = array("name" => $name, "email" => $email, "message" => $message, "datetime" => $datetime); $datas = serialize($datas); file_put_contents($me, $datas . "\n", FILE_APPEND|LOCK_EX); $messages = file($me); foreach ($messages as $value) { $datas = unserialize($value); echo "<br>" . "<b>From: </b>" . htmlspecialchars( $datas["name"]) . "<b> at: </b>" . htmlspecialchars( $datas["datetime"]) . "<br><br>" . htmlspecialchars( $datas["message"]) . "<br><hr>"; } } } } ?>
                            1. Hallo liebewinter,

                              die Funktion GetPostData, die ich Dir vorgeschlagen hatte, soll die Werte aus den Eingabefeldern einlesen und in Eigenschaften des ClassProveContakt3-Objekts speichern. Wenn Du auch noch Filter-Funktionen verwenden willst, dann gehört das nach GetPostData.

                              function GetPostData() { if (isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $this->Name = trim(filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING)); $this->Email = trim(filter_input( INPUT_POST, 'Email', FILTER_SANITIZE_STRING)); $this->Message = trim(filter_input( INPUT_POST, 'Message', FILTER_SANITIZE_STRING)); } }

                              In mella() verwendest Du dann nur noch $this->Name, $this->Email und $this->Message, und du prüfst mit empty(), ob etwas drin steht. So wie in PostOk.

                              Die mella-Funktion sieht ganz gut aus, rufst Du sie denn auch auf? Irgendwo muss $this->mella() stehen.

                              Ich möchte noch etwas dazu sagen, WIE man Programme aufschreibt. Es muss einheitlich sein. Dann kannst Du sie besser lesen. Es gibt zum Beispiel unterschiedliche Möglichkeiten, wo man ein { hinschreibt.

                              So:

                              function GetPostData() { if (isset($_POST["Name"])) { // ... } }

                              Oder so:

                              function GetPostData() { if (isset($_POST["Name"])) { // ... } }

                              Es gibt da kein falsch. Du musst wissen was dir besser gefällt. Aber es muss überall gleich sein. Sonst ist es schwer zu lesen.

                              Einrückung ist auch wichtig. Programmzeilen werden eingerückt wenn mit {...} ein neuer Block gebildet wird, oder auch bei einem if, wenn zum if nur ein Befehl gehört. Anfang und Ende vom Block müssen genau untereinander stehen.

                              function hallo($welt) { echo "Das ist " . $welt; for ($a=0; $a<100; $a++) { echo "Nummer ".$a; } }

                              Das versteht keiner. So ist es besser:

                              function hallo($welt) { echo "Das ist " . $welt; for ($a=0; $a<100; $a++) { echo "Nummer ".$a; } }

                              Rolf

                              -- sumpsi - posui - clusi
                              1. Vielllll dank für deinen voschlagen ! , ich möchte sie verfolgen.. , Beispiel mit {...} .Was ich nicht verstande habe ist , wo soll $this->mella() legen ?

                                Ich möchte eine frage stelle... , ich möchte eine Form vewaltung die verwaltet die Werte aus den Eingabefeldern und geben mich die möglichkeit sie lösen (wegen Troll ,eine Beispiel ..).

                                Mit dem Code den ich jetz habe , kann ich das mache ??

                                1. Hallo liebewinter,

                                  entschuldige, es war spät als ich $this->mella() geschrieben habe. Das war nicht ganz richtig.

                                  Ich möchte erklären, was da passiert.

                                  mella() ist eine Funktion in einem Objekt. Solche Funktionen heißen Methode, und können nicht einfach so aufgerufen werden. Du musst PHP immer sagen, in welchem Objekt sie aufzurufen ist.

                                  ClassProveContakt3 ist eine Klasse. Eine Klasse ist so etwas wie ein Stempel für Objekte. Mit der Programmzeile

                                  $ProveContackt = new ClassProveContakt3();

                                  erzeugst Du ein neues Objekt für die Klasse, und speicherst es in der Variablen $ProveContackt.

                                  Das Objekt hat jetzt alle Variablen und Methoden, die in der Klasse programmiert sind. Mit dem Pfeil -> greifst Du darauf zu. Es ist aber ein Unterschied, ob Du das IN der Klasse machst, oder außerhalb.

                                  Deswegen hast Du $ProveContackt->GetPostData() geschrieben. An der Stelle warst Du außerhalb der Klasse, und Du hast damit die GetPostData() Methode für ein bestimmtes Objekt aufgerufen.

                                  In der GetPostData Funktion hast Du aber $this->Name geschrieben. $this ist etwas Besonderes und kann nur in Klassen verwendet werden. Es bedeutet: Das Objekt, für das die Methode aufgerufen wurde.

                                  WO Du mella() aufrufen willst, das musst Du eigentlich selbst wissen. Wo ist denn der richtige Punkt dafür, um das Speichern der Datei auszulösen? Von wo rufst Du denn PostOk() auf? An der Stelle bist Du wieder außerhalb der Klasse, und darum ist $this->mella() falsch. Es gibt an dieser Stelle gar kein $this. Deswegen musst Du $ProveContackt->mella() aufrufen.

                                  Deine Frage mit dem Troll habe ich nicht verstanden. Aber es ist auch sehr schwierig, Dir hier zu helfen. Ich kann dir erklären, wie bestimmte Dinge funktionieren. Und wenn Du etwas zeigst, das nicht funktioniert, kann ich dir sagen wo ein Fehler ist. Aber programmieren musst Du selbst. Wir können Dir nicht alles schreiben.

                                  Rolf

                                  -- sumpsi - posui - clusi
                                  1. Erste viel dank für dienen bemüht !

                                    so , als wie du meints mit

                                    Es gibt an dieser Stelle gar kein $this. Deswegen musst Du $ProveContackt->mella() aufrufen.

                                    das habe schon gemacht bei mein me.php Datei gemacht…

                                    <?php $ProveContackt->GetPostData(); $ProveContackt->mella(); ?>

                                    und auf meine ClassProveContakt3.php Datei , habe meine function mela() so geschrieben..

                                    function mella () { if(isset($_POST["Name"]) && isset($_POST["Email"]) && isset($_POST["Message"])) { $name = filter_input( INPUT_POST, 'Name', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'Email', FILTER_SANITIZE_STRING); $message = filter_input(INPUT_POST, 'Message', FILTER_SANITIZE_STRING); $datetime = date('m/d/Y h:i:s a', time()); $datas = array("name" => $name, "email" => $email, "message" => $message, "datetime" => $datetime); echo "<table border='1'>"; echo "<tr><td><b>Name</b></td><td><b>Email</b></td><td><b>Message</b></td><td><b>datetime</b></td>"; echo "</tr>"; foreach ($datas as $value) { echo "<br>" . "<b>From: </b>" . htmlspecialchars( $value["name"]) . "<b> at: </b>" . htmlspecialchars( $value["datetime"]) . "<br><br>" . htmlspecialchars( $datas["message"]) . "<br><hr>"; } } }