Weiterleitung nach E-Mail Versand mit abgesendeten Daten

andreano

Mitglied
Hallo ike bin Aleks,
na das was war ein Witz. Ich habe eine Problem aber keine passende Lösung dazu.
Bitte um Rat / denkanstoß / Hilfe.

PHP:
$nachricht = $_POST["text"];
$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
$telefonnummer = $_POST["telefonnummer"];
//Empfang-ende
if ($_POST["Senden"] == 'Absenden'){
if ($_POST["vorname"] != '' && $_POST["nachname"] != ''  && $_POST["text"] != ''  && $_POST["telefonnummer"] != ''){
$emailContent[] = '<p>Folgende Daten wurden über das Kontaktformular übermittelt.</p>';
$emailContent[] = '<table>';
$emailContent[] = '<tr><td width="10px;"><b>Vorname: </b></td><td>'.$vorname.'</td><tr>';
$emailContent[] = '<tr><td width="10px;"><b>Nachname: </b></td><td>'.$nachname.'</td><tr>';
$emailContent[] = '<tr><td width="10px;"><b>Telefonnummer: </b></td><td>'.$telefonnummer.'</td><tr>';
$emailContent[] = '<tr><td width="10px;"><b>Anfrage: </b></td><td>'.$nachricht.'</td><tr>';
$emailContent[] = '</table>';
$emailContent[] = '<p>Die Nachricht wurde am '.date('d.m.Y').' um '.date('H:i:s').' Uhr gesendet.</p>';
$emailContent[] = '</body></html>';
$emailCompleteContent = implode( '', $emailContent );
try {
	$mail = new PHPMailer(true); //New instance, with exceptions enabled
	$body = $emailCompleteContent;
	$body = preg_replace('/\\\\/','', $body); //Strip backslashes

	$mail->IsSMTP();			// tell the class to use SMTP
	$mail->SMTPAuth   = true;	// enable SMTP authentication
	$mail->Port       = 25;		// set the SMTP server port
	$mail->Host       = "localhost";			// SMTP server
	//$mail->Username   = "name@domain.com";	// SMTP server username
	//$mail->Password   = "password";			// SMTP server password

	$mail->IsSendmail();  // tell the class to use Sendmail
	#$$mail->AddReplyTo($email,$name);
	$mail->From       = "deine@mail.com";	//Absendermail
	$mail->FromName   = "Kontaktformular";	//Absender Anzeige Name
	$to = "empfangs@mail.com";		//Empfängermail
	$mail->AddAddress($to);
	$mail->Subject	= "Kontaktformular";	//Betreff
	$mail->AltBody	= "To view the message, please use an HTML compatible email viewer!"; // Text wenn das mein Programm/Seite kein HTML wiedergeben kann.
	$mail->WordWrap	= 80; 	// set word wrap
	$mail->MsgHTML($body);	//das Html Body wurde erstellt
	$mail->IsHTML(true);	// send as HTML
	$mail->Send();
	// UND GENAU HIER BRAUCHE ICH DIE HILLFE
	
}
catch (phpmailerException $e){
	echo $e->errorMessage();
	}
}
else{
	echo '<br>Sie haben nicht alle <span class="special-info">* Pflichtfelder</span> Ausgefühlt.<br>';
}
// UND GENAU HIER BRAUCHE ICH DIE HILLFE
Die Sache ist die das nach dem erfolgreichen absenden der Mail ich eine weiterleitung mit den werten haben will:
PHP:
$nachricht = $_POST["text"];
$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
$telefonnummer = $_POST["telefonnummer"];
Mir fehlt leider ein wenig Logik wie ich das "Datenweiterleitungsproblem" Lösen soll.
-habe schon mit Javascrip die Seite einfach weitergeleitet gekriegt, aber nicht die Daten!


Bitte um Hilfe

Beste Grüße Aleks
 
Das ist so einfach nicht Möglich, man könnte diese per header() mit an die URL hängen.
Was aber bei großen Daten nicht zu empfehlen ist bzw. nicht funktioniert.

Ich würde sie entweder in einer Datenbank ablegen oder in die Session packen, eine normale Weiterleitung per header und einen Identifier mitgeben welche auch der gleiche Identifier in der Session bzw DB ist.
 
Das ist so einfach nicht Möglich, man könnte diese per header() mit an die URL hängen.
Was aber bei großen Daten nicht zu empfehlen ist bzw. nicht funktioniert.
Das mit session´s habe ich schon i-wo gelesen. Da ich aber nur sehr wenig datentransfer habe, könntest du mir vll. ein denkanstoß zu deiner aussage geben
man könnte diese per header() mit an die URL hängen.

meinst du so was?
PHP:
$mail->Send();
header('Location: ./kontakt_empfang.php');
 
Ja zb...

PHP:
if($mail->send()){
 header('Location: ./kontakt_empfang.php?msg='.$nachricht.'&firstname='.$vorname.'&lastname='.$nachname.'&tel='.$telefonnummer);
}

// und im Script wo es hinführt dann die Paramter der URL mit GET abfragen:


$tel             = $_GET['tel'];
$vorname    = $_GET['firstname'];
$nachname = $_GET['lastname'];
$nachricht   = $_GET['msg'];
 
Hi Maniac,
ich habe zwischenzeitlich deine Lösung angewendet, habe aber ein Problem vll. ist es auch das was du von Anfang an gesagt hat vll. auch nicht.
Problembeschreibung:
-nachdem ich die nachricht abgesendet habe ladet sich die seite einfach nur neu und die daten bleiben da wo die sind ( in den Inputfeldern )
-gleichzeitig wird die e-mail gleich doppelt versendet!

soll ich vll. doch lieber den Sessions Arbeiten?

Oder kannst du mir bei dem jetzigen problem helfen?
 
Eigentlich totaler Murx, aber du kannst auch mit versteckten input-Feldern und einer automatischen Weiterleitung arbeiten...

PHP:
echo '<input type="hidden" name="nachricht" value="'.$nachricht.'" />';
echo '<meta http-equiv="refresh" content="1; URL=http://deine.url.com/">'; //die 1 beschreibt die Sekunden, nach denen refresht wird

würde jedoch auch auf eine Session zurückgreifen, ist einfach eleganter.

Allerdings frage ich mich, wieso du den Inhalt der versendeten Mail nicht direkt hier ausgibst? Oder include die benötigte Datei einfach...
 
Soweit mir bekannt ist, gibt mail() TRUE zurück, wenn die E-Mail erfolgreich für den Versand akzeptiert wurde, sonst FALSE.

Bei Die übergebenen Werte könnten dann z. B. in Sitzungen gespeichert und weiterverarbeietet werden.
 
ich weiß jetzt wieso ich den Murks mit doppeltem Mailversand hatte!

Erklärung:
mein code
PHP:
// bis hierher war bei mir ales richtig
$mail->Send();
// nach dem $mail->Send(); habe ich um hilfe gebeten

Hilfe kam von Maniac,
sein code
PHP:
if($mail->send()){
 header('Location: ./kontakt_empfang.php?msg='.$nachricht.'&firstname='.$vorname.'&lastname='.$nachname.'&tel='.$telefonnummer);
}

// und im Script wo es hinführt dann die Paramter der URL mit GET abfragen:


$tel             = $_GET['tel'];
$vorname    = $_GET['firstname'];
$nachname = $_GET['lastname'];
$nachricht   = $_GET['msg'];

die sache ist die das die if-abfrage in dem fall die funkion $mail->Send() noch mal ausgeführt hat d.h. beim ersten versand von mir und dann noch mal bei der abfrage von Maniac.


Meine Lösung nach 2 Tage ist:
Seite 1.
PHP:
//mein ganzer HTML-code

//variable initialesieren
session_start();
$_SESSION['vorname'] 		= $_POST["vorname"];
$_SESSION['nachname'] 		= $_POST["nachname"];
$_SESSION['telefonnummer']	= $_POST["telefonnummer"];
$_SESSION['nachricht']		= $_POST["nachricht"];
//Empfang-ende
				if ($_POST["Senden"] == 'Absenden'){
					if ($_POST["vorname"] != '' && $_POST["nachname"] != ''  && $_POST["nachricht"] != ''  && $_POST["telefonnummer"] != ''){
					$emailContent[] = '<p>Folgende Daten wurden über das Kontaktformular übermittelt.</p>';
					$emailContent[] = '<table>';
					$emailContent[] = '<tr><td width="10px;"><b>Vorname: </b></td><td>'.$_POST["vorname"].'</td><tr>';
					$emailContent[] = '<tr><td width="10px;"><b>Nachname: </b></td><td>'.$_POST["nachname"].'</td><tr>';
					$emailContent[] = '<tr><td width="10px;"><b>Telefonnummer: </b></td><td>'.$_POST["telefonnummer"].'</td><tr>';
					$emailContent[] = '<tr><td width="10px;"><b>Nachricht: </b></td><td>'.$_POST["nachricht"].'</td><tr>';
					$emailContent[] = '</table>';
					$emailContent[] = '<p>Die Nachricht wurde am '.date('d.m.Y').' um '.date('H:i:s').' Uhr gesendet.</p>';
					$emailContent[] = '<p>Bitte Antworten Sie nicht auf diese E-Mail.';
					$emailContent[] = '</body></html>';
					$emailCompleteContent = implode( '', $emailContent );
						try {
							$mail = new PHPMailer(true); //New instance, with exceptions enabled
							$body = $emailCompleteContent;
							$body = preg_replace('/\\\\/','', $body); //Strip backslashes
						
							$mail->IsSMTP();			// tell the class to use SMTP
							$mail->SMTPAuth		= true;	// enable SMTP authentication
							$mail->Port			= 25;	// set the SMTP server port
							$mail->Host			= "localhost";			// SMTP server
							//$mail->Username	= "name@domain.com";	// SMTP server username
							//$mail->Password   = "password";			// SMTP server password
						
							$mail->IsSendmail();  // tell the class to use Sendmail
							#$$mail->AddReplyTo($email,$name);
							$mail->From		= "noreply@mail.com";			//Absendermail
							$mail->FromName	= "Kontaktformular";			//Absender Anzeige Name
							$mail->AddAddress("tralala@gmail.com");	//Empfängermail
							$mail->Subject	= "Kontaktformular Anfrage";	//Betreff
							$mail->AltBody	= "To view the message, please use an HTML compatible email viewer!"; // Text wenn das mein Programm/Seite kein HTML wiedergeben kann.
							$mail->WordWrap	= 80; 	// set word wrap
							$mail->MsgHTML($body);	//das Html Body wurde erstellt
							$mail->IsHTML(true);	// send as HTML
							$is_send = $mail->Send();
							
							if ($is_send){
								echo '<meta http-equiv="refresh" content="0; URL=./kontakt_empfang.php">';
							}
							
						}
						catch (phpmailerException $e){							
							echo '<br><span class="special-info">Upss.. da ist wohl was <i>schief</i> gelaufen!<br><br>'.$e->errorMessage().'</span>';
							}
					}
					else{
						echo '<span class="pflichtfelder-error">Sie haben nicht alle <span class="special-info">* Pflichtfelder</span> Ausgefühlt.</span>';
					}
				}
				//pflichtfelder anfrage ende


Jetzt suche ich noch eine Lösung für ein kleines "schönheitsprblem".
Beschreibung:
Nachdem die Daten abgesendet wurden wird die Seite mit dem Untenstehenden code Neugeladen.
PHP:
if ($is_send){
	echo '<meta http-equiv="refresh" content="0; URL=./kontakt_empfang.php">';
}

Genau das will ich vermeiden. Ich will das nachdem der User die Daten abgesendet hat, er sofort auf die Seite 2 weitergeleitet wird.
Ja ich weiß mann muss es mit der header-Funktion machen, und genau das griege ich nicht hin.

Mein Problem nachdem ich das versuche abzusenden, wird die seite einfach nur neugeladen und mehr nicht. Ich werde nicht weitergeleitet.

hier sind die gescheiterten versuche:
PHP:
//versuch nur 1  -> passier absolut nichts / die seite wird einfach neugeladen mehr nciht
header('Location: ./kontakt_empfang.php');


//versuch nr 2 -> das gleich was auch bei dem ersten versuch / auf der zweiten seite werte ich dann die daten mit  $vorname = $_GET["vorname"]; ect.
header('Location: ./kontakt_empfang.php?vorname='.$_POST["vorname"].'&nachname='.$_POST["nachname"].'&telefonnummer='.$_POST["telefonnummer"].'&nachricht='.$_POST["nachricht"]);

hat einer noch vll. ein vorschlag?
 
Include einfach die gewünschte Seite, wenn du auf dieser nichts ausgibst fällt das ja nicht auf. ;)
 

Neue Beiträge

Zurück