Kleine Anpassung in Code für Kontaktformular

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Failix

Neues Mitglied
3 Mai 2021
12
1
3
50
Hallo zusammen,

ich habe mir mit Hilfe dieser Anleitung ...

https://www.php-einfach.de/experte/php-codebeispiele/kontaktformular/

... ein Kontaktformular erstellt. Das funktioniert wunderbar, alle im Formular verwendeten Inputs werden erkannt und in der versendeten Mail korrekt wiedergegeben.

Nur eine kleine Sache hätte ich gern anders, die ich aber allein nicht lösen kann:

Hat ein Input einen Namen aus zwei Wörtern mit Leerzeichen, also z. B. name="Anzahl Artikel", erscheint dies in der Mail als "Anzahl_Artikel", das Leerzeichen wird also zum Unterstrich. Ich hätte aber auch in der Mail lieber ein Leerzeichen anstelle des Unterstrichs.

Könnte mir eventuell jemand weiterhelfen, bitte?

Danke und Gruß
Felix
 

Failix

Neues Mitglied
3 Mai 2021
12
1
3
50
Ich habe es versucht, aber es bringt ein zweifelhaftes Ergebnis. Also:

Der Name des Inputs ist "Anzahl Hefte".

In der Mail steht "Anzahl_Hefte".

Also habe ich versucht, str_replace so einzubauen: *

foreach($_POST as $name => $value) {
if (in_array($name, $ignore_fields)) {
continue; //Ignore Felder wird nicht in die Mail eingefügt
}
$msg .= "$name:\n\n$value\n\n\n";
$msg = str_replace("_"," ","Anzahl_Hefte");
}

Das funktioniert, allerdings steht nun in der Mail "Anzahl Hefte" und weiter nix. Irgendwie habe ich den gesamten Inhalt gegen zwei Wörter getauscht. ;-)

Für eine weitere Hilfestellung wäre ich dankbar!

* siehe wieder send_email.php ab Zeile 34 in https://www.php-einfach.de/experte/php-codebeispiele/kontaktformular/
 

Sempervivum

Senior HTML'ler
18 Oktober 2016
2.456
466
83
68
Irgendwie habe ich den gesamten Inhalt gegen zwei Wörter getauscht. ;-)
Allerdings, und zwar erklärt sich das folgender Maßen:
  1. Du hast den Punkt vor dem Gleichheitszeichen weg gelassen. Dieser bewirkt, dass der Text an den bestehenden Wert von $msg angehängt wird.
  2. Du hast $value weg gelassen.
  3. Außerdem hast Du "Anzahl_Hefte" hart kodiert, so dass das bei jedem Parameter verwendet würde.
Versuche es so:
Code:
$msg .= str_replace("_"," ",$name) . ":\n\n$value\n\n\n";

BTW: Besser Codetags beim Posten von Code benutzen: Das Menüsymbol mit den drei Punkten in der Werkzeugleiste oben in der Mitte und dann </>
 
  • Like
Reaktionen: Failix

tk1234

Aktives Mitglied
2 September 2020
124
28
28
ich habe mir mit Hilfe dieser Anleitung ... […] ... ein Kontaktformular erstellt.
Das Script taugt nichts. Mit mail() ist es Glückssache ob die Mail ankommt, verwende eine Mailerklasse (z.B. PHPMailer). Zudem darfst du die E-Mailadresse des Besuchers nicht als From-Adresse in der Mail verwenden: da dein Server höchstwahrscheinlich nicht berechtigt ist, Mails mit der Domain des Besuchers als Absender zu verschicken, erhöhst du die Wahrscheinlichkeit dass die Mail nicht, ankommt deutlich.
 

Failix

Neues Mitglied
3 Mai 2021
12
1
3
50
@Sempervivum Vielen herzlichen Dank, jetzt funktioniert es! Und ich denke, ich habe dabei auch etwas gelernt.

Eine Frage, die sich mir noch stellt: Warum wurde der Unterstrich eigentlich anstelle des Leerzeichens übermittelt? Ist das ein Standardverhalten?

@tk1234 Ich werde mich belesen müssen, PHPMailer ist völliges Neuland für mich. Sehr nachvollziehbar ist hingegen die Sache mit der Mailadresse. Das funktioniert zwar, aber so richtig sauber ist es nicht – ein Reply-To wäre besser, um zu verhindern, dass man sich selbst die Antwort auf eine Mail aus dem Formular schickt. Vielleicht gelingt es mir als reine Übungsaufgabe, das Script dahin gehend umzubauen.