j.kanuff: Einfacher PHP-Formmailer nutzen

Hallo Leute,

ich habe den Code unter

http://aktuell.de.selfhtml.org/artikel/php/form-mail/

kopiert und mitten in meine bereits bestehende PHP Seite kopiert und die Parameter angepasst.

die Zeilen für das Html-Dokument:

header("Content-type: text/html; charset=utf-8");

und

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
    <head>
        <title>Einfacher PHP-Formmailer</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>

sowie am Schluss:

</body>
</html>

habe ich gelöscht.

Problem nun:

der Formmailer wird nicht ausgeführt sondern irgendein anderes Script.

was fehlt noch bzw. was habe ich falsch gemacht?

Gruss Jürgen

  1. Tach!

    Problem nun:
    der Formmailer wird nicht ausgeführt sondern irgendein anderes Script.
    was fehlt noch bzw. was habe ich falsch gemacht?

    Das ist zu wenig Information. Niemand wird dir das in der Form beantworten können. PHP führt nicht einfach so "irgendein anderes Script" aus - was auch immer das heißen mag. Das einzige was du nun tun kannst, ist Debugging. Mit Kontrollausgaben (var_dump()) der Variableninhalte und Ergebnissen von Ausdrücken und Funktionsaufrufen nähert man sich so Schritt für Schritt an die Ursache an. Natürlich muss man dazu auch ein Verständnis für den Code mitbringen, den man sich da ins Haus geholt hat.

    dedlfix.

    1. Hallo dedlfix,

      mehr Informationen gibt es nicht.

      meinem Anfängergefühl nach fehlt dem PHP-Teil irgendwie das Function-Korset.

      wie hat sich denn der Erfinder den Aufruf der Funktion vorgestellt?

      Gruss Jürgen

      1. mehr Informationen gibt es nicht.

        Wie sollen wir dann helfen? Bei Ebay steigt immer der Preis von Glaskugeln ins unermessliche wenn in Foren solche Fehlerbeschreibungen aufschlagen.

        meinem Anfängergefühl nach fehlt dem PHP-Teil irgendwie das Function-Korset.

        Nein. Der Formmailer funktioniert nach Konfiguration "Out of the Box". Es ist eine Art Affen-Formular und darüber hinaus Spagetti-Code. Beides ist dafür angemessen.

        wie hat sich denn der Erfinder den Aufruf der Funktion vorgestellt?

        Der Client sendet Daten, was das Skript ganz einfach feststellt und dann das Mail sendet und zur "Danke-Seite" weiter leitet. Wenn mit dem Request keine oder nicht die erwarteten Daten kommen wird das Formular angezeigt.

        Jörg Reinholz

        1. Ach so. Du hast den Formmailer in ein eigenes Skript verbaut. Beachte bitte, dass mit header() zu der Dankeseite weiter geleitet wird. Wenn Du vorher Ausgaben machst, dann musst Du das entweder vermeiden oder am Beginn des Skriptes eine weitere Krücke, namentlich die Ausgabepufferung starten.

          ... sagt die Glaskugel der Hexe zwei Straßen weiter, zu der ich mittels WLAN Verbindung habe.

          Jörg Reinholz

          1. den Dankesaufruf habe ich auskommentiert.

            erkläre mir doch bitte mal wie das Originalscript funktioniert,

            z.B. wenn man auf den Submit-Button klickt.

            Gruss Jürgen

            1. erkläre mir doch bitte mal wie das Originalscript funktioniert,

              In Anbetracht der Tatsache, dass das Skript

              a)
              wirklich sehr einfach ist und darüber hinaus

              b)
              unter "Erläuterung" schon alles wesentliche steht

              vermute ich, dass mir für weitere Erläuterungen eine spezielle Ausbildung für den Umgang mit solchen Fragen fehlt. Wenn Du keine Grundkenntnisse hast müsste ich Dir erläutern wie PHP überhaupt funktioniert. Das ist für das Forum unangemessen. Deshalb der Link zu einer guten Einstiegsseite.

              Jörg Reinholz

              1. deine Ausführungen sind eher arrogant statt eine wirkliche Hilfe ...

                1. Om nah hoo pez nyeetz, j.kanuft!

                  deine Ausführungen sind eher arrogant statt eine wirkliche Hilfe ...

                  Ich vermag keine Überheblichkeit zu entdecken. Dieses Forum möchte dich zu einer Lösung führen, nicht dir eine Lösung vorsetzen. (dedlfix)

                  Matthias

                  --
                  1/z ist kein Blatt Papier.

                  1. Hallo Matthias,

                    (dedlfix)

                    bitte die Zitate nicht mit /my/ verlinken, sonst sind nicht-registrierte Nutzer ausgesperrt.

                    Besser so: dedlfix

                    Ciao,
                     Martin

                    --
                    Gott hilft niemandem, er erfreut sich nur an unseren Leiden.
                      (Ashura)
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    1. bitte die Zitate nicht mit /my/ verlinken, sonst sind nicht-registrierte Nutzer ausgesperrt.

                      Besser so: dedlfix

                      könnte man nicht solche links beim posten automatisch umwandeln? ich mache das in meiner forumssoftware z.b. bei kompletten links so und wandle sie in relative links um, damit https-user nicht auf http-links klicken.

                      und warum müssen eigentlich angemeldete und nicht-angemeldete verschiedene urls haben? soll das in zukunft mal geändert werden? (und ist basic auth als login nicht etwas antiquiert?)

                      gruss, tinita

                      1. Hallo,

                        bitte die Zitate nicht mit /my/ verlinken, sonst sind nicht-registrierte Nutzer ausgesperrt.
                        Besser so: dedlfix
                        könnte man nicht solche links beim posten automatisch umwandeln?

                        könnte man, aber die Zitatesammlung ist nachträglich mal auf die Forensoftware "aufgepfropft" worden, daher ist das automatische Umwandeln in diesem Fall nicht realisiert. Und nun möchte keiner mehr den Code anfassen.

                        und warum müssen eigentlich angemeldete und nicht-angemeldete verschiedene urls haben?

                        Damit man sie unterscheiden kann. ;-)
                        Schließlich ist hier kein klassisches Login-System (z.B. mit Cookies und Sessions) implementiert, sondern lediglich HTTP-AUTH. Das hat für die Nutzer den Vorteil, dass man gleich die "richtige" Forums-URL mit Anmeldedaten als Bookmark hinterlegen kann.

                        soll das in zukunft mal geändert werden?

                        Ich hoffe nicht, aber frag mal an der Front nach.

                        (und ist basic auth als login nicht etwas antiquiert?)

                        Antiquiert ist in diesem Fall kein angemessener Ausdruck. Es ist ein anderer Ansatz, nicht besser und nicht schlechter als andere Login-Systeme, und es hat seine Vor- und Nachteile.

                        So long,
                         Martin

                        --
                        Bitte komme jemand mit einem *g* zum Wochenende, damit nicht über mich gelacht wird.
                          (Gunnar Bittersmann)
                        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                      2. Moin tinita,

                        und warum müssen eigentlich angemeldete und nicht-angemeldete verschiedene urls haben?

                        Die Frage habe ich mir auch gestellt und es bei V4 geändert ;-)

                        LG,
                         CK

                2. deine Ausführungen sind eher arrogant statt eine wirkliche Hilfe ...

                  Du hast auf diese Nachfrage (erste Entgegnung) nicht reagiert. Wie ich schon schrieb ist Dir ohne dass Du Informationen vorlegst nicht zu helfen.

                  Das heißt: versuch es doch mal mit einem

                  <?php  
                  error_reporting(E_ALL);  
                  ?>
                  

                  ganz oben. Deine bisherige Fehlerbeschreibung ist eine Analogie zu

                  "Mein Auto geht nicht!"

                  Wenn dann selbst auf mehrfache und begründete Nachfrage nichts außer ungenauen und sehr weit gestellten Fragen kommt (also etwa "Wieso geht mein Auto nicht?") brauchst Du Dich über das allfällige

                  "Kein Wunder! Hat ja keine Beine!"

                  auch nicht wundern. Muss ja auch uns Spaß machen.

                  Jörg Reinholz

            2. Hallo,

              auch wenn du es als arrogant empfindest, bewundere ich doch Jörgs Geduld.

              erkläre mir doch bitte mal wie das Originalscript funktioniert,
              z.B. wenn man auf den Submit-Button klickt.

              Dann läuft erstmal ein gewöhnlicher HTML-Mechanismus ab: Formularversand:

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

              Der Browser fasst die name/value-Paare aller Formularelemente zusammen, ruft das im action-Attribut des Formulars angegebene Script mit der Methode POST auf und übergibt ihm die Formulardaten. Da das action-Attribut hier ein Leerstring ist, wird es auf den Namen der aktuell geladenen Ressource ergänzt; das Script ruft quasi "sich selbst" wieder auf).

              Der PHP-Teil, der dann vom Server ausgeführt wird, definiert zunächst ein paar Konfigurationsdetails, prüft dann, ob das Script überhaupt per POST aufgerufen wurde ...

              if ($_SERVER['REQUEST_METHOD'] === "POST")

              ... und übergeht die gesamte weitere Verarbeitung, wenn nicht. Dann wird halt wieder das Formular ausgegeben.

              Ansonsten baut das Script zunächst ein paar Mail-Header zusammen (verwechsle bitte nicht Mail-Header und HTTP-Header) und initialisiert den Mail-Text zunächst als leeren String.

              Dann läuft es durch die übergebenen POST-Daten ...

              foreach ($_POST as $name => $wert)

              ... setzt von jedem übergebenen Pärchen Namen und Wert (mit Trennzeichen dazwischen) zusammen und hängt das an den Nachrichtentext an, der dadurch Schritt für Schritt aufgebaut wird. Dass das Script sogar jeden Eintrag noch daraufhin prüft, ob es ein Array ist (z.B. bei mehreren Checkboxen, die eine Gruppe bilden), übergehe ich hier mal.

              Schließlich ruft das Script die PHP-Funktion mail() auf, übergibt ihr die Empfängeradresse und den Betreff aus dem Konfigurationsblock, den eben zusammengebauten Mailtext, und die eingangs generierten Mail-Header. Wenn der Aufruf von mail() scheitert, bricht das Script hier ab, andernfalls sendet es den HTTP-Header "Location:", der den Client veranlasst, eine ganz andere Seite aufzurufen (Redirect).

              Schließlich endet das Script definiert mit exit, damit nicht auch im Gut-Fall wieder das leere Formular ausgegeben wird.

              So. Und was hast du daran nicht verstanden? Das sind PHP-Grundlagen, würde ich sagen. Wenn du hier Verständnisprobleme hast und Jörg daher an deinem Grundwissen zweifelt, finde ich das absolut nachvollziehbar. Okay, die Art, wie er es formuliert hat, ist etwas zynisch, aber sonst wär's ja auch langweilig.

              Und wenn du noch weitere Hilfe brauchst, dann werde bitte konkret:
               * Was genau hast du getan? Code?
               * Was passiert? Oder: Was passiert nicht?
               * Welche Ressource wird aufgerufen? (nicht "irgendein anderes Script"!)

              So long,
               Martin

              --
              PCMCIA: People Can't Memorize Computer Industry Acronyms
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(