Subject ändern

Ceyhan

Grünschnabel
Hallo zusammen

ich habe eine kleine frage und zwar bin ich an einem projekt dran das ich leider einbisschen komisch lösen muss

ich muss ein formular schreiben das die ausgewählten sachen im betreff stehen müssen. leider weiss ich nicht weiter wie ich das in diesem formmailer lösen kann.

kann mir da jemand weiterleiten

PHP:
<?php

/**
 * Konfiguration 
 *
 * Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!
 * 
 * Das Skript bitte in UTF-8 abspeichern (ohne BOM).
 */
 
// An welche Adresse sollen die Mails gesendet werden?
$zieladresse = 'testmail@provider.net';

// Welche Adresse soll als Absender angegeben werden?
// (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)
$absenderadresse = 'testmail@provider.net';

// Welcher Absendername soll verwendet werden?
$absendername = 'Projekt 1';

// Welchen Betreff sollen die Mails erhalten?
$betreff = 'test mail';

// Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
// Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$urlDankeSeite = 'http://www.meinewebseite.net/mailer/projekt1.php';

// Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
$trenner = ":\t"; // Doppelpunkt + Tabulator

/**
 * Ende Konfiguration
 */

if ($_SERVER['REQUEST_METHOD'] === "POST") {

	$header = array();
	$header[] = "From: ".mb_encode_mimeheader($absendername, "utf-8", "Q")." <".$absenderadresse.">";
	$header[] = "MIME-Version: 1.0";
	$header[] = "Content-type: text/plain; charset=utf-8";
	$header[] = "Content-transfer-encoding: 8bit";
	
    $mailtext = "";

    foreach ($_POST as $name => $wert) {
        if (is_array($wert)) {
		    foreach ($wert as $einzelwert) {
			    $mailtext .= $name.$trenner.$einzelwert."\n";
            }
        } else {
            $mailtext .= $name.$trenner.$wert."\n";
        }
    }

    mail(
    	$zieladresse, 
    	mb_encode_mimeheader($betreff, "utf-8", "Q"), 
    	$mailtext,
    	implode("\n", $header)
    ) or die("Die Mail konnte nicht versendet werden.");
    header("Location: $urlDankeSeite");
    exit;
}

header("Content-type: text/html; charset=utf-8");

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
    <head>
        <title>Router Mailer</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <h1>Router Mailer</h1>
        <form action="" method="post">
            <!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->
            <dl>
                <dt>Agent:</dt>
                <dd><select name="Agent">
					<option value="1">1</option>
					<option value="2">2</option>
					<option value="3">3</option>
					<option value="4">4</option>
					<option value="5">5</option>
					<option value="6">6</option>
					<option value="7">7</option>
					<option value="8">8</option>
					<option value="9">9</option>
					<option value="0">0</option>			
					</select></dd>
                <dt>Ihre E-Mail:</dt>
                <dd><input type="text" name="E-Mail" /></dd>
                <dt>Sie können:</dt>
                <dd><input type="checkbox" name="kannwas[]" value="HTML" />HTML <input type="checkbox" name="kannwas[]" value="PHP" />PHP</dd>
                <dt>Sie sind:</dt>
                <dd><input type="radio" name="sexus" value="M" />Mann <input type="radio" name="sexus" value="Frau" />Frau</dd>
                <dt>Sie mögen:</dt>
                <dd><select name="Browser"><option value="Opera">Opera</option><option value="Mozilla">Mozilla</option></select></dd>
                <dt>Bemerkungen:</dt>
                <dd><textarea name="Bemerkungen" rows="3" cols="20">Bemerkungen</textarea></dd>
            </dl>
            <!-- Ende der Beispielangaben -->
            <p>
            <input type="submit" value="Senden" />
            <input type="reset" value="Zurücksetzen" />
            </p>
        </form>
    </body>
</html>

und genau da

PHP:
$betreff = 'test mail';

muss ich von der auswahl die ich im formular mache alles im betreff drin haben.

könnt ihr mir da helfen

danke euch jetzt schon

gruss ceyhan
 
super funktioniert und wie kann ich ein
test / test2 machen also nach jeder auswahl ein leerschlag und das zeichen / dann wieder leerschlag? nur noch das dan bin ich total happy :)

weil momentan kommt immer alles zusammen und & also test&test2

doppelpunkt kommt ja auch nicht sondern ein = zeichen
 
PHP:
$betreff = preg_replace('&', ' / ', http_build_query($_POST));
Dadurch werden alle &-Zeichen mit LeerschlagSlashLeerschlag ersetzt...

Und irgendwas mit = und Doppelpunkt wolltest du auch noch?

PHP:
$betreff = http_build_query($_POST);
$betreff = preg_replace('&', ' / ', $betreff);
$betreff = preg_replace('=', ': ', $betreff);
Ich bin mir nicht sicher, ob man zwei mal preg_replace ineinander machen darf, daher mal so... :)

Edit: Lösung gefunden, wie es gehen sollte auf einmal:
PHP:
$betreff = preg_replace(array('&','='), array(' / ',': '), http_build_query($_POST));
 
Zuletzt bearbeitet:
Das ist – glaube ich – in dem Fall zuviel. Nutze lieber folgendes:
PHP:
$betreff = http_build_query($_POST);
$betreff = str_replace(array('&', '='), array(' / ', ': '), $betreff);
 
Ja ich war mir nicht sicher, ob das funktioniert, wenn ich alles in eine Zeile schreib.
Da http_build_query aber auch schon eine Funktion ist, sollte ich das wohl nicht machen... Wobei es funktionieren könnte, ich habs natürlich nicht ausprobiert...

Aber die Idee mit dem Array ist mir auch erst gekommen, dann hab ichs mal nachgekuckt und es funktioniert. Man lernt nie aus...
 
hallo und guten morgen

PHP:
$betreff = preg_replace(array('&','='), array(' / ',': '), http_build_query($_POST));
funktionierte nicht.
es ergab fehler

PHP:
$betreff = http_build_query($_POST);
$betreff = str_replace(array('&', '='), array(' / ', ': '), $betreff);
wiederum funktioniert einwand frei.

danke viel mal für die flotte hilfe.
ich werde es noch ausbauen und wenn ich wieder was habe das ich nicht lösen kann werde ich mich melden :)

schönes wochenende
 
Dann eine Gedankennotiz: keine Funktion innerhalb von preg_replace verwenden...

Falsch, das ist kein Problem. Das Problem ist, dass du hier mit Kanonen auf Spatzen schießt, deinen Kanonen aber falsch geladen hast.
preg_replace ist eine sehr mächtige Funktion die mit Regulären Ausdrücken arbeitet (für diesen Fall hier nicht notwendig, da wir wissen was wir ersetzen wollen, str_replace ist daher genau passend).
Allerdings erwartet PHP, dass du deinen Regulären Ausdrück in Delimeter setzt.
Nur der Vollständigkeit halber, trotzdem für solche Probleme lieber str_replace nutzen:
PHP:
 preg_replace(array('/&/','/=/'), array(' / ',': '), http_build_query($_POST));
 
Ich weiß nicht, ob es Absicht ist, aber du hast eigentlich nur meinen Code wiederholt...

An sich war ich der Meinung, str_replace ist veraltet und out of date, daher benutze ich vorwiegend preg_replace.
Manchmal sind mehr Schritte halt doch eben besser wie nur einer. Man lernt - wie bereits erwähnt - nie aus. Dazu kommt, dass auch ich noch relativ am Anfang von PHP stehe. Ich hab zwar schon einige Projekte hinter mir - mit Erfolg, aber alles behandelt und verwendet hab ich selbstverständlich noch nicht.
 
Zurück