Checkbox in Kontaktformular mit Ajax und Php

PionierDer2

New member
Hallo,

ich habe ein Kontaktformular nach dieser Vorlage hier gebaut:
leolabs.org - AJAX-Basiertes Kontaktformular mit jQuery

Funktioniert auch soweit. Allerdings möchte ich dort noch eine Checkbox einbauen und dem Empfänger soll angezeigt werden, ob diese gecheckt ist oder nicht.

Mein letzter Ansatz sieht jetzt so aus:

Code:
var newsl = $("#quickcontact #newsletter");
					var news = "nein";
					if (newsl.checked == 1){
						news = "ja";
					}
					
			    	// Aus den Daten die Anfrage für das PHP-Skript zusammensetzen
			    	var data = 'name=' + name.val() + '&mail=' + mail.val() + '&company=' + company.val() + '&subject=' + subject.val() + '&newsletter=' + news.val() + '&message='  + encodeURIComponent(message.val());

Das soll dann wie die anderen Felder im Beispiel an die Php übergeben werden.
Im Beispiel sieht das so aus:

PHP:
<?php
    // Überprüfen, ob alle Felder korrekt ausgefüllt wurden
    // und ggf. fehlende Daten an JavaScript zurückgeben (auf Reihenfolge achten)
    if($_POST[name] == '' || $_POST[name] == 'Name'){exit ("name");}
    if($_POST[phone] == '' || $_POST[phone] == 'Phone'){exit ("phone");}
    if($_POST[message] == '' || $_POST[message] == 'Nachricht'){exit ("message");}
 
    // Felder in Variablen schreiben (optional)
    $name = $_POST[name];
    $phone = $_POST[phone];
    $message = $_POST[message];
 
    // E-Mail zusammenstellen
    $adminmail = "meine@adresse.de"; // Deine E-Mail Adresse
    $betreff = "Anfrage über Schnellkontaktformular von " . $_POST[name];
    $text = "<p>$name (Tel: $phone) hat Ihnen über das Kontaktformular eine Nachricht geschickt:</p><p>$message</p><p>";
 
    // E-Mail versenden
    mail($adminmail, $betreff, $text, "From: " . $_POST[name] . "<$adminmail>");
    echo "success";
?>


Allerdings funktioniert es so einfach nicht und etliche Seiten bei Goolge helfen mir auch nicht weiter.
Bei falscher Javascript Syntax (zumindest vermute ich, dass es daran liegt) wird das Skript zudem nicht weiter ausgeführt und die Markierungen der Felder etc. funktionieren nicht mehr und es wird nur noch auf einer weißen Seite das 'echo' success ausgegeben.


Ich hoffe es ist einigermaßen verständlich und ich würde mich über jede Hilfe freuen.
 
Zuletzt bearbeitet von einem Moderator:
newsl ist ein jQuery-Objekt und das hat keine .checked-Eigenschaft. Da musst du auf die Node gehen oder über .prop() | jQuery API Documentation.

Außerdem wird $_POST["newsletter"] im PHP gar nicht abgefragt...

PS: doppelte ID-Selektoren sind sinnfrei.
PPS: Das PHP ist nicht so ideal (produziert Warnungen wegen nicht existierenden Konstanten, die HTML-Mail ist kein valides HTML und die POST-Daten werden nicht ausreichend validiert).
 
Vielen Dank erstmal!

Mit

Code:
var newsl = $("#quickcontact #newsletter");
					var news = 'nein';
					if ( $( newsl ).prop( "checked" ) ){
						news = 'ja';
					}

lässt sich dann der String an das Php Dokument übergeben.

Hab die Php dann auch so weit an meine Bedürfnisse angepasst. Die aus meinem ersten Post war 1 zu 1 aus dem Beispiel.
Das funktioniert also schonmal!


doppelte ID-Selektoren sind sinnfrei.

Da verstehe ich nicht ganz was gemeint ist. Meinst du #quickcontact?
Wie gesagt, das ist auch aus dem Beispiel.

produziert Warnungen wegen nicht existierenden Konstanten

Wo kann ich die Warnungen sehen?

die HTML-Mail ist kein valides HTML

Die versendete Mail wird auch mit Html- Befehlen in Outlook dargestellt. Liegt es daran?

die POST-Daten werden nicht ausreichend validiert

So dass die Mail- Adresse auch wirklich eine ist usw.? Das steht noch auf meiner Liste ;)
 
Da verstehe ich nicht ganz was gemeint ist. Meinst du #quickcontact?
Ich meine die zwei # in dem Selektor also "#quickcontact #newsletter". Da kannst du gleich auch nur "#newsletter" schreiben.
Wie gesagt, das ist auch aus dem Beispiel.
War auch dort schon nicht gut.

Die versendete Mail wird auch mit Html- Befehlen in Outlook dargestellt. Liegt es daran?
Nicht nur. Du musst im Mail-Header auch nocht die richtige MIME-Type spezifizieren.
 
Zurück
Oben