tobby1967: Formular handling php

Hallo,

ich habe auf meine hp ein Kontaktformular welches funzt , das via php eine Anfrage an meine e-mail weiterleitet.

Nun habe ich das ergänzt mit einer Option, das beim Absende eine Kopie an denAnwender geschickt werden kann (repektive die E-Mail, die der Anwender im Formular als seine Antortadrese angibt)

Ich habe noch recht wenig erfahrung mit php und das script ist auch nicht von mit geschrieben.

Bin für Hinwise dankbar, die für einen Laien verständlich sind.

Nachfolgend das script und danach das Formular.

Besten Dank!

	<?php
                define ('MAILTO', 'fassbender@werbefoto2000.de'); // Empfänger hier eintragen
                define ('MAILFROM', "Kontaktformular"); // ggfls. Absender hier eintragen
                define ('CHARSET', "ISO-8859-15"); // Zeichenkodierung ggfls. anpassen
                $Pflichtfelder = array('Eingabe_Name','Eingabe_Email','Eingabe_Mitteilung'); // ggfls. weitere Pflichtfelder angeben
                
                
                $AddHeader = 'Content-Type: text/plain; charset='.CHARSET;
                if(MAILFROM) $AddHeader .= chr(13).chr(10).'From: '.MAILFROM;
                
                if($Formular_abgeschickt = !empty($_POST)) {
                  $Formular_leer = true;
                  if(ini_get('magic_quotes_runtime')) ini_set('magic_quotes_runtime',0);
                  $_POST = array_map('Formular_Daten', $_POST);
                }
                function Formular_Daten($val) {
                  global $Formular_leer;
                  if(is_array($val)) return array_map('Formular_Daten', $val);
                  if(ini_get('magic_quotes_gpc')) $val = stripslashes($val);
                  if($val = trim($val)) $Formular_leer = false;
                  return $val;
                }
                
                function Formular_Pflichtfelder() {
                  global $Pflichtfelder;
                  $Fehler = '';
                  foreach ($Pflichtfelder as $Feld) {
                    $key = str_replace(' ','_',$Feld);
                    if(!(isset($_POST[$key]) && trim($_POST[$key])!=='')) {
                      if($Fehler) $Fehler .= '<br />';
                      $Fehler .= 'Pflichtfeld "' . $Feld . '" nicht ausgefüllt.';
                    }
                  }
                  return $Fehler;
                }
                
                function Formular_neu($log='.htPOSTdata.txt') {
                  if(file_exists($log) && is_readable($log)
                   && file_get_contents($log) == print_r($_POST,true))
                  return false;
                  if($handle=@fopen($log, 'w')) {
                    fwrite($handle, print_r($_POST,true)); fclose($handle);
                  }
                  return true;
                }
                
                function Formular_Check() {
                  global $Formular_leer;
                  if($Formular_leer) $Fehler = 'Keine Daten eingetragen.';
                  elseif(!$Fehler = Formular_Pflichtfelder()) {
                    if(!Formular_neu()) $Fehler = 'Nachricht war bereits verschickt.';
                  }
                  return $Fehler;
                }
                
                function Formular_Eingabe($Feldname, $def='') {
                  if(isset($_POST[$Feldname]) && $_POST[$Feldname]!=='')
                    echo htmlspecialchars($_POST[$Feldname],ENT_COMPAT,CHARSET);
                  else echo $def;
                }
                ?>

<form class="form-horizontal" name="autoSumForm" action="<?php echo $_SERVER['../SCRIPT_NAME']; ?>" method="post" enctype="multipart/form-data" accept-charset="<?php echo CHARSET; ?>">
<fieldset>
<div id="formular_kontaktdaten">
<p><small>Die mit * gekennzeichneten Felder müssen zur Übermittlung Ihrer Bestellung ausgefüllt sein.</small></p>
<div class="row-fluid">
<div class="span6">
<div class="control-group">
<label class="control-label" for="inputContactAnrede">Anrede</label>   
<div class="controls">
<select name="Anrede" size="1">
<option>Herr</option>
<option>Frau</option>
</select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="Eingabe_Name">Titel, Vor-/Nachname *</label>
<div class="controls">
<input class="input-xlarge" type="text" id="Eingabe_Name"  name="Eingabe_Name" value="<?php Formular_Eingabe('Eingabe_Name'); ?>">
</div>
</div>
<div class="control-group">
<label class="control-label" for="Eingabe_Firmennamen">Firmenname</label>
<div class="controls">
<input class="input-xlarge" type="text" id="Eingabe_Firmennamen" name="Eingabe_Firmennamen" value="<?php Formular_Eingabe('Eingabe_Firmennamen'); ?>">
</div>
</div>
<div class="control-group">
<label class="control-label" for="Eingabe_Email">E-Mail *</label>
<div class="controls">
<input class="input-xlarge" type="text" id="Eingabe_Email" name="Eingabe_Email"  value="<?php Formular_Eingabe('Eingabe_Email'); ?>">
</div>
</div>
<div class="control-group">
<label class="control-label" for="Eingabe_Telefon">Telefon</label>
<div class="controls">
<input class="input-xlarge" type="text" id="Eingabe_Telefon" name="Eingabe_Telefon" value="<?php Formular_Eingabe('Eingabe_Telefon'); ?>">
</div>
</div>
<div class="control-group">
<label class="control-label" for="Eingabe_Mitteilung">Mitteilung *</label>
<div class="controls">
<textarea name="Eingabe_Mitteilung" id="Eingabe_Mitteilung" rows="5" placeholder="Mitteilung" class="input-xlarge"><?php Formular_Eingabe('Eingabe_Mitteilung'); ?></textarea>
</div><!--/controls-->
</div><!--/control-group-->
</div><!--/.span6-->
</div><!--/row-fluid-->
<div class="row-fluid">
<div class="span8">
<hr>
<label class="checkbox">
<input type="checkbox" name="EmailCC" value="EmailCC"  checked id="check1"> Kopie der Mitteilung an die oben angegebene E-Mail Adresse senden.
</label>
<hr>
</div><!--/.span8-->
</div><!--/.row-fluid-->  
<div class="row-fluid">
<div class="span4">
<a href="javascript:document.autoSumForm.reset()"><button class="btn btn-block btn-info" type="button">Eingaben löschen</button></a>                                        
</div><!--/.span3-->                                    
<div class="span4">
<a href="javascript:document.autoSumForm.reset()"><button class="btn btn-block btn-success" type="submit" >Mitteilung verschicken</button></a>                                       
</div><!--/.span3-->
</div><!--/.row-fluid-->                                                                            
</fieldset>                            
</form>
  1. Hallo tobby1967,

    Nun habe ich das ergänzt mit einer Option, das beim Absende eine Kopie an denAnwender geschickt werden kann (repektive die E-Mail, die der Anwender im Formular als seine Antortadrese angibt)

    Tu das nicht. Damit ermöglichst du den Spammern, E-Mails über deinen Server an beliebige Personen zu senden. Das ist keine gute Idee. Das wird ausgenutzt werden.

    LG,
    CK

    1. Hallo tobby1967,

      Nun habe ich das ergänzt mit einer Option, das beim Absende eine Kopie an denAnwender geschickt werden kann (repektive die E-Mail, die der Anwender im Formular als seine Antortadrese angibt)

      Tu das nicht. Damit ermöglichst du den Spammern, E-Mails über deinen Server an beliebige Personen zu senden. Das ist keine gute Idee. Das wird ausgenutzt werden.

      LG,
      CK

      --
      > CK kennt Wayne Das stimmt natürlich - ich erlebe aber selber immer wieder, das ich Dinge über Kontaktformulare poste und nie belegen kann, was ich geschickt habe. Stationär könnte man es sich noch ausdrucken aber mobil verschwindet es im Nirvana. Und es ist ja mit einer "zustimm" Option versehen, so dass der Missbrauch wohl nur händisch erfolgennkönnte. Daher trotzdem die freundliche Bitte für ein Tipp für den passenden Code. Danke

      Das stimmt natürlich - ich erlebe aber selber immer wieder, das ich Dinge über Kontaktformulare poste und nie belegen kann, was ich geschickt habe. Stationär könnte man es sich noch ausdrucken aber mobil verschwindet es im Nirvana.

      Und es ist ja mit einer "zustimm" Option versehen, so dass der Missbrauch wohl nur händisch erfolgennkönnte.

      Daher trotzdem die freundliche Bitte für ein Tipp für den passenden Code.

      Danke

      1. Hallo tobby1967,

        Tu das nicht. Damit ermöglichst du den Spammern, E-Mails über deinen Server an beliebige Personen zu senden. Das ist keine gute Idee. Das wird ausgenutzt werden.

        bitte vermeide Vollzitate, zitiere nur das, worauf du dich konkret beziehst.

        Das stimmt natürlich - ich erlebe aber selber immer wieder, das ich Dinge über Kontaktformulare poste und nie belegen kann, was ich geschickt habe. Stationär könnte man es sich noch ausdrucken aber mobil verschwindet es im Nirvana.

        Das ist u.U. tatsächlich ein Problem. Allerdings hilft dir das tatsächlich nicht weiter.

        Und es ist ja mit einer "zustimm" Option versehen, so dass der Missbrauch wohl nur händisch erfolgennkönnte.

        Du meinst, ein Computerprogramm kann dein Formular nicht analysieren und den entsprechenden Haken setzen so wie es x-beliebige Mailadressen in dein Formular eintragen kann und mit deiner Unterstützung, bzw. der deines Servers, Viagra-Werbung und Trojaner versendet.

        Daher trotzdem die freundliche Bitte für ein Tipp für den passenden Code.

        Ich würde das lassen.

        Bis demnächst
        Matthias

        --
        Signaturen sind bloed (Steel) und Markdown ist mächtig.
        1. Du meinst, ein Computerprogramm kann dein Formular nicht analysieren und den entsprechenden Haken setzen so wie es x-beliebige Mailadressen in dein Formular eintragen kann und mit deiner Unterstützung, bzw. der deines Servers, Viagra-Werbung und Trojaner versendet.

          Daher trotzdem die freundliche Bitte für ein Tipp für den passenden Code. Ich würde das lassen.

          Ich wollte hier eigentlich keine Diskussion über Sinn oder Unsinn lostreten. Man kann das ganze ja noch über eine Logikabfrage sichern.

          Daher noch mal die simple Bitte: Nur feedback zum Code ;-)

          1. Hallo tobby1967,

            Ich wollte hier eigentlich keine Diskussion über Sinn oder Unsinn lostreten. Man kann das ganze ja noch über eine Logikabfrage sichern.

            Du musst hier damit rechnen, dass deine Fragestellung von mehreren Seiten und unter vielen Aspekten betrachtet wird. Das macht den Mehrwert dieses Forums aus.

            Daher noch mal die simple Bitte: Nur feedback zum Code ;-)

            Und deshalb wird die Forderung nach einer solchen Einschränkung nicht funktionieren. Schau dir die Bibliothek swiftmailer an. Eine kurze deutschsprachige Seite gibts dazu im Wiki. http://wiki.selfhtml.org/wiki/PHP/Anwendung_und_Praxis/Formmailer-Advanced

            Bis demnächst
            Matthias

            --
            Signaturen sind bloed (Steel) und Markdown ist mächtig.
          2. Hallo tobby1967,

            Ich wollte hier eigentlich keine Diskussion über Sinn oder Unsinn lostreten. Man kann das ganze ja noch über eine Logikabfrage sichern.

            Du kannst das nicht absichern. Glaubs mir, da verzweifeln Firmen wie Google bereits dran und da arbeiten deutlich hellere Köpfe als du und ich. Deshalb wurden Captchas immer unleserlicher.

            Daher noch mal die simple Bitte: Nur feedback zum Code ;-)

            Schau dir diese Zeile an:

            if(MAILFROM) $AddHeader .= chr(13).chr(10).'From: '.MAILFROM;
            

            Im gleichen Stil musst du den Header Cc hinzufügen, mit der Mail-Adresse des Users. Achte jedoch darauf, dass die Mail-Adresse keine Nickeligkeiten wie Kommas oder so enthält, sonst kann der Spammer gleich Massenmails verschicken.

            LG,
            CK

            1. Tach!

              Schau dir diese Zeile an:

              if(MAILFROM) $AddHeader .= chr(13).chr(10).'From: '.MAILFROM;
              

              Im gleichen Stil musst du den Header Cc hinzufügen, mit der Mail-Adresse des Users. Achte jedoch darauf, dass die Mail-Adresse keine Nickeligkeiten wie Kommas oder so enthält, sonst kann der Spammer gleich Massenmails verschicken.

              Auch Zeilenumbruchszeichen in den Eingabewerten deuten auf einen Missbrauchsversuch hin und man kann die Verarbeitung an der Stelle abbrechen.

              dedlfix.