Ankündigung

Einklappen
Keine Ankündigung bisher.

Großes Problem mit Formmailer

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Großes Problem mit Formmailer

    Hallo zusammen,

    bin hier neu im Forum und auch so ziehmlich neu in der PHP-Welt. Hatte vor einiger Zeit mal ein paar Grundlagen gelernt die mir aber heute nicht mehr all zu viel zu helfen scheinen.

    Ich habe ein Formular in HTML geschrieben (was auch eigentlich alles soweit Ok ist). Dafür will es mit dem PHP-Formmailer nicht so ganz hinhauen.
    Im Formular gibt es jeweils 3 Felder (Name, TelefonNr und E-Mail)
    Name und E-Mail sollen Pflichtfelder sein, die E-Mail-Angabe ist freiwillig.
    Diese 3 Felder sollen an die im Code angegebene E-Mailadresse geschickt werden. Ist das ganze erfolgreich versandt, wird der Nutzer auf deine Dankesseite geleitet, hat er die Pflichtfelder nicht ausgefüllt wird er auf eine Fehlerseite geleitet. Die Eingaben sollten als Textnachricht geliefert werden.

    Folgendes funktioniert bisher nicht:
    Auch bei mit Text gefüllten Pflichtfeldern, wird der Benutzer auf die Fehlerseite geleitet. Die E-Mail des Formulars wird höchstwarscheinlich auch nicht versendet.
    Ich weiß da einfach nicht mehr weiter.

    Hier der Code:

    Code:
    <?php 
     $empfaenger = "empfaenger@empfaenger.de"; 
     $betreff    = "Test"; 
     $email      = "absender@vorgegeben.de";
     $mailtext   = "Name: $name 
     Telefon: $telefon
     Betreff: $auswahl";  
    
     if(empty($name) || empty($telefon)) 
     { 
     header("Location: fehler.html"); 
     } 
     else 
     { 
     mail("$empfaenger", "$betreff", "$mailtext", "From: $email"); 
     header("Location: danke.html"); 
     } 
     ?>

    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <html> 
    <head> 
    <title>Beispiel</title> 
    </head> 
    <body> 
    <form action="mail.php" method="post"> 
    <table border="0" width="500" cellspacing="0" cellpadding="0" align="center">
     <tr> 
      <td width="200">Name <b>*</b></font></td> 
      <td width="300"><input type="text" name="name"></td> 
     </tr> 
     <tr> 
      <td height="15" colspan="2"></td> 
     </tr> 
     <tr> 
      <td width="200">Telefon <b>*</b></td> 
      <td width="300"><input type="text" name="telefon"></td> 
     </tr> 
     <tr> 
      <td height="5" colspan="2"></td> 
     </tr> 
     <tr> 
      <td width="200">eMail </td> 
      <td width="300"><input type="text" name="email"></td> 
     </tr> 
     <tr> 
      <td height="15" colspan="2"></td> 
     </tr> 
     <tr> 
      <td width="200">Formular</td> 
      <td width="300"><input type="submit" value="Senden"></td> 
     </tr> 
     <tr> 
      <td height="15" colspan="2"></td> 
     </tr> 
     <tr> 
      <td width="200"></td> 
      <td width="300"><b>*</b> - notwendige Angaben!</td> 
     </tr> 
    </table> 
    </form> 
    </body> 
    </hml>
    Ich hoffe auf Hilfe... Danke

  • #2
    Uh .. deine Grundlagen sind wohl PHP 4 und Konsorten (oder gar die 3) ...

    PHP-Code:
    if (empty($name) || empty($telefon)) 
    das kann so nicht funktionieren, weil die EingabeFelder aus dem Formular nicht mehr als Globale Variablen vorhanden sind.

    $_POST['feldname'] musst du an allen Stellen verwenden, wo du in deinem Code dich auf Eingabefelder beziehst

    also statt $name -> $_POST['name'], $telefon -> $_POST['telefon'] und so weiter

    dies ist jedenfalls der Grund, dass du auf der Fehlerseite landest, denn in der Tat sind deine abgefragten Variablen LEER, weil sie nicht mal definiert sind

    Kommentiere mal bitte die Header-Weiterleitungen aus, und setze das Error-Reporting ein und auf vernünftige Werte, dann schreit PHP schon (undefined Variable )

    Und mal ganz allgemein .. Tabellen-Mißbrauch fürs Layout .. sind wir in den 90ern ? ...

    Kommentar


    • #3
      Ui, erstmal super lieben Dank für die mehr als nur schnelle Antwort.
      Naja in den 90ern zum glück nicht mehr die Funktionalität ist mir eigentlich nur wichtig (da wirds bestimmt gemeckere geben ).
      Ok ich probier das ganze mal aus... hatte Anfangs mal $_REQUEST statt $_Post was du mir hier vorgeschlagen hast, aber mit $_REQUEST wars irgendwie dann komischerweise ganz vorbei (vielleicht auch nicht komisch). Erstmal Danke, ich probier deine Tips mal aus

      Kommentar


      • #4
        Ok... nun habe ich das Problem... gebe ich nichts ein, lade ich auf der Dankensseite, gebe ich etwas in die Felder ein komme ich auf die Fehlerseite... da stimmt doch forne und hinten nichts was ich da getrieben habe...

        Kommentar


        • #5
          kannst du mal deinen aktuellen COde - zumindest die Formular-Verarbeitung zeigen?

          Kommentar


          • #6
            Solche Aufgabenstellung löst man mit einem Affenformular ohne Header/Location.

            Pseudocode
            PHP-Code:
            if (_Formular abgeschickt_) {
              
            _Pruefe Eingaben_
              
            if ( _Fehler bei der Eingabe_ ) {
                include 
            'formular.php'// Bereits eingegebene Daten in die Felder setzen
              
            } else {
                
            _Daten verarbeiten_ // z.B. Speichern oder Mail senden
                
            include 'dankeseite.php';
              }
            } else {
              include 
            'formular.php'// Mit leeren Eingabefeldern

            Kommentar


            • #7
              Hallo!

              Konnte am Wochenende leider aus Zeitgründen nichts weiter daran machen und ahbe nur eine Kleinigkeit geändert.
              @ eagle275 Der Code sind im Moment folgendermaßen aus:

              PHP-Code:
              <?php 
               $empfaenger 
              "empfaenger@blabla.de"
               
              $betreff    "ihr-betreff"
               
              $email      "absender@blabla.de";
               
              $mailtext   "Name: $name 
               Telefon: 
              $telefon
               Betreff: 
              $auswahl";  

               if(
              $_POST['name'] || $_POST['telefon']) 
               { 
               
              header("Location: fehler.html"); 
               } 
               else 
               { 
               
              mail("$empfaenger""$betreff""$mailtext""From: $email"); 
               
              header("Location: danke.html"); 
               } 
               
              ?>

              @ Wolla, danke für deine Antwort, ich schau mir da gerade mal ein paar Tuts an. Nur eine Frage bleibt mir da noch... Ich habe des öfteren gelesen, dass manche davon abraten HTML -und PHP-Code im selben Script zu verwenden. Beim Affenformular scheint das aber üblich zu sein. Oder ist an den Aussagen überhaupt nichts dran?

              Kommentar


              • #8
                Wo wird da HTML benutzt? Ich sehe keine < > Tags!?

                include ist in den meißten Fällen header aufjedenfall vorzuziehen. (Für die Mecker-Fraktion: Bitte das Wort "meißten" beachten. Danke.)

                Kommentar


                • #9
                  @ z3r0, wenn du an den Anfang scrollst siehst du die HTML-Tags. In meinem letzten Post meinte ich nur, dass ich bis jetzt mehrfach gelesen ahbe, dass man PHP-Code und HTML-Code besser voneinander trennen sollte und nicht in einem Script verwenden sollte. Da war meine Frage nur ob das stimmt oder nicht, ich ahbe nicht behauptet, dass ich hier jetzt HTML-Code drin hätte. Wie man oben sieht sind die Sprachen getrennt.

                  Und zu deinem letzten Satz... Was???

                  Kommentar


                  • #10
                    Achso, du meintest den ersten.

                    Ja, üblich vielleicht nicht, ich kenn dein Projekt jetzt nich, aber man brauch nich immer mit Kanonen auf Spatzen schießen! Also m.M. liegt das im Rahmen, falls nicht -> (H)MVC-Pattern anschauen! Lieber erstmal MVC! Reicht auch aus.

                    Und zu DEINEM letzten Satz ... Was Was? Ich meinte das genau so wie ichs geschrieben hab. Falls unklar -> Manual hilft weiter. (Vergiss die Klammer dahinter, die war nicht an dich.)

                    Kommentar


                    • #11
                      Ok, ich habe gerade noch einmal etwas rumgebastelt. Mein Code schaut jetzt so aus:

                      PHP-Code:
                      <?php 
                       $empfaenger 
                      "empfaenger@blabla.de"
                       
                      $betreff    "ihr-betreff"
                       
                      $email      "absender@blabla.de";
                       
                      $mailtext   "Name: $name 
                       Telefon: 
                      $telefon
                       Betreff: 
                      $auswahl";  

                       if(empty (
                      $_REQUEST['name']) == TRUE  
                       
                      OR
                       empty(
                      $_REQUEST['telefon']) == TRUE
                       { 
                       
                      header("Location: fehler.html"); 
                       } 
                       else 
                       { 
                       
                      mail("$empfaenger""$betreff""$mailtext""From: $email"); 
                       
                      header("Location: danke.html"); 
                       } 
                       
                      ?>
                      Das gute ist jetzt, es funktioniert soweit, dass ich auf die Dankensseite gelange wenn beide Pflichtfelder (Telefon und Name) ausgefüllt wurden und auf die Fehlerseite, wenn eines der beiden Pflichtfelder nicht ausgefüllt wurde. Genau so sollte es auch erstmal sein.
                      Nur das größte Problem an der Sache ist jetzt, dass keine E-Mail an meine angegebene E-Mail-Adresse geschickt wird.
                      Habt ihr da vielleicht noch eine Hilfe für mich?

                      Wie schon erwähnt ist der Absender wie der Empfänger der E-Mail-Adresse schon im Quellcode angegeben (nur hier veränderte Adressen). Die E-mail-Adresse wo im Formular angegeben werden kann, soll mit den beiden anderen Feldern (Name und Telefonnummer) nur als Text gesendet werden.

                      Ich hoffe ihr blickt da besser durch als ich und habt da Idee für das Problem. Danke

                      Kommentar


                      • #12
                        Großes Problem mit Formmailer

                        Kurze Frage...was glaubst du denn, was hier passiert?
                        PHP-Code:
                        mail("$empfaenger""$betreff""$mailtext""From: $email"); 
                        Und wenn du schon die mail-Funktion und keinen PHP-Mailer verwenden möchtest, schau dir bitte die Dokumentation an. Beispiel #4 tut dir sicher gut.

                        Kommentar


                        • #13
                          Naja, ich habe zumindest mal gehofft, dass hierdurch die Mail versendet wird (an den angegebenen Empfänger + angegebenen Betreff & den Mailinhalt). Was anscheinend bzw. definitiv nicht der Fall ist....

                          Und zu Der Doku Bsp. 4, heißt das so viel wie, ich muss den Header so aufbauen wie im Beispiel, dass es funktioniert? Und was der Content-type'-Header macht ist mri eigentlich auch relativ unklar. Ich schau mal dass ich da mal noch etwas nachlese

                          Achso... ich habe nie gesagt, dass ich zwingend die Mail-Methode verwenden will. Ich will nur, dass es funktioniert.

                          Danke bis hierher mal

                          Kommentar


                          • #14
                            Großes Problem mit Formmailer

                            Hoffen ist meistens eher schlecht
                            Zitat von Kologe87
                            Und zu Der Doku Bsp. 4, heißt das so viel wie, ich muss den Header so aufbauen wie im Beispiel, dass es funktioniert?
                            Müssen tust du das nicht, es steht dir ja frei, in welchem Format du mail versenden magst und an wen diese geht ( to, cc, bcc usw. ), ob mit Antwortmöglichkeit usw. Es ist eben nur ein Beispiel und du solltest dir anhand des Beispiel mögliche Optionen für dich aussuchen. Probier es doch einfach mal aus und schau was dabei raus kommt. Das Beispiel ist ganz gut kommentiert und einfach aufgebaut.

                            Wenn du eine mail-Klasse einsetzen möchtest, gibt dir robo47 hilfreiche Tipps und Links zum lesen.

                            Kommentar


                            • #15
                              Was mir da jetzt so spontan auffallen würde, wäre dass der Absender eventuell fehlt?
                              Komm mir hier grad vor als wäre ich total bescheuert ... Wie man bei so einer kleinen Anwendung so festhängen kann.

                              Ja das Beispiel ist gut. Hab nur gerade noch gelesen, dass die Mail-Methode wohl bei vielen Mails wohl nicht die beste Lösung ist. Ich werde es trotzdem erstmal versuchen umzusetzen, dass wenigstens überhaupt mal was passiert und dann eventuell zum PHPMailer umswitchen. Da hab ich auch gerade noch ein schönes Beispiel gefunden.

                              Danke

                              Kommentar

                              Lädt...
                              X