• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

[PHP] PHP Formmailer

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Hallo ihr lieben!

Ich habe ein Problem mit meinem PHP Formmailer.
Wahrscheinlich ist es wieder eine der typischen Nichtigkeiten, die man vermeiden kann,
doch irgendwie stehe ich grad auf dem Schlauch und wäre glücklich, wenn mal einer von euch einen Blick drauf werfen würde:

Code:
<?php 

$betreff = "Betreff";  

$to = "[COLOR="red"]meine e-mail adresse[/COLOR]"; 

$inhalt = "Name: $1name $2name\n $country\nBetrag min.: $ammin\nBetrag max.: $ammax\nNachricht: $message"; 

mail ("$to", "$betreff", "$inhalt"); 
header("location: [COLOR="red"]http://www.google.de[/COLOR]"); 
?>

Jetzt frage ich mir nur, warum bei mir keine Mails ankommen, die den versprochenen Inhalt haben.
Google.de wird irgendeine Adresse. Was da hinkommt weiß ich noch nicht.

Die zweite Frage, die ich gleich anschließen könnte:
Kann ich einen Text einrichten, der einfach 3 Sekunden lang angezeigt wird und erst DANN die Weiterleitung greift?



Vielen Dank für jegliche Hilfe.
 

lmb

Weisser Rosenapfel
Registriert
12.01.09
Beiträge
776
PHP.net sagt:
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP.
Das heisst, header() muss am Anfang stehen, der darauffolgende Code wird nicht ausgeführt.
BTW sind auch einige Variablen nicht definiert.
Anbieten würde sich eine Weiterleitung mit JS oder Meta-HTML ;)
 

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
Hallo.

mit dem Header hat das nichts zu tun - die Funktion header():void darf nur dann aufgerufen werden wenn vorher kein Output produziert wurde (kein echo/print oder HTML-Code ausgegeben wurde).

Auf welchem Server wird das Script ausgeführt? Was liefert ein einfaches Testmail? Kommt es an?
Code:
$ret = mail('[email protected]', 'testmail', 'testmessage');
var_dump($ret);
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Hey Leute!

Ich habs jetzt!
Mir ist grad einfach einwahnsinnig blöder Fehler aufgefallen.
Ich hab lediglich eine Variable versehentlich überschrieben :|

Habe aber jetzt ein neues Problem.
Ich bekomme zwar eine e-mail vom Server. Allerdings ist diese leider leer.
Sprich ich bekomme den Inhalt nicht definiert.

Code:
<?php 

$betreff = "Anmeldung";

$inhalt = ("Name: " & "$1name" & " " & "$2name" & "\n " & "$country" & "\nBetrag min.: " & "$ammin" & "\nBetrag max.: " & "$ammax" & "\nNachricht: " & "$message");

mail ("[COLOR="red"][meine mail][/COLOR]", "$betreff", "$inhalt"); 

echo "Vielen Dank für Deine Anmeldung!"

?>

Wenn ich den Code umschreibe, also:

Code:
<?php 

$betreff = "Anmeldung";

$inhalt = ("Name: $1name $2name\n $country\n Betrag min.: $ammin\ nBetrag max.: $ammax\n Nachricht: $message");

mail ("[COLOR="red"][meine mail][/COLOR]", "$betreff", "$inhalt"); 

echo "Vielen Dank für Deine Anmeldung!"

?>

dann bekomme ich zwar einen Inhalt in der Mail, allerdings nur die Namen der Variablen mit Dollar-Zeichen.
Irgendwie eigenartig, oder?!

Kann es sein, dass die Variablen nicht richtig vom Formular (HTML) befüllt werden?
Wie rufe ich denn die Variablen im PHP auf? Ich sehe nicht im geringsten, dass da der Inhalt irgendwie übergeben wird :(

Bei der zweiten Variante bekomme ich folgende Mail:

Name: $1name $2name

Betrag min.:
Betrag max.:
Nachricht:


Dankt für Hilfe.
 
Zuletzt bearbeitet:

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
Strings werden mit einem Punkt verknüpft (nicht mit & -> das wäre ein Bitweises 'AND').
Ausserdem ist es ein etwas eigenartiger Stil einzelne Variablen unter doppelte Hochkomma zu setzen. Der Inhalt wird zwar - anders als bei einfachen Hochkomma - übersetzt... naja...
noch angemerkt zum Stil: verwende stets eine Sprache für Kommentare und Variablen (vorzugsweise EN). Variablen dürfen ruhig auch "sprechend" sein.

der korrekte Code müsste ungefähr so aussehen:
Code:
$message = "Name: " . $firstname . " " . $lasntame . "\nBetrag: " . $maxAmount;
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Also die Schreibweise der Variablen ist ja mein Ding :)
Ich komme so echt gut klar.

Mit der zweiten Schreibweise geht das auch sehr gut:
Code:
<?php 

$betreff = "Anmeldung";

$inhalt = ("Name: $1name $2name\n $country\n Betrag min.: $ammin\ nBetrag max.: $ammax\n Nachricht: $message");

mail ("[COLOR="red"][meine mail][/COLOR]", "$betreff", "$inhalt"); 

echo "Vielen Dank für Deine Anmeldung!"

?>

Mein einziges Problem ist, dass in den Variablen scheibar nichts drin steht.
In meinem vorangegangenen Beitrag ist ja auch ein Zitat der e-mail, die ich vom Server bekomme.
Sprich die Aufbereitung der e-mail funktioniert ohne Probeme.

Kann ich irgendwie ein "Warnfenster" in Safari öffnen lassen, um den Inhalt der Variablen vor dem Absenden der Mail zu überprüfen? Ich glaube echt, dass die Variablen einfach leer sind bzw. das Formular (HTML) den Inhalt nicht übergibt!!!!

Dazu eine Anregung / einen Tipp?


Danke.
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Ich poste jetzt einfach mal die beiden Dateien (formular.html & send.php).

formular.html:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Anmeldung</title>
</head>

<body>

 <br><form action="senden.php" method="post"> 
<table><tr> 
<td>Vorname:</td> 
<td><input type="text" name="1name"></td> 
</tr> 
<tr> 
<td>Nachname:</td> 
<td><input type="text" name="2name"></td> 
</tr> 
<tr> 
<td>E-Mail:</td> 
<td><input type="text" name="mail"></td> 
</tr>  
<tr> 
<td>Land:</td> 
<td><input type="text" name="country"></td> 
</tr> 
<td>Betrag min. (optional):</td> 
<td><input type="text" name="ammin"></td> 
</tr> 
<td>Betrag max. (optional):</td> 
<td><input type="text" name="ammax"></td> 
</tr> 
<td>Nachricht (optional):</td> 
<td><input type="text" name="message"></td>
</tr> 
<td><input type="submit" name="senden" value="Apply!"></td> 
</form> 
<td></td> 
<td> 
</td> 
</tr> 
</table> 

</body>
</html>

und send.php:
Code:
<?php 

$betreff = "Anmeldung";

$inhalt = ("Name: $1name $2name\n $country\n Betrag min.: $ammin\ nBetrag max.: $ammax\n Nachricht: $message");

mail ("[meine mail]", "$betreff", "$inhalt"); 

echo "Vielen Dank für Deine Anmeldung!"

?>


Also wenn ich jetzt wirklich zu doof dafür bin, tu ich mir echt leid :D
Aber ich finde meinen Fehler einfach nicht, egal, was ich probiere :mad:
 

torben1

Celler Dickstiel
Registriert
05.08.08
Beiträge
796
Was passiert wenn Du die Variablen mit $_POST['name_im_formular'] ansprichst? Und Teste dann doch die Ausgabe mit echo.
Dann sollte es funktionieren.

Torben
 

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
Die Formulardaten werden je nach Methode (<form method="post|get">) in die globale PHP-Variable $_GET oder $_POST übertragen (für beide Methoden gibt es $_REQUEST). Mit var_dump($_POST) sollten alle Formulardaten (nachdem deine Form-Methode auf 'post' gestellt ist) angezeigt werden. Der Einzelzugriff erfolgt dann genau so wie torben1 es beschreibt.
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Also gehe ich davon aus, dass ich jede einzelne Variable aus dem $_POST ausklammern und die jeweilige Variable befüllen muss.
Folgender Maßen:

Code:
<?php

$1name = $_POST["1name"];

$2name = $_POST["2name"];

$mail = $_POST["mail"];

und so weiter.

Wenn ich das allerdings so mache, passiert gar nichts mehr.
Das Script bleibt einfach stehen und gut ist.
 

torben1

Celler Dickstiel
Registriert
05.08.08
Beiträge
796
Also wenn Du befolgt hättest was bisher geschrieben wurde sollte es auch klappen ;)

z.B.
$inhalt = "Name: ".$_POST['1name']." ".$_POST['2name']."\n Land: ".$_POST['country'];
echo $inhalt;
Torben
 

DubiDuh

Zwiebelapfel
Registriert
20.05.08
Beiträge
1.288
Und damit du bald nicht an das Problem stößt, dass deine Emails immer im Spam Ordner landen kannst du direkt den PHPMailer benutzen, welchen als Klasse bereits im netz gibt: http://phpmailer.worxware.com/index.php?pg=examples

Dieses kleine Stück Code übernimmt alle deine Augaben, du brauchst nur die Parameter eigeben und den Rest macht der kleine Mailer für dich.
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Um Gottes Willen Freunde!

Jetzt fühle ich mich zur Gänze verblödet!
Danke Torben! Jetzt hab ich das mit dem $_POST[…].sowienoch verstanden!

Hätte ich auch selber drauf kommen können.
Aber manchmal steht man einfach auf dem Schlauch!

Umso schöner, dass es solch eine tolle Community gibt, die so nett mit solchen auf-dem-Schlauch-Steher wie mir umgeht :)
Danke noch mal.

Das mit dem Spam-Filter hatte ich so um die 5-6 Mal. Aber jetzt hat sich mein Mail an meine Provider-Mail gewöhnt.
Ich bekomme die Auto-Mails immer vom gleichen Absender. Und daher wird das ganze kein Problem darstellen.

Aber trotzdem danke für den Link, DubiDuh. Fall ich auf die wahnsinnig tolle Idee kommen sollte, einen Autoresponder einzubauen, der eine Bestätigungsmail an den Absender des Formulares schickt, werde ich mich bestimmt damit beschäftigen.


Vielen Dank an alle und mit diesen Worten schließe ich ab:
ES GEHT!