Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Pflichtfelder angegeben aber wird nicht überprüft?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Pflichtfelder angegeben aber wird nicht überprüft?

    Hallo!
    Bei einem Formular auf einer Seite sind die Pflichtfelder angegeben, die E-Mail wird aber trotzdem verschickt, auch wenn man die nicht angegeben hat.. ich poste mal die versend-Datei...

    PHP-Code:
    <?

    include('config.php');

    global $emailfield;    
    global $required;
    global $sentmessage;
    global $toemail;
    global $fields;
    global $subject;

    function checkEmail()
    {
        global $emailfield;    
        if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $_POST[$emailfield])) 
        {
            return "Invalid email address entered.";
        }
        else
        {
            return "";
        }
    }

    function checkRequired()
    {
        global $required;
        foreach ($required as $value) 
        {
            if($_POST[$value]=="")
            {
                if(!$rtn)
                {
                    $rtn=$value;
                }
                else
                {
                    $rtn="$rtn, $value";
                    $s="s";
                }
            }
        }
        if($rtn) $rtn = "You must enter values for the following field$s: $rtn";
        return $rtn;
    }

    if($emailfield)
    {
        $emailError = checkEmail();
    }
    if($required)
    {
        $requiredError = checkRequired();
    }

    if($emailError)
    {
        $sentmessage = $emailError;
    }
    if($requiredError)
    {
        $error = $requiredError;
        if($error!="")
        {
            $sentmessage = $error;
        }
    }
    if($emailError || $requiredError)
    {
        $sentmessage = $sentmessage."<br>Go <a href='javascript:history.back(1)'>back</a> to form.";
    }

    $msg = array($name, $email, $message);
        $name = 'name';
        $email = 'email';
        $message = 'message';
             
    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

    $filename = "email.htm";
    $handle = fopen ($filename, "r");
        $contents = fread ($handle, filesize ($filename));
    fclose ($handle);

    foreach ($fields as $field)
    {
        $entry = $_POST[$field];
        if (!$entry) $entry = "No data submitted";
        $contents = str_replace ("::$field::",$entry,$contents);
    }

    mail($toemail, $subject, $contents, $headers);

    $filename = "danke.php";
    $handle = fopen ($filename, "r");
        $contents = fread ($handle, filesize ($filename));
    fclose ($handle);

    $contents = str_replace ("::SentMessage::",$sentmessage,$contents);

    echo $contents;
    ?>
    und hier die include config:
    PHP-Code:
    <?

    ## fields contains all the variables from the form to be sent in the email - CaSe SeNsItIvE
    $fields = array('message', 'firma', 'ansprechpartner', 'strasse', 'plzort', 'telefon', 'fax', 'email', 'broschure', 'rueckruf' );

    ## required contains all the variables that MUST be filled in - CaSe SeNsItIvE
    $required = array('ansprechpartner','strasse','plzort','email', 'message');

    ## emailfield contains the name of the variable to be validated as an email address
    $emailfield = "email";

    ## subject of the email to be sent
    $subject = 'Formular';

    ## email address to send responses to
    $toemail = '...';

    ## message displayed when email has been sucessfully sent
    $sentmessage = "Danke f&uuml;r das Ihre Bestellung, wir werden uns umgehend bei Ihnen melden."
    ?>
    also ich hab ehrlich gesagt kein Plan warum die Pflichtfelder nicht überprüft werden.... angegeben ist ja immerhin alles...

    lg denise

  • tomtaz
    antwortet
    Zitat von cycap Beitrag anzeigen
    na toll, jetzt hab ich geholfen ohne das date zu bekommen
    lol, tja so ist das heute cycap...

    Einen Kommentar schreiben:


  • cycap
    antwortet
    na toll, jetzt hab ich geholfen ohne das date zu bekommen

    Einen Kommentar schreiben:


  • pixelprinzessin
    antwortet
    PHP-Code:
      <?php

    $empfaenger 
    ".....";
    $ip getenv ("REMOTE_ADDR");
    $betreff 'Formular über ';
    $arr = array(
    'Nachricht' => $_POST['message'],
    'Firma' => $_POST['firma'],
    'Ansprechpartner' => $_POST['ansprechpartner'],
    'Straße' => $_POST['strasse'],
    'PLZ Ort' => $_POST['plzort'],
    'Telefon' => $_POST['telefon'],
    'Fax' => $_POST['fax'],
    'E-Mail' => $_POST['email'],
    'Imagebroschüre' => $_POST['broschure'],
    'Rückruf' => $_POST['rueckruf'],
    );

    function 
    checkEmail$email )
                {
                   
    $nonascii      "\x80-\xff";    
                
    $nqtext        "[^\\\\$nonascii\015\012\"]";
                
    $qchar         "\\\\[^$nonascii]";
                
    $normuser      '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
                
    $quotedstring  "\"(?:$nqtext|$qchar)+\"";
                
    $user_part     "(?:$normuser|$quotedstring)";
                
    $dom_mainpart  '[a-zA-Z0-9][a-zA-Z0-9._-]*\\.';
                
    $dom_subpart   '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*';
                
    $dom_tldpart   '[a-zA-Z]{2,5}';
                
    $domain_part   "$dom_subpart$dom_mainpart$dom_tldpart";
                
    $pattern       "$user_part\@$domain_part";
        
                if (!
    preg_match"/^$pattern$/"$email ))
                {
                return 
    FALSE;
                }
                else
                {
                return 
    TRUE;
                }
                }

    if(
    $_REQUEST['senden'])
    {     
        if (
    $_POST['email_address'] !== '') {
        exit(
    '<h1>Es ist ein Fehler aufgetreten!</h1>Sie haben ein Feld ausgefüllt, das nicht ausgefüllt weden darf.</h1>');
        }
      else {    
        
    $fehler = array();
        if(empty(
    $_REQUEST['message']))
                {
            
    $fehler['message'] = "Bitte teilen Sie uns Ihr Anliegen mit!";
                }
        if(empty(
    $_REQUEST['ansprechpartner']))
                {
            
    $fehler['ansprechpartner'] = "Bitte geben Sie Ihren Namen an!";
                }
        if(empty(
    $_REQUEST['strasse']))
                {
            
    $fehler['strasse'] = "Bitte geben Sie Ihre Straße an!";
                }
        if(empty(
    $_REQUEST['plzort']))
                {
            
    $fehler['plzort'] = "Bitte geben Sie Ihren Wohnort an!";
                }
        if(!
    checkEmail($_REQUEST['email']))
                {
                
    $fehler['email'] = "Bitte geben Sie eine gültige E-Mail Adresse an!";
                }
        if(
    count($fehler)>0){
                foreach (
    $fehler as $msg){ 
                echo 
    "<p align=\"center\">$msg";
                }
                echo 
    "<br /><br /><b><a href=\"javascript:history.back();\">zurück</a></b></p>";
                }
        else
         {
            
    $header .= 'From:' .$email;
            
            
    $nachricht .= "Folgende Nachricht wurde von $ansprechpartner gesendet:\n\n";
                
            foreach(
    $arr as $key => $value)
            { if(!empty(
    $value)) { $nachricht .= "$key$value\n"; }}

            
    $nachricht .= "IP: ".$ip."\n";
            
            
    mail($empfaenger$betreff$nachricht$header); 
            echo
    "<p align=\"center\">Vielen Dank!<br />Wir werden uns umgehend bei Ihnen melden!<br /><br /><b><a href=\"javascript:history.back();\">zurück</a></p></b>";
       }
    } }

    ?>
    So. und das funktioniert auch. Hab ich jetzt von cycaps Vorschlag damals übernommen und hier klappt es wunderbar...

    LG Denise.. dann is das Thema ja jetzt erledigt ^^

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Warum habe ich nur geahnt, dass Frau Pixelprizessins Mailscript hier nochmal Thema sein wird

    Hey. Auch wenn litters Script so nicht funktioniert 1) enthält es doch einen Ansatz. Und zwar den: Wenn Du Dich schon nicht überwinden kannst, die Sache mit getrennten Komponenten (Form, Validation, Mailing) anzugehen - was ich immer noch für die bessere, weil auch übersichtlichere Variante halte - kannst Du so ähnlich starten wie in litters Beispiel. Im Endeffekt alles neu strukturieren, aber auf Basis Deiner alten Komponenten:

    1. Schaffe Dir erstmal ein Affenformular. Ein selbstaufrufendes Form, das seine eigenen Daten wieder in die Felder einträgt.
    2. Dann machst Du die Darstellung des Forms abhängig von der Validierung. Wenn auch nur 1 Feld ungültig (leer, ungültige Email etc.) ist, wird das Form wieder ausgefüllt dargestellt. Dazu ne Fehlermeldung, dafür den komischen Back-Link nicht mehr, der ohnehin nur mit Javascript funktioniert.
    3. Zum negativen Validierungszweig fügst Du einen positiven hinzu. Hier hinein kommt alles, was Dein Mailing betrifft: Header zusammenbauen, Message zusammenbauen, Abschicken. Bestätigungsnachricht.

    Fertig!


    1) Kritikpunkte:
    - Das Form wird immer dargestellt. Egal ob die Validierung positiv war oder nicht, egal ob die Mail versendet wurde oder nicht.
    - Ein Form, das nicht wieder ausgefüllt wird ist für den Anwender frustrierend

    Einen Kommentar schreiben:


  • litterauspirna
    antwortet
    Hallo!

    Das umzuprogrammieren ist gar nicht so schwer. du kannst eine kleines E-Mail formular ganz einfach programmieren!

    Mal ein kleines Beispiel

    PHP-Code:
    <?php
    if(isset($_POST['send']))
    {
     if(!
    preg_match("#^([0-9a-zäöü _-]+)$#i",$_POST['name']))
     {
      echo 
    "Falsche Namenseingabe";
     }
     else
     {
      
    //alles für den Mailversand wie header empfänger etc
     
    }
    }
    ?>
    <form action="<?php echo htmlentities($_SERVER['SCRIPT_NAME']) ?>" method="post">
    <input type="text" name="name">
    <input type="submit" name="send" value="Senden">
    </form>
    Das muss man nicht so machen aber das ist ne einfache Methode die funktioniert!

    mfg der litter

    Einen Kommentar schreiben:


  • cycap
    antwortet
    wenn du mit mir ausgehst programmier ichs dir neu, ist das nen deal? hehe

    Einen Kommentar schreiben:


  • pixelprinzessin
    antwortet
    naja wie gesagt, das script wurde ja nicht selber geschrieben, sondern von einer seite runtergeladen und war schon fertig, deswegen versteh ich halt nicht, warum es nicht funktioniert... aber ich bekomm das schon noch hin

    lg denise

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    naja Dein problem is ja dass es nich funktioniert, da Du aber auch nich immer begreifst warum ist es halt extrem schwierig für Dich irgendwas anzupassen...
    also Dein Weg sollte eher sein step für step durchzugehen was Du eigentlich machen willst und das dann langsam umzusetzen und nicht wild irgendwas benutzen und zusammenfrickeln was dann doch nicht funzt

    Einen Kommentar schreiben:


  • pixelprinzessin
    antwortet
    das jetzt umzuschreiben... naja muss ich morgen mal schaun... aber ich änder nicht gern sachen die eigentlich schon stehen.. am ende gehts garnicht mehr ^^

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    was daran denn aufwendig?

    Einen Kommentar schreiben:


  • pixelprinzessin
    antwortet
    das is aber jetz zu aufwendig das wegzuschmeißen ^^ muss noch so viel machen...

    Einen Kommentar schreiben:


  • cycap
    antwortet
    Ehrliche antwort? Schmeiss das Script weg und baus neu Ich muss jetzt auch mal nach Hause, ich meld mich dann wenn ich @home bin nochmal

    Einen Kommentar schreiben:


  • pixelprinzessin
    antwortet
    PHP-Code:
    echo $sentmessage."<br>Go <a href='javascript:history.back(1)'>back</a> to form."
    uhuuuuu das musste dahin anstatt

    PHP-Code:
    $sentmessage $sentmessage."<br>Go <a href='javascript:history.back(1)'>back</a> to form."
    is ja auch quatsch oder? ^^

    aber jetzt ist das einfach oben in die geklatscht.... ich möchte das das in mein Design integriert wird... kann ich das jetz irgendwie noch machen, ohne das ich da nun meinen ganzen code mit darein schreiben muss??

    Einen Kommentar schreiben:


  • cycap
    antwortet
    meine version und

    PHP-Code:
    if($emailError || $requiredError)
    {
        
    $sentmessage $sentmessage."<br>Go <a href='javascript:history.back(1)'>back</a> to form.";
      echo 
    $sentmessage;

    Einen Kommentar schreiben:

Lädt...
X