Ankündigung

Einklappen
Keine Ankündigung bisher.

formular dankeseite + button deaktivieren?

Einklappen

Neue Werbung 2019

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

  • formular dankeseite + button deaktivieren?


    #####
    BITTE NICHT WIEDER SOFORT SCHLIESSEN! DIE BEIDEN ANDEREN FORENBEITRAEGE (mea culpa) SIND CLOSED.
    es gibt also nur noch DIESEN EINEN (offenen!) thread hier im php.de forum!!! danke...
    #####


    hallo.

    ich habe ein kontaktformular, welches ich gern etwas aufpimpen moechte. da ich durch try&error bislang keine loesung gefunden habe (fuer mehr reichen meine php kenntnisse leider nicht) wollte ich hier mal fragen.

    das formular hat eine validierungspruefung. bei fehlenden feldern werden diese nach klick auf den submitbutton rot eingefaerbt und nichts wird versendet. nach korrektem ausfuellen und absenden wir eine dankemeldung unterhalb des formulars eingeblendet. soweit alles ok. letzteres dauert jedoch ein, zwei, drei sekunden.

    hier meine ziele des 'pimpens':
    1. nach absenden des formulars soll statt einer meldung auf der selben seite eine neue dankeseite geladen werden.
    2. der button soll nach klicken -UND nach ERFOLGREICHER FORMUALRPRUEFUNG- ausgrauen und mit z.b. 'wird gesendet' beschriftet werden. also nicht sofort nach JEDEM klick, sondern erst beim tatsaechlichen senden der mail - also auch NACH erfolgreicher pruefung der formularfelder.

    hier mal die drei komponenenten aus denen sich das formular zusammensetzt
    -----

    die formularseite:
    HTML-Code:
    <form id="send-form" method="post" action="email-kontakt.php" novalidate>
     <div>
      <input id="send-form-name" class="form-control" type="text" placeholder="Name *" name="name">
     </div>
     <div>
      <input id="send-form-email" type="email" placeholder="E-Mail *" name="email">
     </div>
     <div class="form-group">
      <textarea id="send-form-message" placeholder="Nachricht *" name="message"></textarea>
     </div>
     <input class="btn btn-default" type="submit" value="absenden">
     
    <span class="succs-msg">Vielen Dank!</span>
     
    </form>
    dann das email PHP script (email-kontakt.php):
    PHP-Code:
    <?php
    define
    ('EMAIL_ADMIN_SENT_TO''mail@domain.de');
    define('EMAIL_ADMIN_SUBJECT''Anfrage');
    define('EMAIL_CLIENT_SUBJECT''Ihre Anfrage');

    $headers  "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
    $headers .= "From: mail@domain.de\r\n";
    $headers .= "X-Mailer: PHP/" phpversion() . "\r\n";

    $errors = array();
    $name    strip_tags(trim(!empty($_POST['name'])  ? $_POST['name']  : ''));
    $email   strip_tags(trim(!empty($_POST['email']) ? $_POST['email'] : ''));
    $message nl2br(strip_tags(trim(!empty($_POST['message']) ? $_POST['message'] : '')));

    if (empty(
    $name)) {
        
    $errors[] = 'name';
    }

    if (empty(
    $email) || !filter_var($emailFILTER_VALIDATE_EMAIL)) {
        
    $errors[] = 'email';
    }

    if (empty(
    $message)) {
        
    $errors[] = 'message';
    }

    $response = array('status' => 'ok');

    $datetime date('Y-m-d H:i:s');

    $letterToAdmin = <<<MSG
    <html>
    <body>

    <!-- Preloader -->
    <div id="preloader">
        <div id="status">&nbsp;</div>
    </div>

        <strong>
    {$name}</strong> ( <a href="mailto:{$email}">{$email}</a> ) schreibt:<br/>
    {$message} <br/><br/>
    </body>
    </html>
    MSG;

    $letterToClient = <<<MSG
    <html>
    <body>

    <!-- Preloader -->
    <div id="preloader">
        <div id="status">&nbsp;</div>
    </div>

    Hallo 
    {$name},<br/>
    vielen Dank f&uuml;r Ihre Nachricht:<br/><br/>
    {$message}

    </body>
    </html>
    MSG;

    if (empty(
    $errors)) {
        
    mail(EMAIL_ADMIN_SENT_TOEMAIL_ADMIN_SUBJECT$letterToAdmin$headers);
        
    mail($emailEMAIL_CLIENT_SUBJECT$letterToClient$headers);
    } else {
        
    $response = array('status' => 'error''errors' => $errors);
    }

    die(
    json_encode($response));

    und ein formular-javascript:
    HTML-Code:
    (function ($, window, document) {
        'use strict';
     
    // ##### HIER FEHLT WAS ZUR BESSEREN UEBERSICHTLICHKEIT! #####
     
            $win = $(window),
            $html = $('html'),
     
    // ##### HIER FEHLT WAS ZUR BESSEREN UEBERSICHTLICHKEIT! #####
     
            that.init();
     
            // onLoad function
            $win.load(function(){
                that.sendform();
     
    // ##### HIER FEHLT WAS ZUR BESSEREN UEBERSICHTLICHKEIT! #####
     
            sendform: function () {
                var contactForm = $('#send-form'),
                    contactFormName = $('#send-form-name'),
                    contactFormEmail = $('#send-form-email'),
                    contactFormMessage = $('#send-form-message'),
     
                    emailValidationRegex = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
     
                contactForm.find('input, textarea').focusout(function(){
                    var self = $(this);
     
                    if (self.attr('id') == 'send-form-email'){
                        if ((self.val() === '') || (!emailValidationRegex.test(self.val()))) {
                            self.parent().addClass('has-error');
                        }
                    } else {
                        if (self.val() === '')
                            self.parent().addClass('has-error');
                    }
                }).focusin(function(){
                    $(this).parent().removeClass('has-error');
                });
     
                contactForm.on('submit', function(){
                    var isHaveErrors = false;
     
                    if (contactFormName.val() === '') {
                        isHaveErrors = true;
                        contactFormName.parent().addClass('has-error');
                    }
     
                    if ((contactFormEmail.val() === '') || (!emailValidationRegex.test(contactFormEmail.val()))) {
                        isHaveErrors = true;
                        contactFormEmail.parent().addClass('has-error');
                    }
     
                    if (contactFormMessage.val() === '') {
                        isHaveErrors = true;
                        contactFormMessage.parent().addClass('has-error');
                    }
     
                    if (!isHaveErrors) {
                        $.ajax({
                            type: 'POST',
                            url: 'email-angebot.php',
                            data: {
                                name: contactFormName.val(),
                                email: contactFormEmail.val(),
                                message: contactFormMessage.val()
                            },
                            dataType: 'json'
                        })
                            .done(function(answer){
                                if ((typeof answer.status != 'undefined') && (answer.status == 'ok')) {
                                    $('.succs-msg').fadeIn().css("display","inline-block");
                                    contactFormName.val('');
                                    contactFormEmail.val('');
                                    contactFormMessage.val('');
                                } else {
                                    alert('Message was not sent. Server-side error!');
                                }
                            })
                            .fail(function(){
                                alert('Message was not sent. Client error or Internet connection problems.');
                            });
                    }
     
                    return false;
                });
            }
        };
     
        $.fn[pluginName] = function (options) {
            return this.each(function () {
                if (!$.data(this, "plugin_" + pluginName)) {
                    $.data(this, "plugin_" + pluginName,
                        new Plugin(this, options));
                }
            });
        };
    })(jQuery, window, document);
     
    (function ($) {
        $(document.body).kontaktformular();
    })(jQuery);

    kannn mir hier bitte jemand weiterhelfen? habe schon mehrere stunden versenkt . und komme einfach auf keinen gruenen zweig. ;-(

    DANKE und gruss,
    stefan

  • #2
    Zunächst mal:
    • Warum validierst du die Email-Adresse sowohl im Browser als auch serverseitig?
    • Wenn du willst, dass der Button des Formulars anders eingefärbt wird, wenn die Validierung oder der eigentliche Mailversand läuft, dann musst du diese Prozesse voneinander trennen und in eigene Ajax-Requests verpacken
    • Wenn du ein komplexes Problem hast, dann solltest du es erstmal in viele kleine, triviale Probleme zerlegen, die sich - isoliert gesehen - leichter lösen lassen. Sobald man vor einem großen Blob von Code sitzt und nicht weiß, was man tun soll, ist der Code nicht hilfreich und man sollte ihn ändern.
    • Nun baust du dein Kontaktformular als jQuery-Plugin. Hat das einen speziellen Grund? Das sieht für mich (gerade auch, wenn ich diese Kommentare da im Code sehe) nicht so aus, als würdest du ein (neutrales) Plugin bauen. Kann es sein, dass du dir den Code einfach von irgendwo kopiert hast?

    Kommentar


    • #3
      Zitat von rkr Beitrag anzeigen
      Zunächst mal:
      • Warum validierst du die Email-Adresse sowohl im Browser als auch serverseitig?
      • Wenn du willst, dass der Button des Formulars anders eingefärbt wird, wenn die Validierung oder der eigentliche Mailversand läuft, dann musst du diese Prozesse voneinander trennen und in eigene Ajax-Requests verpacken
      • Wenn du ein komplexes Problem hast, dann solltest du es erstmal in viele kleine, triviale Probleme zerlegen, die sich - isoliert gesehen - leichter lösen lassen. Sobald man vor einem großen Blob von Code sitzt und nicht weiß, was man tun soll, ist der Code nicht hilfreich und man sollte ihn ändern.
      • Nun baust du dein Kontaktformular als jQuery-Plugin. Hat das einen speziellen Grund? Das sieht für mich (gerade auch, wenn ich diese Kommentare da im Code sehe) nicht so aus, als würdest du ein (neutrales) Plugin bauen. Kann es sein, dass du dir den Code einfach von irgendwo kopiert hast?
      hi und danke!

      das habe ich doch nicht selbst geschrieben! ich kann dir keine drei zeilen php-code schreiben. manchmal schaue ich mir ein script an und *verstehe* was wo wie generiert wird und kann das anpassen. ier ist diese grenze aber ueberschritten...

      das ist ein script eines fertigen templates. warum der das so gemacht hat? keine ahnung. ich wollte das halt gern behalten, da es grundsaetzlich top funktioniert und ich eine menge zeit in die (groesstenteils optische) anpassung reingesteckt habe! es hat ja auch tolle features wie z.b. -getrennt definierbare- bestaetigungsmails an empfaenger und absender, schoene validierungshinweise, wenn ein required feld leer bleibt etc. pp

      die sendmail funktion ist in ein groesseres "custim.js" integriert. daher meine kommentare und kuerzungen, um euch nicht mit anderem krams zu verwirren.

      ist das also machbar in der form, oder geht das nur mit einem voellig anderen script?

      danke und gruss

      Kommentar


      • #4
        das habe ich doch nicht selbst geschrieben! ich kann dir keine drei zeilen php-code schreiben.
        ..
        das ist ein script eines fertigen templates. warum der das so gemacht hat? keine ahnung.
        Nun - dann:

        - frag den Autor, Fremdscriptsupport gibt es hier nicht (Bitte beachten - > http://www.php.de/articles/regeln-un...twareprodukten )

        - oder lerne PHP und mach es selbst, hier ist ein ProgrammierForum(!) wo sich Programmierer (mit zumindest Grundlagen-Basiswissen) austauschen. (Bitte beachten -> http://www.php.de/articles/regeln-un...renrichtlinien den Teil mit "Hilfe zur Selbsthilfe")

        - oder lass es machen ... zB hier: http://www.php.de/forum/lösungen-dur...e/scriptbörse


        Das hat unter diesen Umständen hier dann gar keinen Sinn. Sorry, aber du must dich vor dem Posten schon auch informieren was du wo wie postest.

        Ich kann den Thread in die Scriptbörse verschieben, wenn du das willst, kurze PN an mich.


        [MOD: Geschlossen]

        (sorry rkr )
        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


        • #5
          [MOD: Thema laut Userwunsch in Scriptbörse verschoben und wieder geöffnet]

          Gummilippe

          Antwort zu deiner "Anmerkung" in der PN: Bitte lies nochmals die oben von mir Forenrichtlinien die hier gelten. Damit ist jegliche Diskussion dazu hinfällig.

          Sei sozial
          Wir haben kein Interesse daran, kostenlos Deine Skripte zu schreiben oder zu reparieren, da das sehr viel Zeit und Mühe kosten kann. Akzeptiere also, dass sich unsere Motivation eventuell von Deiner unterscheidet und wir daher nur Hilfe zur Selbsthilfe geben. Wir sind nicht die Wohlfahrt und akute Programmierprobleme keine Notlagesituation. Wenn doch, wende Dich bitte mit einem Jobangebot an die Community oder einen Programmierer vor Ort.
          Stell Deine Frage bitte auch nur in einem Forum, Du stößt uns (und sicherlich auch der anderen Community) sonst vor den Kopf.
          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


          • #6
            wenn das also jemand so umsetzen kann, wuerde ich mich ueber angebote incl. preisrahmen (gern per PN) sehr freuen.

            danke und gruss!

            Kommentar

            Lädt...
            X