Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular

Einklappen

Neue Werbung 2019

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

  • Formular

    Hallo,
    als Neueinsteiger in Sachen php habe ich das Problem, dass mein Formular auf meiner Homepage per Mailhandler nicht versendet wird.
    Kann bitte mal jemand drüber schauen und mir evtl. weiterhelfen?
    Danke.

    Hier die Dateien:
    PHP-Code:
    <?php
        $owner_email 
    $_POST["meine E-Mailadresse ist hier eingetragen"];
        
    $headers 'From:' $_POST["email"];
        
    $subject 'Eine Nachricht von ' $_POST["name"];
        
    $messageBody "";
        
        if(
    $_POST['name']!='nope'){
            
    $messageBody .= '<p>Visitor: ' $_POST["name"] . '</p>' "\n";
            
    $messageBody .= '<br>' "\n";
        }
        if(
    $_POST['email']!='nope'){
            
    $messageBody .= '<p>Email Address: ' $_POST['email'] . '</p>' "\n";
            
    $messageBody .= '<br>' "\n";
        }else{
            
    $headers '';
        }
        
        if(
    $_POST['phone']!='nope'){        
            
    $messageBody .= '<p>Phone Number: ' $_POST['phone'] . '</p>' "\n";
            
    $messageBody .= '<br>' "\n";
        }    

        if(
    $_POST['message']!='nope'){
            
    $messageBody .= '<p>Message: ' $_POST['message'] . '</p>' "\n";
        }
        
        if(
    $_POST["stripHTML"] == 'true'){
            
    $messageBody strip_tags($messageBody);
        }
        
        try{
            if(!
    mail($owner_email$subject$messageBody$headers)){
                throw new 
    Exception('mail failed');
            }else{
                echo 
    'mail sent';
            }
        }catch(
    Exception $e){
            echo 
    $e->getMessage() ."\n";
        }
    ?>
    Formular:

    Code:
    <form id="form">
                    <div class="text-info">Senden Sie uns eine E-Mail. Alle Felder mit einem * bitte ausfüllen.</div>
                    <div class="success">Kontaktformular wurde erfolgreich übertragen!<br>
                    <strong>Wir werden uns allsbald um Ihr Anliegen kümmern.</strong> </div>
                    <fieldset>
                        <label class="name">
                            <span class="title">Name*</span>
                            <input type="text" value=" ">
                            <br class="clear">
                            <span class="error error-empty">*Keine korrekte Angaben.</span><span class="empty error-empty">*Bitte ausfüllen.</span>
                        </label>
                        <label class="email">
                            <span class="title">E-Mail*</span>
                            <input type="text" value=" ">
                            <br class="clear">
                            <span class="error error-empty">*Das ist keine korrekte E-Mailadresse..</span><span class="empty error-empty">*Bitte ausfüllen.</span>
                        </label>
                        <label class="phone">
                            <span class="title">Telefon*</span>
                            <input type="tel" value=" ">
                            <br class="clear">
                            <span class="error error-empty">*Keine korrekte Angaben.</span><span class="empty error-empty">*Bitte ausfüllen.</span>
                        </label>
                        <label class="message">
                            <span class="title">Ihre Nachricht*</span>
                            <textarea> </textarea>
                            <br class="clear">
                            <span class="error">*Dieser Text ist zu kurz...</span> <span class="empty">*Bitte ausfüllen.</span>
                        </label>
                        <div class="clear"></div>
                        <a data-type="submit" class="button-2"> NACHRICHT SENDEN</a>
                	</fieldset>
                </form>
    Javascript:
    Code:
    //forms
    ;(function($){
    	$.fn.forms=function(o){
    		return this.each(function(){
    			var th=$(this)
    				,_=th.data('forms')||{
    					errorCl:'error',
    					emptyCl:'empty',
    					invalidCl:'invalid',
    					notRequiredCl:'notRequired',
    					successCl:'success',
    					successShow:'4000',
    					mailHandlerURL:'bat/MailHandler.php',
    					ownerEmail:'meine E-Mailadresse ist hier eingetragen',
    					stripHTML:true,
    					smtpMailServer:'localhost',
    					targets:'input,textarea',
    					controls:'a[data-type=reset],a[data-type=submit]',
    					validate:true,
    					rx:{
    						".name":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
    						".state":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
    						".email":{rx:/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,target:'input'},
    						".phone":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
    						".fax":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
    						".message":{rx:/.{20}/,target:'textarea'}
    					},
    					preFu:function(){
    						_.labels.each(function(){
    							var label=$(this),
    								inp=$(_.targets,this),
    								defVal=inp.val(),
    								trueVal=(function(){
    											var tmp=inp.is('input')?(tmp=label.html().match(/value=['"](.+?)['"].+/),!!tmp&&!!tmp[1]&&tmp[1]):inp.html()
    											return defVal==''?defVal:tmp
    										})()
    							trueVal!=defVal
    								&&inp.val(defVal=trueVal||defVal)
    							label.data({defVal:defVal})								
    							inp
    								.bind('focus',function(){
    									inp.val()==defVal
    										&&(inp.val(''),_.hideEmptyFu(label),label.removeClass(_.invalidCl))
    								})
    								.bind('blur',function(){
    									_.validateFu(label)
    									if(_.isEmpty(label))
    										inp.val(defVal)
    										,_.hideErrorFu(label.removeClass(_.invalidCl))											
    								})
    								.bind('keyup',function(){
    									label.hasClass(_.invalidCl)
    										&&_.validateFu(label)
    								})
    							label.find('.'+_.errorCl+',.'+_.emptyCl).css({display:'block'}).hide()
    						})
    						_.success=$('.'+_.successCl,_.form).hide()
    					},
    					isRequired:function(el){							
    						return !el.hasClass(_.notRequiredCl)
    					},
    					isValid:function(el){							
    						var ret=true
    						$.each(_.rx,function(k,d){
    							if(el.is(k))
    								ret=d.rx.test(el.find(d.target).val())										
    						})
    						return ret							
    					},
    					isEmpty:function(el){
    						var tmp
    						return (tmp=el.find(_.targets).val())==''||tmp==el.data('defVal')
    					},
    					validateFu:function(el){							
    						el.each(function(){
    							var th=$(this)
    								,req=_.isRequired(th)
    								,empty=_.isEmpty(th)
    								,valid=_.isValid(th)								
    							
    							if(empty&&req)
    								_.showEmptyFu(th.addClass(_.invalidCl))
    							else
    								_.hideEmptyFu(th.removeClass(_.invalidCl))
    							
    							if(!empty)
    								if(valid)
    									_.hideErrorFu(th.removeClass(_.invalidCl))
    								else
    									_.showErrorFu(th.addClass(_.invalidCl))								
    						})
    					},
    					getValFromLabel:function(label){
    						var val=$('input,textarea',label).val()
    							,defVal=label.data('defVal')								
    						return label.length?val==defVal?'nope':val:'nope'
    					}
    					,submitFu:function(){
    						_.validateFu(_.labels)							
    						if(!_.form.has('.'+_.invalidCl).length)
    							$.ajax({
    								type: "POST",
    								url:_.mailHandlerURL,
    								data:{
    									name:_.getValFromLabel($('.name',_.form)),
    									email:_.getValFromLabel($('.email',_.form)),
    									phone:_.getValFromLabel($('.phone',_.form)),
    									fax:_.getValFromLabel($('.fax',_.form)),
    									state:_.getValFromLabel($('.state',_.form)),
    									message:_.getValFromLabel($('.message',_.form)),
    									owner_email:_.ownerEmail,
    									stripHTML:_.stripHTML
    								},
    								success: function(){
    									_.showFu()
    								}
    							})			
    					},
    					showFu:function(){
    						_.success.slideDown(function(){
    							setTimeout(function(){
    								_.success.slideUp()
    								_.form.trigger('reset')
    							},_.successShow)
    						})
    					},
    					controlsFu:function(){
    						$(_.controls,_.form).each(function(){
    							var th=$(this)
    							th
    								.bind('click',function(){
    									_.form.trigger(th.data('type'))
    									return false
    								})
    						})
    					},
    					showErrorFu:function(label){
    						label.find('.'+_.errorCl).slideDown()
    					},
    					hideErrorFu:function(label){
    						label.find('.'+_.errorCl).slideUp()
    					},
    					showEmptyFu:function(label){
    						label.find('.'+_.emptyCl).slideDown()
    						_.hideErrorFu(label)
    					},
    					hideEmptyFu:function(label){
    						label.find('.'+_.emptyCl).slideUp()
    					},
    					init:function(){
    						_.form=_.me						
    						_.labels=$('label',_.form)
    
    						_.preFu()
    						
    						_.controlsFu()
    														
    						_.form
    							.bind('submit',function(){
    								if(_.validate)
    									_.submitFu()
    								else
    									_.form[0].submit()
    								return false
    							})
    							.bind('reset',function(){
    								_.labels.removeClass(_.invalidCl)									
    								_.labels.each(function(){
    									var th=$(this)
    									_.hideErrorFu(th)
    									_.hideEmptyFu(th)
    								})
    							})
    						_.form.trigger('reset')
    					}
    				}
    			_.me||_.init(_.me=th.data({forms:_}))
    			typeof o=='object'
    				&&$.extend(_,o)
    		})
    	}
    })(jQuery)
    $(window).load(function(){
    	$('#form').forms({
    		ownerEmail:'#'
    	})
    })

  • #2
    Code:
    <form id="form">
    Fehlt da nicht etwas?

    Kommentar


    • #3
      Debugge: http://php-de.github.io/jumpto/leitfaden/

      - Schau ob das HTML im Form (valide) korrekt ist

      - Schau was in $_POST tatsächlich übergeben wird (siehe #2, ob per default dann nicht GET verwendet wird?!)

      - Schau welche Inhalte die Vars beim Mailversand haben

      - Verwende Mailerklassen zum versenden: http://php-de.github.io/jumpto/mail-class/

      - JS-Prüfung ist nett, aber sollte immer besser (auch) serverseitig passieren. Denn wenn ich dein Form bei mir nachbaue und dir auf deine Action Seite mit "schmutzigen" Werten einen Request mache (http://de.wikipedia.org/wiki/Cross-Site-Request-Forgery) , dann ist deine clientseitige JS Prüfung zahnlos und es können Folgen daraus entstehen (Mail/HTML-Injections, XSS etc.. ) http://php-de.github.io/#security

      LG
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        @TessaKavanagh
        Habe das Formular aus einem Template so übernommen.

        @hausl
        viele Böhmische Dörfer noch für mich

        Kommentar


        • #5
          Dann solltest du jetzt mal selfhtml aufrufen und nachschauen was hausl #3 und ich dir mit den Beiträgen sagen wollen. Stichwort Formulare und Übertragungsarten.

          Zu hausl's Spiegelstrichen (worauf er hinauswill):

          1. Das HTML ist nicht Valide

          2. schau nach was der Standard bei der Übertragung von Formularen ist wenn man es nicht definiert. Er schreibt ?! um dir einen Tipp zu geben was es wohl ist.

          3. Die Variablen sind derzeit immer leer siehe Punkt 2

          4. Ist ein freundlicher Hinweis wie du die E-Mail versenden solltest.

          5. Hat erst einmal nichts mit dem nicht "Versenden" zu tun ist aber ein sicherheitsrelevanter Hinweis den du beachten solltest.

          Kommentar


          • #6
            Zitat von TessaKavanagh
            Dann solltest du jetzt mal selfhtml aufrufen und nachschauen was hausl #3 und ich dir mit den Beiträgen sagen wollen.
            Oder du lässt machen: http://www.php.de/scriptboerse/

            LG
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Zitat von hausl Beitrag anzeigen
              Oder du lässt machen: http://www.php.de/scriptboerse/

              LG
              wird wohl erstmal das Beste sein...
              Diese Probleme der Sicherheit gibt es doch dann auch bei Formularen mit CMS Projekten (z.B. Websitebaker u. a.)?

              Kommentar


              • #8
                Ohne sich den Code der CMS anzuschauen schwer zu sagen, aber wenn die vernünftig programmiert wurden dann werden die i.d.R. die Daten per PHP Serverseitig überprüfen.
                Um jetzt mal auf den Punkt zu kommen dein Formular versendet mit GET (Standartwert wenn nichts anderes angewiesen wird) und du fragst im PHP Code die POST Werte ab.
                Deshalb kann das nie funktionieren.
                Du musst die Formular Methode im HTML Code auf POST umstellen.

                Das ist als wenn du deine Klamotten in den Kleiderschrank hängst und danach versuchst sie aus der Kommode wieder rauszuholen. Da kannst du die dann nicht finden

                Kommentar


                • #9
                  Zitat von TessaKavanagh Beitrag anzeigen
                  Ohne sich den Code der CMS anzuschauen schwer zu sagen, aber wenn die vernünftig programmiert wurden dann werden die i.d.R. die Daten per PHP Serverseitig überprüfen.
                  Um jetzt mal auf den Punkt zu kommen dein Formular versendet mit GET (Standartwert wenn nichts anderes angewiesen wird) und du fragst im PHP Code die POST Werte ab.
                  Deshalb kann das nie funktionieren.
                  Du musst die Formular Methode im HTML Code auf POST umstellen.
                  also method="post" ok.
                  dann müsste ja auch noch action=" " dazu kommen,
                  aber in diesem Fall welche Werte eintragen?

                  Kommentar


                  • #10
                    action="" ist im Ergebnis eine Referenz auf das aktuelle Dokument, nach meinem letzten Kenntnisstand ist es aber auch kein Valides HTML.

                    Kommentar


                    • #11
                      Zitat von TessaKavanagh Beitrag anzeigen
                      action="" ist im Ergebnis eine Referenz auf das aktuelle Dokument, nach meinem letzten Kenntnisstand ist es aber auch kein Valides HTML.
                      na jedenfalls funzt das Formular noch nicht.

                      Kommentar


                      • #12
                        stehen PHP Code und Formular in der gleichen Datei?

                        Kommentar


                        • #13
                          Zitat von TessaKavanagh Beitrag anzeigen
                          stehen PHP Code und Formular in der gleichen Datei?
                          ja / js Datei auch geändert bzw. angepasst

                          Kommentar


                          • #14
                            Dann überprüfe bitte mal den Inhalt der POST Variablen.

                            Kommentar


                            • #15
                              action="" ist im Ergebnis eine Referenz auf das aktuelle Dokument, nach
                              meinem letzten Kenntnisstand ist es aber auch kein Valides HTML.
                              Vor HTML 5 was ich weiß war es leer ok. Ab HTML5 kann man es ganz weglassen, und/aber wenn es vorhanden ist, darf es nicht leer sein.

                              Zitat von chrisverol
                              na jedenfalls funzt das Formular noch nicht.
                              Dann debugge, Hinweise gab's ja schon genug dazu, siehe zB #3.

                              LG
                              The string "()()" is not palindrom but the String "())(" is.

                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X