Formular an zwei verschiedene Adressen verschicken

urania

Neues Mitglied
Thread Starter
Mitglied seit
30.04.2008
Beiträge
23
Hallihallo,

gleich vorab - ich bin absoluter php Anfaenger, deswegen ist mein Code vermutlich eine Katastrophe;)

Nun zu meiner Frage! Ich moechte gerne wenn ein Kunde in einem Formular im Drop Down Menue Punkt a auswaehlt dass es an die Email Adresse a geschickt wird und wenn er Punkt b auswaehlt es an Email Adresse b geht.
Gibt es da eine Moeglichkeit?

Braucht ihr den Quelltext?
Habe im Html beide Punkte mit einem Value versehen, weiss aber nciht wie ich php dazu bringe das ganze richtig auszulesen und dementsprechend zu handeln :(

Vielen Dank vorab schon mal fuer Eure Hilfe!
 

msslovi0

Aktives Mitglied
Mitglied seit
20.03.2005
Beiträge
2.727
HTML:
HTML:
<form method="post" action="...">
  <select name="to">
    <option value="klaus">Klaus</option>
    <option value="hans">Hans</option>
  </select>
</form>
PHP:
<?php
switch($_POST['to']) {
  case 'klaus':
  mail('klaus@example.com', 'Betreff', 'Text');
  break;
  case 'hans':
  mail('hans@example.com', 'Betreff', 'Text');
  break;
}
?>
 

Kümmelkorn

Aktives Mitglied
Mitglied seit
06.10.2008
Beiträge
1.941
Denk dran, dass du an die mail-Funktion einen Absendern übergeben musst. Mehr dazu in der PHP Dokumentation.
 

urania

Neues Mitglied
Thread Starter
Mitglied seit
30.04.2008
Beiträge
23
Erst mal herzlichen Dank fuer die schnelle Hilfe.
Leider stelle ich mich wohl zu bloed an :( Hier mal mein Code:

html:
<select name="shop">
<option>Bitte Shop auswählen…</option>
<option value="bk">BK</option>
<option value="ba">BA</option>
</select>

$termin = $_POST['termin'];
$produkt = $_POST['produkt'];
$shop = $_POST['shop'];
$name = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['name'] );
$telefon = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['telefon'] );

if($name != "") {
if($email != "" || $telefon != ""){
switch($_POST['shop']) {
case 'ba':
mail("xx@xxx.de","Anmeldung für xxx", "Name: ".$name."\nTelefon: ".$telefon."\nMail: ".$email."\n\n\nWunschgerät: ".$produkt."\nWunschtermin: ".$termin,"From: ".$email);

header('Location: index.php?id=67'); break;

case 'bk':
mail("xx@xxx.de","Anmeldung für xxx", "Name: ".$name."\nTelefon: ".$telefon."\nMail: ".$email."\n\n\nWunschgerät: ".$produkt."\nWunschtermin: ".$termin,"From: ".$email);

header('Location: index.php?id=67'); break;

}

} else { header('Location: index.php?id=68'); exit; }
} else { header('Location: index.php?id=68'); exit; }
 

Kümmelkorn

Aktives Mitglied
Mitglied seit
06.10.2008
Beiträge
1.941
kannst du mal den php-tag vom Forum nutzen, bitte? Dann würde ich evtl. auch besser durch den Quellcode durchblicken, sofern du ordentliche Einrückungen gesetzt hast! ;)

einfach um deinen Quellcode ein [php2] [/php2] setzen (ohne die beiden 2)

btw: Der Quellcode wird auch übersichtlicher, wenn du statt
PHP:
"Name: ".$name."\n..."
einfach nur
PHP:
"Name: $name\n..."
schreibst.

Hilfreich ist außerdem, wenn du nie mehr als EINEN Befehl pro Zeile setzt. - alles nur kleinigkeiten, aber die können allen anderen hier sehr nützlich sein, um deinen Quelltext schneller zu durchschauen und dir besser helfen zu können :)
 
Zuletzt bearbeitet:
D

dms

btw: Der Quellcode wird auch übersichtlicher, wenn du statt
PHP:
"Name: ".$name."\n..."
einfach nur
PHP:
"Name: $name\n..."
schreibst.
Das ist wohl Ansichtssache. Ich sehe gern wo Variablen verwendet wurden und wo es sich um einen reinen String handelt. :)
 

urania

Neues Mitglied
Thread Starter
Mitglied seit
30.04.2008
Beiträge
23
Tut mir leid - wie gesagt absoluter Anfaenger am Werk ;)

Lese mir noch schnell die Sachen aus dem Link durch und poste dann falls es nicht klappt!
 

urania

Neues Mitglied
Thread Starter
Mitglied seit
30.04.2008
Beiträge
23
Also wenn ich es jetzt richtig verstanden habe ist meine if Verschachtelung einfach nur unschön!?

Nochmal der Code:

PHP:
$termin = $_POST['termin'];
		$produkt = $_POST['produkt'];
		$shop = $_POST['shop'];
		$name = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['name'] );
		$telefon = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['telefon'] );
				
		if($name != "") {
			if($email != "" || $telefon != ""){ 
				switch($_POST['shop']) { 
 					case 'ba': 
  						mail("xxx@xxx.de","Anmeldung für xxx",
 "Name: ".$name."\nTelefon: ".$telefon."\nMail: ".$email."\n\n\nWunschgerät: ".$produkt."\nWunschtermin: 
".$termin,"From: ".$email);

					header('Location: index.php?id=67'); break;

     				case 'bk': 
  						mail("xxx@xxx.de","Anmeldung für xxx",
 "Name: ".$name."\nTelefon: ".$telefon."\nMail: ".$email."\n\n\nWunschgerät: ".$produkt."\nWunschtermin: 
".$termin,"From: ".$email);

					header('Location: index.php?id=67'); break;

				} 
				
			} else { header('Location: index.php?id=68'); exit; }
		} else { header('Location: index.php?id=68'); exit; }
Also wenn der Name nicht ungleich null ist und wenn entweder die Email-Adresse oder die Telefonnummer angegeben wurde soll es pruefen wo es hingeschickt werden muss und dem entsprechend versendet werden.
 

msslovi0

Aktives Mitglied
Mitglied seit
20.03.2005
Beiträge
2.727
Nein, sie macht das ganze vor allem auch schwer durchschaubar und schwer wartbar. Deine Eigenart, mehrere Befehle in eine Zeile zu schreiben tut hierbei ein übriges.

$email ist schon mal gar nicht gesetzt. Und darüber hinaus hast du noch immer nicht gesagt, was passiert, was nicht passiert und was deiner Meinung nach passieren sollte. Meine Glaskugel ist aber leider bei der Inspektion. Details zum HTML-Formular wären darüber hinaus auch hilfreich, beim Formatieren hilft [html2][/html2]
 

Kümmelkorn

Aktives Mitglied
Mitglied seit
06.10.2008
Beiträge
1.941
Setze mal am Anfang deiner PHP Datei folgendes:

PHP:
die( var_dump($_POST['shop']) );
und schreib mal auf, was der Browser dann ausspuckt.
 

urania

Neues Mitglied
Thread Starter
Mitglied seit
30.04.2008
Beiträge
23
Wenn ich das Formular ausfülle werde ich auch eine leere Seite weitergeleitet mit der Adresse http://..../....php. Es kommt weder bei der einen noch bei der anderen Adresse etwas an. Das php-Script liegt auf dem Webserver an der richtigen Stelle und funktioniert solange ich diesen Case nicht drin habe wird mir aber eben nur an eine Adresse verschickt.
 

Kümmelkorn

Aktives Mitglied
Mitglied seit
06.10.2008
Beiträge
1.941
kommentier mal deine Weiterleitung aus und ersetze sie durch eine beliebige Ausgabe. Klappt es dann?

übrigens kannst du mal in deine PHP Datei ganz an den anfang folgendes setzen:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', '1');
Bekommst du Meldungen? (bitte auch mit deiner ursprünglichen Datei prüfen!)
 

urania

Neues Mitglied
Thread Starter
Mitglied seit
30.04.2008
Beiträge
23
Entschuldige Forge,

ich weiss ehrlich gesagt nicht was ich machen soll:(
 

Kümmelkorn

Aktives Mitglied
Mitglied seit
06.10.2008
Beiträge
1.941
PHP:
// 1.
// An den Anfang der Datei:
error_reporting(E_ALL);
ini_set('display_errors', '1'); 

// Script ausführen, evtl. Fehlermeldungen posten.

// 2.
// error_reporting & ini_set stehen lassen!
// Deine Weiterleitungen:
header('Location: index.php?id=67');

// ersetzen mit:
echo "email an ba";

// bzw. :
echo "email an bk";

// Ausführen, Ergebnis posten.
:)
 

urania

Neues Mitglied
Thread Starter
Mitglied seit
30.04.2008
Beiträge
23
Also eine Fehlermeldung gibt es nicht.
Ich habe versucht den Code mal umzustellen wie es in dem Link beschrieben wurde.
Ergebnis ist nach allen Änderungen gleich - ich werde an eine blanke php Seite gleitet und nichts passiert.
Hier noch mal der komplette Code, bis auf die php Tags:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', '1');

function Verify_Email_Address($email_address) { 
  return preg_match('/\b[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}\b/i', $email_address) == 0 ? false : true; 
} 


/*print_r($_REQUEST);
exit();
die( var_dump($_POST['shop']) );*/
		
		$email = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $_POST['email'] );
		$email = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $email );
		
		$termin = $_POST['termin'];
		$produkt = $_POST['produkt'];
		$shop = $_POST['shop'];
		$name = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['name'] );
		$telefon = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['telefon'] );
				
				
		if ($name =""){
			header('Location: index.php?id=68'); exit;
			}
			
		if($email != "" || $telefon != ""){	 
			switch($_POST['shop']) { 
 					case 'ba': 
  						mail("xxx@xxx.de","Anmeldung für xxx", "Name: ".$name."\nTelefon: ".$telefon."\nMail: ".$email."\n\n\nWunschgerät: ".$produkt."\nWunschtermin: ".$termin,"From: ".$email);

					echo "xxx@xxx.de"; break;

     				case 'bk': 
  						mail("xxx@xxx.de","Anmeldung für xxx", "Name: ".$name."\nTelefon: ".$telefon."\nMail: ".$email."\n\n\nWunschgerät: ".$produkt."\nWunschtermin: ".$termin,"From: ".$email);

					echo "xxg@xxx"; break;
					
				} else {
				 header('Location: index.php?id=68'); exit;
			}
		}
 

niehle

Mitglied
Mitglied seit
26.08.2008
Beiträge
122
Also eine Fehlermeldung gibt es nicht.
Ich habe versucht den Code mal umzustellen wie es in dem Link beschrieben wurde.
Ergebnis ist nach allen Änderungen gleich - ich werde an eine blanke php Seite gleitet und nichts passiert.
Dann kommentier bitte die beiden Weiterleitungen aus und lass dir statt dessen sinnvolle Meldung ausgeben. So kannst du den Fehler finden und lernst gleichzeitig debuggen.
 

msslovi0

Aktives Mitglied
Mitglied seit
20.03.2005
Beiträge
2.727
Wenn ich den Code einfach mal in eine php-Datei werfe kommt prompt:
Code:
Parse error: parse error, unexpected T_ELSE in test.php on line 40
Also lass dir Fehler ausgeben, anders macht Debugging gar keinen Sinn.
 
Oben