[PHP/Javascript/HTML] Kontaktformular wird nicht verschickt

Zappel1969

Banned
Registriert
Dez. 2014
Beiträge
12
Hallo liebe Community,

habe mich nun auch endlich dazu entschlossen einen Account zu erstellen, um anderen zu helfen, aber auch um selbst Hilfe zu beziehen. Letzteres veranlasst mich das Thema zu eroeffnen.

Ich moechte gerne ein Kontaktformular in meine Website einbinden, allerdings erhalte ich bei Verschicken keine Mail und keine Bestaetigung auf der Seite. Hier meine Codes:

HTML:
<div id="formular_out" style="width: 70%; outline: solid; outline-width: 2px; margin-top: 20px;">
	<table style="width: 100%;">
		<tr>
			<td style="background-color: #444; padding: 5px 0px 5px 5px;">
				<p style="font-size: 14px; font-weight: bold; color: #de9905;">Contact Formular</p>
			</td>
		</tr>
	</table>
					
	<br />
					
	<form id="form">
		<p id="returnmessage"></p>
		<label style="font-size: 14px; font-weight: bold; color: #444; padding-left: 5px;">Company:<span style="color: #de9905; font-size: 18px;">*</span></label>
		<input type="text" name="company" id="company" placeholder="Your Company" />
						
		<label style="font-size: 14px; font-weight: bold; color: #444; padding-left: 5px;">Location:<span style="color: #de9905; font-size: 18px;">*</span></label>
		<input type="text" name="location" id="location"  placeholder="Your Location" />
						
		<label style="font-size: 14px; font-weight: bold; color: #444; padding-left: 5px;">E-mail:<span style="color: #de9905; font-size: 18px;">*</span></label>
		<input type="email" name="mail" id="email" placeholder="Your Email" />
						
		<textarea id="message" style="max-width: 97%; width: 97%; rows: 5;" id="message" placeholder="Your Message"></textarea>
						
		<input id="submit" type="submit" style="margin: 20px 0px 10px 5px; padding: 5px 5px;" value="Send" />
	</form>
</div>

Code:
$(document).ready(function() {
	$("#submit").click(function() {
		var company = $("#company").val();
		var location = $("#location").val();
		var email = $("#email").val();
		var message = $("#message").val();
			
		$("#returnmessage").empty();
			if (company == '' || location == '' || email == '' || message == '') {
				alert("Please fill required fields");} 
			else {
				$.post("contact_form.php", {
					company1: company,
					location1: location,
					email1: email,
					message1: message},
					function(data) {
					$("#returnmessage").append(data);
					if (data == "Your message has been received. We will contact You soon.") {
					$("#form")[0].reset();
					}
				});
			}
	});
});

PHP:
<?php
	$company = $_POST['company1'];
	$location = $_POST['location1'];
	$email = $_POST['email1'];
	$message = $_POST['message1'];
	$email = filter_var($email, FILTER_SANITIZE_EMAIL);
	
	if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
		echo "<span>* Please fill valid email address.*</span>";
		} 
		else {
			$subject = $company;
			$headers = 'MIME-Version: 1.0' . "\r\n";
			$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
			$headers .= 'From:' . $email. "\r\n";
			$headers .= 'Cc:' . $email. "\r\n";
			$template =
			. '<br/>Thank you for contacting Us.<br/><br/>'
			. 'Company:' . $company . '<br/>'
			. 'Location:' . $location . '<br/>'
			. 'Email:' . $email . '<br/>'
			. 'Message:' . $message . '<br/><br/>'
			. 'This is a contact confirmation mail.'
			. '<br/>'
			. 'We will contact You as soon as possible .</div>';
			$sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
			$sendmessage = wordwrap($sendmessage, 70);
			mail("receiver_email_censored@gmail.com", $subject, $sendmessage, $headers);
			echo "Your message has been received. We will contact You soon.";
		}
		} 
		else {
			echo "<span>* invalid email *</span>";
	}
?>

Da ich mich gerade erst in PHP und Javascript einarbeite stehen die Chancen gut, dass ich einfach nur einen syntaktischen Fehler begangen habe - Korrektur waere in diesem Fall sehr nett!

Nun zu weiteren Fehlern:
  1. Das Formular wird beim Versuch es zu verschicken, bei nicht ausgefuellten Feldern, komplett resettet, was so nicht von mir gewollt ist. Die Felder sollen erst mit erfolgreichem Versand geloescht werden.
  2. Eine invalide Versandadresse wird nicht erkannt. Dementsprechend kommt auch keine Fehlermeldung.
  3. Generell kommt nur die Fehlermeldung:"Please fill required fields."
  4. Da das Formular bislang nicht verschickt werden kann, kann ich keine Aussage darueber treffen, ob die Nachrichten (wie z.B. "Your message has been received. We will contact You soon.") dargestellt werden.

Gibt es evtl. irgendwelche Konflikte mit:
HTML:
<head>
...
<script type="text/javascript" language="javascript">
// hide, then show the contact form by clicking
$(document).ready(function(){
	$("#formular_out").hide();
	$("#formular_in").click(function(){
		$("#formular_out").fadeIn();					
		});
});
</script>
...

</head>
<body>
...
<div style="margin-top: 25px;">
	<p>You can use the <strong style="font-weight: bold; color: #de9905; text-decoration: underline;" id="formular_in">'Contact Formular'</strong> for your convenience.</p>
	<br />
</div>

...

<div id="formular_out" style="width: 70%; outline: solid; outline-width: 2px; margin-top: 20px;">
siehe spoiler "contact.html"
</div>

...
</body>
Code:
<script type="text/javascript" language="javascript">
	$(function() {

		//	Basic carousel, no options
		$('#foo0').carouFredSel();

		//	Basic carousel + timer, using CSS-transitions
		$('#foo1').carouFredSel({
			auto: false,
			prev: '#prev1',
			next: '#next1',
		}, {
			transition: true
		});

		//	Scrolled by user interaction
		$('#foo2').carouFredSel({
			auto: false,
			prev: '#prev2',
			next: '#next2',
			pagination: "#pager2",
			mousewheel: false,
			swipe: {
				onMouse: true,
				onTouch: true
			}
		});

		//	Variable number of visible items with variable sizes
		$('#foo3').carouFredSel({
			width: 360,
			height: 'auto',
			prev: '#prev3',
			next: '#next3',
			auto: false
		});

		//	Responsive layout, resizing the items
		$('#foo4').carouFredSel({
			responsive: true,
			width: '100%',
			scroll: 2,
			items: {
				width: 400,
			//	height: '30%',	//	optionally resize item-height
				visible: {
					min: 2,
					max: 6
				}
			}
		});    

		//	Fuild layout, centering the items
		$('#foo5').carouFredSel({
			width: '100%',
			scroll: 2
		});

        });    
</script>
Diese beiden laufen ohne Probleme. Aber wie gesagt: Vielleicht gibt es irgendwelche Konflikte mit dem Formular...

Fuer Fragen stehe ich gerne zur Verfuegung.
Fuer Antworten jeglicher Art bedanke ich mich jetzt schon mal.

Liebe Gruesse,
der Zappel
 
Teste mal ob der Server überhaupt Mails verschickt:

<?php
$empfaenger = 'niemand@example.com';
$betreff = 'Der Betreff';
$nachricht = 'Hallo';
$header = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($empfaenger, $betreff, $nachricht, $header);
?>

Teste mal ob der Server überhaupt Mails verschickt:

<?php
$empfaenger = 'niemand@example.com';
$betreff = 'Der Betreff';
$nachricht = 'Hallo';
$header = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($empfaenger, $betreff, $nachricht, $header);
?>

Zu 1) Um den Text beizubehalten müsstest du die Werte übergeben und neu setzen.

z.B.:
<input type="text" name="company" id="company" placeholder="Your Company" />

<input type="text" name="company" id="company" placeholder="Your Company" <?PHP echo value=$company"); ?> />

Ich würde die Variablen allerdings vorher in eine Session werfen da du vermutlich bei verschiedenen genutzten Seiten ggf. die nötigen Variablen nicht zur Verfügung hast.

http://www.php-einfach.de/php-tutorial/php-sessions.php
Sprich in die erste Zeile der contakt.html:
<?php
session_start();
?>

Bei der contact_form.php
$company = $_POST['company1'];
$location = $_POST['location1'];
$email = $_POST['email1'];
$message = $_POST['message1'];

$_SESSION['company'] = $_POST['company1'];
$_SESSION['location'] = $_POST['location1'];
$_SESSION['email'] = $_POST['email1'];
$_SESSION['message'] = $_POST['message1'];

Dann würde sich mein Beispielcode in dieses dort verwandeln:
<input type="text" name="company" id="company" placeholder="Your Company" <?PHP echo value=$_SESSION['company']"); ?> />

2) Die Eingabe auf ein @ hin überprüfen.
 
Zuletzt bearbeitet:
Lass doch mal den JS-Mist weg, mach es raw & pure, um Fehler auszuschließen.
Außerdem: Weg mit .html, weg mit mehreren Dateien für eine Aufgabe. Fass den Kram zusammen und strukturiere ihn von anfang an sauber.

Suxxess schrieb:
http://www.php-einfach.de/php-tutorial/php-sessions.php
Sprich in die erste Zeile der contakt.html:
<?php
session_start();
?>
Das wird nicht funktionieren, da ein korrekt konfigurierter Webserver eine statische Ressource (eine .html - Datei) nicht an den PHP Interpreter leitet. Wozu auch? Ist ja eine statische Ressource...
 
@Suxxess:
Vielen Dank fuer Deine Antwort. Der Server kann keine Mails verschicken - network solutions, mein Provider, sollte jedoch alle noetigen Dateien installiert haben, oder liege ich mit der Vermutung falsch? Habe keine zusaetzlichen Dateien runter geladen.

Ich glaube da stimmt was nicht ganz mit dem Code:
PHP:
<input type="text" name="company" id="company" placeholder="Your Company" <?PHP echo value=$_SESSION['company']"); ?> />
Im Feld wird bei mir "$_SESSION['company']);" angezeigt.

Zu 1.: Da habe ich mich wohl nicht ganz deutlich ausgedrueckt: Nicht nur die Inputs werden resettet, sondern das gesamte Formular. Das bedeutet, dass es nach Versand wieder ausgeblendet wird. Jedoch soll es das erst tun, wenn das Formular erfolgreich, ohne Fehlermeldungen verschickt werden konnte.

Ausserdem habe ich aus der contact.html Datei nun contact.php gemacht - bislang ohne Veraenderungen.

@Daaron:
Auch Dir vielen Dank fuer Deine Antwort.
Daaron schrieb:
Lass doch mal den JS-Mist weg, mach es raw & pure, um Fehler auszuschließen.
Den "JS-Mist" habe ich bereits beim Testen weggelassen, mit demselben Ergebnis.
Daaron schrieb:
Fass den Kram zusammen und strukturiere ihn von anfang an sauber.
Alle oben aufgefuehrten Spoiler befinden sich in der contact.php Datei. Ich habe sie nur "auseinandergepflueckt", damit Ihr eine bessere Uebersicht ueber alles habt.
 
Zappel1969 schrieb:
@Suxxess:
Vielen Dank fuer Deine Antwort. Der Server kann keine Mails verschicken - network solutions, mein Provider, sollte jedoch alle noetigen Dateien installiert haben, oder liege ich mit der Vermutung falsch? Habe keine zusaetzlichen Dateien runter geladen.
Aus Sicherheitsgründen ist der Befehl "mail()" gelegentlich deaktiviert, und das ist GUT so. Verwende einen anständigen SMTP Mailer.

Ich glaube da stimmt was nicht ganz mit dem Code:
PHP:
<input type="text" name="company" id="company" placeholder="Your Company" <?PHP echo value=$_SESSION['company']"); ?> />
Natürlich, denn es muss ja offensichtlich auch value="<?php echo $_SESSION['company'];?>" heißen.

Den "JS-Mist" habe ich bereits beim Testen weggelassen, mit demselben Ergebnis.
Nun, dann solltest du genau hier ansetzen.
Die korrekte Vorgehensweise ist, erst alles pur serverseitig (also in reinem PHP/HTML) zum Laufen zu bringen, und DANN mit JS zusätzlichen, unnötigen Flitter drüber zu bügeln, damit die Anwendung auch ja Buzzword-Complete ist.
 
Zurück
Oben