Text in Kontaktformular übertragen

  • Hallo,

    wenn ein Kunde auf einen bestimmten Link klickt, soll der Name des Produktes, der verlinkte Text, in die Betreffzeile eines Kontaktformulars übertragen werden um weitere Informationen zum Produkt anzufragen.

    Ist sowas mit HTML überhaupt möglich ? Ich habe leider nur wenig HTML-Kenntnisse, ich arbeite mit einem Programm zur Erstellung von Websites, bei dem man auch ohne Quellcode schreiben weit kommt, man kann aber HTML- und CSS-Code hinzufügen.

    Freue mich über jede Antwort.

    lg

  • Mit HTML alleine kommst du da nicht weiter, idealerweise nutzt man dazu PHP. Mit JavaScript lässt sich das aber auch noch regeln.

  • Im anderen Forum wurde der Beitrag wegen Crosspost jetzt geschlossen und ich habe noch keine Lösung und werde erstmal nicht woanders nochmal fragen. Ich bin sonst nicht in Foren unterwegs und wusste nicht, dass das ein Problem ist, sorry.

    Ich wäre an einer Lösung in JavaScript interessiert, kann aber kein JavaScript und ich komme leider auch nicht dazu mir das erstmal beizubringen. Das einzige was ich wahrscheinlich hinbekommen werde ist, wenn mir jemand ein Musterbeispiel geben könnte, es entsprechend anzupassen, dass ich es bei mir integrieren kann.

    lg vom verdammten Crossposter

  • Ich würde es mal hiermit versuchen wollen, was du geschickt hast:

    https://www.medianotions.de/webdesign-blog…meter-abfragen/

    Angenommen auf der Produktseite gibt es einen verlinkten Text der "Produkt1" heißt. Der Link führt zu contact.html. Auf der Seite contact.html gibt es ein Formular mit einer Betreff-Textfeld. In dieser Feld soll dann der Text "Produkt1" eingefügt werden. Wie konkret würde dann dieser Quellcode von der Seite die du mir geschickt hast aussehen ? Hier nochmal die unveränderte Version davon:


    Der Quellcode meines Formulars (zur Vereinfachung hier nur mit dem Betreff-Feld) auf der contact.html Seite sieht folgendermaßen aus:

    Das wäre echt super, wenn mir da jemand helfen könnte.

    Einmal editiert, zuletzt von Ibims (1. Februar 2020 um 17:48)

  • Moin Moin,

    der Link auf der auf die Contact.html-Seite führt muss natürlich einen Paramter enthalten. Der link könnte so aussehen:

    .../contact.html?product=Produkt1

    Dann ist "product" der Parameter und "Produkt1" der Wert.

    Wenn es nun JS sein muss, dann musst du zunächst aus der URL den Parameter auslesen und wenn dieser gesetzt ist kannst du mit dem Wert weiterarbeiten. Mit HTML alleine geht es nicht. Eine einfachere Alternative wäre mit PHP, falls es verfügbar ist.

    Um den Parameter aus der URL zu bekommen kannst du folgende Funktion benutzen:

    Code
    function getQueryVariable(variable) {
      var query = window.location.search.substring(1);
      var vars = query.split("&");
      for (var i=0;i<vars.length;i++) {
         var pair = vars[i].split("=");
         if (pair[0] == variable) {
            return pair[1];
         }
      }
    }

    Bei mehreren Parameter werden diese anhand des "&" getrennt, und dann wird der Parameter am "=" getrennt und du kannst auf den Wert zugreifen.

    Diese Funktion sollte im Head deiner contact.html stehen.

    Darunter kannst du direkt den Parameter abfragen und wenn er gesetzt ist dann in dein Formularfeld schreiben:

    Code
    var paraProduct = getQueryVariable("product");
    if (typeof(paraProduct) != 'undefined' && paraProduct != null) {
       // evtl. String replace durchführen, z. B. Leerzeichen, @ etc.
       //paraProduct = paraProduct.replace("%40","@");
       document.getElementById("imObjectForm_3_1").value = paraProduct;
    }

    Deine ID aus deinem Textfeld muss natürlich bei getElementById korrekt gesetzt werden. Diese solltest du unbedingt mit deinem Formular abgleiche und ggf. ändern. In solchen Editorprogrammen gibt es für die Textfelder bestimmt eine Eigenschaft für die ID.

    Mehr zum Thema value in ein Textfeld schreiben: hier «

    Zusammengefasst könntest du folgendes in dein Headbereich der contact.html schreiben und die URL aufrufen:

    Dann den Link .../contact.html?product=Produkt1 aufrufen und schauen was passiert. Du kannst das "?product=Produkt1" an die URL erstmal manuell hinzufügen und wenn das klappt auf deiner Produktseite den Link entsprechend anpassen.

    Hoffe es hilft etwas :-).

  • Vielen Dank ! Das funktioniert soweit. Gibt es noch eine Möglichkeit, dass die Leerzeichen mit übernommen werden ? Also wenn im Betreff dann z.B. nicht Produkt1 sondern Produkt 1 mit Leerzeichen dazwischen stehen soll? Dann wäre alles perfekt.

  • Vielen Dank ! Das funktioniert soweit. Gibt es noch eine Möglichkeit, dass die Leerzeichen mit übernommen werden ? Also wenn im Betreff dann z.B. nicht Produkt1 sondern Produkt 1 mit Leerzeichen dazwischen stehen soll? Dann wäre alles perfekt.

    genau wie synaptic schon schrieb. Für diesen Fall habe ich oben ein Beispiel eingefügt.

    Durch die "//" sind die Zeilen auskommentiert und werden nicht ausgeführt.

    füge an der Stelle bevor der Wert deinem Textfeld zugewiesen wird folgendes ein:

    Code
    paraProduct = paraProduct.replace("%20"," ");

    So wird das Zeichen %20 zu einem Leerschritt geändert.

    Weitere Zeichen kannst du natürlich zusätzlich einfügen.

    Hier ein bisschen Input für das URL-Encoding und eine Tabelle mit den Zeichen die du evtl. noch ersetzen lassen möchtest:

    https://de.wikipedia.org/wiki/URL-Encoding

    Als alternative schau dir mal die Funktion decodeURI an: https://www.w3schools.com/jsref/jsref_decodeuri.asp

    Schön, wenn es funktioniert :)

  • Vielen Dank für die weiteren Infos. Diese Bezeichnungen sind allerdings eher in der Form: "Product 1 Bezeichnung 1 Bezeichnung 2 Bezeichnung 3", es gibt also einige Leerzeichen. Wenn ich das so mache wie ihr sagt, funktioniert das aber nur mit dem ersten Leerzeichen, zwischen den anderen Leerzeichen steht dann wieder "%". Gibt es eine Möglichkeit alle "%" durch Leerzeichen zu ersetzen ? Die Länge dieser Bezeichnungen und Anzahl sowie Position der Leerzeichen ist immer ganz verschieden, falls das relevant ist.

    Edit: Ok, ich kann jetzt erst mal noch nicht ganz sicher sagen ob es immer in allen Situationen unter allen Umständen funktioniert aber wenn ich einfach mehrere Male "paraProduct = paraProduct.replace("%20"," ");" einfüge dann scheint es erst mal alles so wie ich will auch mit mehrere Leerzeichen zu funktionieren.

    Danke für die sehr tolle Unterstützung !

    Einmal editiert, zuletzt von Ibims (8. Februar 2020 um 00:17)

  • Schön wenn es funktioniert :-).

    Wenn du die Zeile in folgende änderst werden automatisch alle Vorkommen von Leerzeichen ersetzt:

    Code
    paraProduct = paraProduct.replace(/%20/g," ");

    Du könntest die folgende Zeile statt der Replace-Zeile einfügen, dann sollten automatisch alle Leerzeichen und alle URL-Zeichen entfernt sein:

    Code
    paraProduct = decodeURI(paraProduct);

    Wenn du mehrere Parameter hast, dann kannst du auch mehrere Parameter auswerten.

    Würde dann den Link in etwa so erzeugen:

    Code
    contact.html?product=Product%201&description=Bezeichnung%201

    Das "&" verbindet die Parameter.

    Und dann einfach zwei Parameter prüfen:

    Code
    var paraProduct = getQueryVariable("product");
    var paraDescription = getQueryVariable("description");

    Anschließend kannst du mit dem Produkt und Bezeichnung weiterarbeiten und evtl. in verschiedene Formularfelder schreiben.

  • Ich hätte dazu nochmal eine Frage. Ich füge das ganze ja einem Programm hinzu, womit man das meiste auch ohne Programmierung erreicht. Aktuell ist es jetzt so, dass ich in dem Programm unter "Objekt Kontaktformular" einen festen Betreff eingebe, der mir dann als Betreff der Mail angezeigt wird, die ich dann bekomme (siehe Anhang). Der eingetragenen Betreff im Kontaktformular-Textfeld wird mir einfach nur in der Mail neben Name, Email usw. angezeigt. Das Programm mit dem ich arbeite legt die folgende Datei an: ...imemail/imEmailForm.php und darin steht folgendes:

    In rot steht der Betreff, der immer gleich bleibt und mit dem Betreff aus dem Kontaktformular-Feld mit dem Namen

    imObjectForm_3_7 überschrieben werden soll, falls sowas allgemein überhaupt geht. Das wäre super wenn es hierfür eine Lösung gäbe.

    Edit: In Zeile 17 steht der Betreff der ersetzt werden soll

  • Also so ganz habe ich deine Frage nicht gerafft, aber ich empfehle nicht den Wert dynamisch zu übernehmen...

    Sonst können die mailheader manipuliert werden und du baust dir ne Spamschleuder

  • Im Anhang nochmal ein Bild was das ganze vllt noch etwas veranschaulicht. Mit dem Programm mit dem ich arbeite ist es hier jetzt so, dass ich immer eine Mail mit dem gleichen Betreff bekomme würde, egal was irgendwo ins Kontaktformular eingetragen wurde. Da es mir nichts bringt hundert Mails mit dem Betreff "Anfrage" z.B. zu bekommen, würde ich gern den Betreff in meinen Mails bekommen, den der Besucher in ein Textfeld eingetragen hat. Ich kann in meinem Programm u.a. php, javascript, html code hinzufügen. Vllt gibt es damit ja eine Möglichkeit das Problem zu lösen. Alles weitere steht in der letzten Nachricht von mir.

  • Ja dann ist der gesamte Ansatz aus meiner Sicht falsch... Ich hätte alles über php gelöst und dann nur IDs übergeben und den Rest über eine Konfiguration gelöst. So kannst du dann auch deinen Betreff anpassen, ohne Gefahr zu laufen, dass das Ding missbraucht wird.

    Du musst dann halt deine kompletten Möglichkeiten ins PHP bringen. Dazu muss man halt alle Optionen kennen. Also Produkte und Bezeichnung, etc...

  • Hi,

    Im PHP-Script wird der Subject bereits mit

    PHP
    $_POST['imObjectForm_3_7']

    übergeben. D.h. wenn das Formular als Method Post hat, ein Input(Type=text) mit dem Namen "imObjectForm_3_7" existiert, dann sollte das schon funktionieren.

    Hat das Eingabefeld wirklich diesen Namen? Mit Namen meine ich nicht die ID.

    Gibt es evtl.e in Input(type=hidden) Feld, welches deinen gespeicherten Betreff übergibt.

    In deinem PHP-Code sehe ich keinen fest eingetragenen Betreff.

  • Ja, sowohl id als auch name="imObjectForm_3_7". Das Programm legt ja wie gesagt die folgende php-datei an:

    ...imemail/imEmailForm.php

    Etwas weiter unten steht ja:

    Code
    $form->mailToOwner('Empfängeremail@adsffs.de', 'Empfängeremail@adsffs.de', 'Dieser Betreff soll ersetzt werden', '', false);

    'Dieser Betreff soll ersetzt werden' ist dieser Betreff den man in den allgemeinen Einstellungen des Formulars eingibt und der dann für immer gleich bleibt. Mein Plan war jetzt einfach stattdessen imObjectForm_3_7 einzugeben aber selbst wenn ich an dieser Datei (imEmailForm.php)scheinbar gar nichts ändere und sie nochmal extra hochlade kommt nach dem Absenden des Formulars immer der folgende Fehler und auch keine Mail an:

    "You must activate JavaScript!

    You'll be redirected to the previous page in 5 seconds..."

    JavaScript ist natürlich aktiviert, ansonsten mit dem immer gleichen Standard-Betreff funktioniert es ja auch . Gibt es eine Möglichkeit das irgendwie zu umgehen und, dass es so in ähnlicher Form irgendwie zu lösen ist ?