Ankündigung

Einklappen
Keine Ankündigung bisher.

Checkboxen geben immer "on" zurück

Einklappen

Neue Werbung 2019

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

  • Checkboxen geben immer "on" zurück

    Hallo allerseits,

    ich möchte mich kurz vorstellen: meine Name ist Philipp und ich habe bereits gute Kenntnisse in HTML. PHP und Javascript verstehe ich zwar in Teilen, es fehlt aber hin und wieder am notwendigen Verständnis. Ich hoffe, dass sich dies bald noch ändert
    Aktuell habe ich eine kleine Herausforderung und ich hoffe, dass es ein Leichtes ist, diese zu lösen.

    Mein Problem ist, dass die von mir integrierten Checkboxen stets mit "on" antworten, auch wenn sie nicht angehakt wurden. Ich habe dazu bereits einiges gelesen, recherchiert und getestet, bisher aber ohne Erfolg. Folgende Bestandteile hat der Code.

    SCRIPT Tag:
    HTML-Code:
        <script>
        $(document).ready(function (e){
            $("#frmContact").on('submit',(function(e){
                e.preventDefault();
                $("#mail-status").hide();
                $('#send-message').hide();
                $('#loader-icon').show();
                $.ajax({
                    url: "/contact/contact.php",
                    type: "POST",
                    dataType:'json',
                    data: {
                    "name":$('input[name="name"]').val(),
                    "surname":$('input[name="surname"]').val(),
                    "phone":$('input[name="phone"]').val(),
                    "email":$('input[name="email"]').val(),
                    "request1":$('input[name="request1"]').val(),
                    "request2":$('input[name="request2"]').val(),
                    "request3":$('input[name="request3"]').val(),
                    "request4":$('input[name="request4"]').val(),
                    "content":$('textarea[name="content"]').val(),
                    "g-recaptcha-response":$('textarea[id="g-recaptcha-response"]').val()},                
                    success: function(response){
                    $("#mail-status").show();
                    $('#loader-icon').hide();
                    if(response.type == "error") {
                        $('#send-message').show();
                        $("#mail-status").attr("class","error");                
                    } else if(response.type == "message"){
                        $('#send-message').hide();
                        $("#mail-status").attr("class","success");                            
                    }
                    $("#mail-status").html(response.text);    
                    },
                    error: function(){} 
                });
            }));
        });
        </script>
    Die Checkboxen im HTML:
    HTML-Code:
                <div class="label">Bitte rufen Sie mich an zu:</div>
                <div class="field">
                    <input type="checkbox" class="request1" name="request1" id="request1" /> Request1<br/>
                    <input type="checkbox" class="request2" name="request2" id="request2" /> Request2<br/>
                    <input type="checkbox" class="request3" name="request3" id="request3" /> Request3<br/>
                    <input type="checkbox" class="request4" name="request4" id="request4" /> Request4
                </div>

    Auslesen in PHP (WIP):
    PHP-Code:
    <?php

    if($_POST)
    {
    require(
    'constant.php');

        
    $user_name      filter_var($_POST["name"], FILTER_SANITIZE_STRING);
        
    $user_surname   filter_var($_POST["surname"], FILTER_SANITIZE_STRING);
        
    $user_phone     filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
        
    $user_email     filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
        
    $user_request1  filter_var($_POST["request1"], FILTER_SANITIZE_STRING);
        
    $user_request2  filter_var($_POST["request2"], FILTER_SANITIZE_STRING);
        
    $user_request3  filter_var($_POST["request3"], FILTER_SANITIZE_STRING);
        
    $user_request4  filter_var($_POST["request4"], FILTER_SANITIZE_STRING);
        
    $content   filter_var($_POST["content"], FILTER_SANITIZE_STRING);

    [.........]

        
    $toEmail "test@mail.de";
        
    $mailHeaders "From: " $user_name " " $user_surname "<" $user_email ">\r\n";
        
    $mailBody "Eine neue Anfrage:" "\n\n";
        
    $mailBody .= "Vorname: " $user_name "\n";
        
    $mailBody .= "Nachname: " $user_surname "\n";
        
    $mailBody .= "Telefon: " $user_phone "\n";
        
    $mailBody .= "E-Mail: " $user_email "\n\n";
        
    $mailBody .= "Request1: " $user_request1 "\n";
        
    $mailBody .= "Request2: " $user_request2 "\n";
        
    $mailBody .= "Request3: " $user_request3 "\n";
        
    $mailBody .= "Request4: " $user_request4 "\n\n";
        
    $mailBody .= "Nachricht: \n" $content "\n";

        if (
    mail($toEmail"Kontaktformular Anfrage"$mailBody$mailHeaders)) {
            
    $output json_encode(array('type'=>'message''text' => 'Hallo '.$user_name .' '.$user_surname .', Ihre E-Mail wurde erfolgreich verschickt! Vielen Dank. Wir melden uns so schnell es geht zurück.'));
            die(
    $output);
        } else {
            
    $output json_encode(array('type'=>'error''text' => 'Leider konnte Ihre-Mail nicht gesendet werden. Bitte wenden Sie sich direkt an '.SENDER_EMAIL));
            die(
    $output);
        }

    }
    ?>
    Leider werden alle Checkboxen (Request 1-4) als "checked" bzw. "on" zurück gegeben. Kann mir jemand sagen, wie ich den korrekten Wert übermittelt bekomme?
    Vielen Dank vorab.

    Viele Grüße
    Philipp


  • #2
    Warum baust du das so umständlich zusammen? Du kannst ein komplettes Formular auch mit .serialize() serialisieren und ersparst dir diese Orgie.

    Davon abgesehen sollte nicht mail() für den Mail-Versand verwendet werden. Nimm stattdessen eine Mailer-Klasse.

    Kommentar


    • #3
      Zitat von hellbringer Beitrag anzeigen
      Warum baust du das so umständlich zusammen? Du kannst ein komplettes Formular auch mit .serialize() serialisieren und ersparst dir diese Orgie.

      Davon abgesehen sollte nicht mail() für den Mail-Versand verwendet werden. Nimm stattdessen eine Mailer-Klasse.
      Ich versuche es mit dem, was ich kann. Durchaus möglich, dass es nicht perfekt ist.
      Kann man das noch retten, oder wie komme ich ans Ziel?

      Viele Grüße und einen schönen Abend!

      Kommentar


      • #4
        Hab ich doch gesagt, nimm einfach .serialize().

        Kommentar


        • #5
          Unabängig von dem serialize()
          Deine Checkboxen haben kein Attribut "value". Bei jQuery gibt´s hierfür prop() und :checked...

          Kommentar


          • #6
            Mein Problem ist, dass die von mir integrierten Checkboxen stets mit "on" antworten
            Der value einer Checkbox is unabhängig von seinem checked-Status. Und der Defaulwert einer Checkbox ist halt "on".

            Kommentar


            • #7
              Zitat von kaminbausatz Beitrag anzeigen
              Unabängig von dem serialize()
              Deine Checkboxen haben kein Attribut "value". Bei jQuery gibt´s hierfür prop() und :checked...
              Alles klar, danke euch. Habe jetzt folgende Anpassungen drin:
              HTML-Code:
                "request1":$('input[name="request1"]').serialize(),
              Damit funktioniert es für mich, da an den richtigen Stellen "on" zurück gegeben wird. Der Defaultwert ist da auch völlig fein für mich. Die values werde ich noch nachtragen, danke.

              Viele Grüße
              Philipp

              Kommentar


              • #8
                Warum nicht einfach data: $(this).serialize()? Warum willst du jedes Feld einzeln zuweisen?

                Kommentar

                Lädt...
                X