Bernhard Peissl: Formmail: Mail an user senden, nicht an mich!?

Beitrag lesen

Hallo Alex!

Nochmal sorry, ich wollte hier bestimmt niemanden ausnutzen und erst recht niemanden verärgern!

Es wird hier einfach eine gewisse Nettiquette erwartet, die manche Benutzern nicht respektieren, und vielen vielleicht nicht bekannt ist. Dass man zuerst mal zumindest die Forums-Hauptdatei durchliest, ob a) ev. das Problem schon wo behandelt ist, und b) man einen ungefähren Eindruck bekommt wies hier so zugeht. Und erster Anlaufpunkt überhaupt sind die FAQ!

Ich war wie gesagt  froh so ein Forum gefunden zu haben und hab die Sachen halt gepostet.

Recht so, wenn man höflich bleibt, oder seine im Übermut gemachten Fehler einsieht, wird man hier immer weitergehlofen ;-) Allerdings sollte die Zeit schon in genügendem Ausmass vorhanden sein, um nicht gleich vier Postings hintereinander loszulassen, sondern die Überlegung anstellt, seine Probleme möglichst kompakt in möglichst einem Posting darzustellen, was in deinem Fall ohne weiteres möglich gewesen wäre ;-)

Es gab in der Vergangenheit Leute, die sind hier hereingestürmt, haben uns innerhalb von wenigen Tagen mit dutzenden Postings beglückt, so, dass es den Eindruck erweckte dieses Forum sei praktisch ihr Wohnzimmer, und wir die Hausmädchen. Das war schon der Grund für ziemlich viel Zank und Ärger der leicht vermieden hätte werden können, wenn die Leute etwas mehr Respekt und "Selfverständnis" an den Tag legten :-(

OK, kann sein, wenn ich mir das genauer angucke, dass ich damit schon evtl ein mit dem Script ein neies Formular mit gespeicherten tags ausgeben kann, o bwohl ich nicht weiß, ob man die html Sachen in das Script schreiben muß, oder ob man auch Tags in ein externes html Formular schreiben kann.

Was meinst du mit "Tags"? Tags werden nicht gespeichert, es werden wenn schon Tags, dann Daten in Formularfelder abgelegt, die man mittels Tags in eine Seite einbinden kann! Ungenaue Beschreibungen lassen Probleme oft komplexer erscheinen als sie sind.

ja, du gibst jede Zeile deines HTML-Dokuments, das angezeigt werden soll, einzeln aus, und zwar mit print "<html>....."; Dabei hast du den Vorteil Variablen gleich mit ausgeben zu können, das ist ja schleisslich der Sinn hnter dem ganzen ;-)

Mein Problem ist immer noch, wie ich Daten aus einer Tabelle, sei es über einen Link oder wie auch immer, in ein Formular bekomme. D.h. ich will, dass die hidden tags in dem Formular nicht feststehen, sondern dass da, je nachdem von welchem Link aus das Formular geöffnet wurde, mit diesen Werten belegt sind.

Ich weiss ja nicht wie deine "Tabelle" aussieht, vielleicht kannst du ja einen Link setzen, wo man sich dein Problem online ansehen kann. Grundsätzlich gibts zwei möglichkeiten, dynamisch Inhalt zu erzeugen:

  1. Am Server: mit Perl, PHP, ASP, .... Da wird einfach die ganze html-Seite vom Script ausgegeben. In deinem Fall wahrscheinlich die Seite mit den hidden-fields. Aufrufen kannst du das Script von der statischen HTML-Seite, in deinem Falle vermutlich die Tabelle! Du kannst das script aber nicht nur einfach aufrufen (/cgi-bin/script.pl) sondern ihm auch Parameter übergeben (/cgi-bin/script.pl?param1=wert1&param2=wert2&param3=wert3),  die dann in dem Script - für was auch immer - als variablen benötigt werden. In deinem Fall vielleicht als name und wert des hidden-fields ?!?

Na, wird die Brühe schon klarer?

Danach kannst du die ganze html-seite vom Script ausgeben lassen. Was dann wiederum fix und fertig mit allen hidden-fields an den anfordernden Client geschickt wird.

Dieses Script könntest du dann z.b. BuildForm.pl nennen, oder du kannst dasselbe Prinzip auch dazu verwenden, deine Produktliste auszugeben, ShowProducts.pl.

Alternativ dazu kannst du deine Datensätze, ich nehme mal an es ist ein Shop, am Server in einer Text-datei ablegen. In jede Zeile kommen die Daten _eines_ Produktes. z.B:

ARTNR | PRODUKTNAME | PREIS
1     | HalloBallo  | 123,--
2     | HulaHula    | 456,--
... usw

du lest zeile für Zeile ein, und kannst die einzelnen Datenfelder durch aufspalten der Zeilen (an den Positionen wo ein '|' steht) prima in Variablen packen!

Das ist der bequemste, wenn auch nicht mehr ganz so einfache Weg. (3-4 Zeilen Code erledigen das)

  1. Am Client: mit Javascript, VB-script, .... Man kann mit Javascript die Werte von Formularfeldern auslesen (document.forms['formularname'].elements['formularfeldname'].value) und neu beschreiben. Weiters kann man damit neue Fenster öffnen (window.open()), neue Seiten öffnen (document.open()) und diese auch dynamisch mit Inhalt versorgen (document.write()). Damit sollte klar sein was zu tun ist: Bei Klick auf einen Link/Button wird eine JS-Funktion aufgerufen, die die benötigten Formulardaten aus der Seite herausholt, und eine neue html-Seite mit diesen (dynamischen) Daten konstruiert.

Jetzt brauchst du jetzt noch? das Bestellformular-script (z.b. SendForm.pl)! Das Formular selbst hast du ja schon mit 1) oder 2) erstellt. Jetzt musst du nur noch die Daten die übers Formular reinkommen verarbeiten. Wie das geht hab ich dir unten schon erklärt: mit param() abfragen, und mit
open MAIL ...
print MAIL ...
close MAIL ...
eine Bestätigung verschicken!

Zu Übungszwecken solltest du das Formular mit der GET-Methode übergeben, da siehst du genau wie die Formulardaten an das Script geliefert werden (schau in die Adressleiste des Browsers)!

Vielleicht bin ich auch einfach zu doof das zu finden, deswegen bitte ich nur, dass mir evtl jemand kuz sagt, WO ich dazu was finde, ich will bestimmt keinen fertigen Code, den ich einfach nur noch einsetzen muß!

Lobenswert, ich sehe unsere Predigt hat geholfen :o) Sowohl für PHP als auch für Perl gibts umwerfend riesige Manuals. Allerdings würde ich dir raten, dir ein paar tutorials anzuschauen, die sind für den Anfang oft leichter zu verstehen, als die Dokumentation. Ein PERL-Buch das ich empfehlen kann ist "Learning Perl" von O'Reilly, gibts auch auf deutsch, und sicher auch irgendwo als pdf Version im Netz ,-)

Schau dir dazu mal das SelfHTML-Linkverzeichnis an:
http://www.teamone.de/selfaktuell/links/index.shtml

Also, Zusammenfassend:

  1. --- Produkte ausgeben ----
  2. die Produktliste (txt-Datei) auslesen und in Variablen speichern
  3. die Variablen in die auszugebende html-seite als Werte von hidden-fields einbauen
  4. Die hidden-fields (artnr, name, preis) werden durch absenden des Forumulars (inkl. Menge) an das Formularausgabescript geschickt
  5. --- Bestellformular ausgeben ---
  6. parameter abfragen, und wieder in hidden fields auf der Formularseite ausgeben, damit das nächste script immer noch weiss was eigentlich bestellt wurde (artnr, menge). So werden die Bestelldaten von Seite zu Seite weitergereicht!
  7. Abschicken der Bestellformulars ruft das SendForm.pl-Script auf, welches wiederum die Parameter (artnr, menge) ausliest, und dann die mail(s) an den Kunden und/oder dich verschickt!

That's it! ;-) Du musst dir nur für jede Aktion (produkte ausgeben, bestellformular anzeigen, bestellformular abschicken) ein eigenes script schreiben. Du solltest dir vorher irgendwie aufzeichnen oder im Kopf überlegen, welche Seite von welcher welche Daten braucht. Falls eine Seite dabei ist, die keine Daten benötigt, so ist sie statisch, und kann durch reines html wiedergegeben werden. Sollen ihr allerdings Parameter übergeben werden, in welcher weise auch immer, beispielsweise "indirekt" durch Absenden eines Forumlars, oder "direkt" durch angabe in einem Link <a href="/cgi-bin/ShowShop.pl?shopID=shop1">Artikelgruppe 1</a>, dann spricht man vom dynamischen Erzeugen einer Seite, welches durch scripts ausgeführt wird.

so, hoffe dieser Marathon, äähhmmm Kurzzusammenfassung des PERL-Kapitels von Selfhtml, hat dir jetzt weiterhelfen können, bzw. dir einen weg/Konzept gezeigt, wie man es anstellen könnte. Freilich gibts 1000 verschieden Arten wie man an so ein Problem herangehen könnte. Die Abläufe bleiben aber überall dieselben: Parameter (Variablen) einlesen, Verarbeitungsschritte (z.b. Datenbank aktualisieren, mails verschicken, ...) und dann Resultatseite ausgeben!

lg bernhard

PS: Als zusätzliche Lektüre empfiehlt sich nun ein Feature Artikel aus SelfAktuell: http://www.teamone.de/selfaktuell/artikel/formmail.htm