Sara: jQuery Formular abschicken & wieder einbleden

Beitrag lesen

Hallo,

Ich denke, wir kommen hier weiter, wenn du ansagst, was an dedlfix' Ausführungen du nicht verstehst.

wenn ich ehrlich bin, verstehe ich gleich 0 :/ Also gehen wir mal von diesem jQuery Code aus

$("#form_index").submit(function() {

     if(!$('#form_index').isValid()) {
     	$("#response").html("Bitte fülle alle Felder aus, die mit einem * versehen sind!");
  	 
  	 } else {

  	 var form = $('#form_index');
     var data = form.serialize();
     
     $("#submit").attr("disabled","disabled");
        
		$.post('senden.php', data, function(msg) {
		      $("#form_index").addClass( "ausblenden");
                      $('#ctrl_20').val('');
                      $('#ctrl_21').val('');
                      $('#ctrl_22').val('');
                      $('#ctrl_23').val('');
                      $('#ctrl_25').val('');
                      $("#response").html(msg);

              setTimeout(function(){
                      $("#form_index").removeClass( "ausblenden");
                      $("#response").html("");
                    }, 3000);         
		});
	}	  
		 return false;           
});          

Dieser klappt auch. Jetzt kommt die senden.php mit ins Spiel. Um meine Mail zu versenden nutzte ich den Swiftmailer der auch im Wiki empfohlen wird.

Dieses Script sieht so aus und funktioniert auch

$data = array();

	$data['smtp'] = array();
	$data['smtp']['host'] = '';
	$data['smtp']['port'] = '';
	$data['smtp']['username'] = '';
	$data['smtp']['password'] = '';	
	
	$data['from'] = array('name' => $_POST['ansprechpartner'], 'email' => $_POST['email']);
	$data['to'] = array('name' => '', 'email' => '');
	$data['charset'] = 'utf-8';
	
	$data['subject'] = "";
	$data['ctrl_25'] = $_POST['nachricht'];
	$data['ctrl_20'] = $_POST['ansprechpartner'];
	$data['ctrl_21'] = $_POST['email'];
	$data['ctrl_22'] = $_POST['telefon'];
	$data['ctrl_23'] = $_POST['aufmerksam'];

	$data['html'] = '
	<html>
		<head>
			<title>'.$data['subject'].'</title>
		</head>
		<body>
			<div>
				<p>'.$data['ctrl_20'].'</p>
				<p>'.$data['ctrl_21'].'</p>
				<p>'.$data['ctrl_22'].'</p>
				<p>'.$data['ctrl_23'].'</p>
				<p>----------------------</p>
				<p>'.nl2br($data['ctrl_25']).'</p>
			</div>
		</body>
	</html>';


	$smtp = new Swift_SmtpTransport($data['smtp']['host'], $data['smtp']['port']);
	$smtp->setUsername($data['smtp']['username']);
	$smtp->setPassword($data['smtp']['password']);
	
	$mail = new Swift_Message($data['subject']);
	$mail->setBody($data['html'])
		 ->setCharset($data['charset'])
		 ->setContentType("text/html")
		 ->setFrom($data['from']['email'], $data['from']['name'])
		 ->setTo($data['to']['email'], $data['to']['name']);      
	
	$swift = new Swift_Mailer($smtp);
	$swift->send($mail,$recipient);

	echo 'OK';

Wenn ich das ganze ohne jQuery abschicken würde, dann würde ich mein Script um folgendes erweitern

$Fehler = array();

if(empty($_POST['ansprechpartner'])) {
            $Fehler[] = "Bitte geben Sie Ihren Namen an";
 }

if(isset($_POST['abschicken']) && empty($Fehler)) {
  [Hier das Script von etwas weiter oben]
}

Klappt auch (ohne jQuery). Jetzt kommt eben mein Problem was ich nicht verstehe. Wenn in $Fehler etwas vorhanden ist, dann darf das Formular ja nicht abgeschickt werden, was es auch nicht macht aber der User sollte eine Rückmeldung erhalten dafür kann ich in meiner Index Datei

<p id="response"></p>

nutzten, wie ich es jetzt auch schon bei meiner Meldung mache, die ich erhalte wenn das Formular erfolgreich abgeschickt wurde. Außerdem dürfen die Anweisungen die in

$.post('senden.php', data, function(msg) {
}

stehen nicht ausgeführt werden, wenn ein Fehler vorhanden sind. Und dieses ganze Zusammenspiel verstehe ich einfach nicht.