Impressum | Kontakt | Jobs
Aufdringliche Selbstdarstellung seit 1996
Homepage
von
Alexander
Auer

Keine Hexerei

Jeder Betreiber einer Internetseite wünscht sich Rückmeldung von seinen Besuchern. Wir stellen ihnen zwei Praxisbeispiele eines Feedbackformulares vor, das Sie direkt in ihre Webseite einbauen können.

Vor allem im Bereich des E-Commerce, ist es nötig, den Besuchern eine Feedback- bzw. Bestellmöglichkeit anzubieten. Die einfachste Variante ist es, mittels <a href="mailto:ihre@adresse.com">Mail</a> ein Mailfenster zu öffnen.
Weitaus professioneller wirkt allerdings ein Formular, das die eingetragen Daten sendet.

HTML-Formulare
Der erste Schritt ist die Erstellung einer HTML-Seite, die den Eintrag der Daten ermöglicht. Dazu benutzt man die Formular Befehle in HTML. Jedes HTML-Formular beginnt mit einem <form>-Befehl. Das Action-Attribut weist den Pfad zu der Datei, die nach Betätigung des Submit-Buttons ausgeführt werden soll. Achtung: Wenn Sie sich für das PHP-Script entscheiden, müssen Sie hier den Namen des Scripts ändern!
Method="post" sagt dem Browser, daß die Formulardaten an diese Datei übertragen werden sollen.
Anschließend beginnt die Definition der einzelnen Eingabefelder.
<input type="text"> erzeugt ein einzeiliges Feld, dessen Wert man mittels 'Value' vordefinieren kann. Wichtig ist es, dem Feld einen Namen (durch z.B. name="email") zu geben, da die Eingabe als Variable mit dem Namen des Feldes an das nachfolgende Script übergeben wird.
Will man, daß der User aus mehreren Alternativen wählt, kommen sogenannte Radio-Buttons zum Einsatz. Diese haben alle den gleichen Namen, nur die Werte (values) müssen sich ändern.
Mittels <textarea> kann man mehrzeilige Eingabefelder erzeugen. Die Größe wird über cols (Colums, Breite) und rows (Höhe) bestimmt. Nicht vergessen, dieses Feld mit </textarea> auch wieder zu schließen! Das Ende der Formulardefinition erfolgt über </form>.

Das Script
Füllt ein Besucher obiges Formular aus und betätigt den 'Abschicken'-Button, soll ein Script ausgeführt werden. Dieses muß die Userdaten übernehmen und an als Mail an eine voreingestellte E-Mail-Adresse weiterschicken.
Diese Funktionalität kann man auf mehrere Arten erreichen, je nachdem welche Programmiersprache man bevorzugt.
Wir möchten Ihnen zwei Möglichkeiten vorstellen. Zuerst ein CGI-Script in Perl, dann in das gleiche Script in der serverseitigen Programmiersprache PHP.
Für welche der Alternativen Sie sich entscheiden hängt vor allem damit zusammen, welche Möglichkeiten Sie auf ihrem Server haben. Denn nicht jeder Server bietet die Möglichkeit, PHP-Scripts auszuführen. CGI-Scripts hingegen sind so gut wie überall ausführbar.
Sollten Sie sich nicht sicher sein, welche Sprachen ihr Server unterstützt, kontaktieren Sie ihren Systemadministrator.

Erklärung des CGI-Scripts
Bevor Sie dieses Script benutzen können, müssen die Zugriffsrechte richtig gesetzt werden. Im Normalfall geschieht dies auf der Unix-Ebene durch den Befehl 'chmod 755 bestell.cgi'. Sollte dies nicht funktionieren, sprechen Sie mit ihrem Systemadministrator über die jewiligen Voraussetzungen auf ihrem System, um CGI-Scripts ausführbar zu machen.
Nun zur Erläuterung des Scripts:
Zeile 1: Hier definiert man den Pfad des Perl-Interpretors. Der hier vorgestellte Pfad ist Standard, in Einzelfällen kann der Perl-Interpretor aber auch in anderen Verzeichnissen liegen.
Zeile 2: Die Variable Sendmail bekommt den Pfad zur Sendmail-Funktion zugewisesen
Zeile 3: Definieren Sie unter Subject die gewünschte Titelzeile, die in den Mails angezeigt werden soll.
Zeile 4: Die Empfängeradresse ist die E-Mail Adresse, an die das Mail geschickt werden soll. Wird das Script als Feedback-Formular verwendet, ist diese Adresse eine Konstante.
Zeile 7 - 17: Das Script liest die Daten ein, und weist die entsprechenden Variablen dem übergebenen Wert zu. Weiters werden die Werte in lesbare Form modifiziert, da z.B. Sonderzeichen bei der Übergabe codiert werden müssen.
Zeile 18,19: Damit der Benutzer weiß, daß seine Daten gesendet wurden, kann man eine kleine HTML-Seite aufbauen. Hier können alle HTML-Befehle verwendet werden. Innerhalb des Print-Befehls sollte man allerdings auf Anführungszeichen (") verzichten. Wenn es unumgänglich ist, verwenden Sie einfache (') Anführungszeichen, da es sonst zu Komplikationen im Script kommen kann.
Zeile 21-26: Das Mailprogramm wird gestartet und die jeweiligen Felder mit den Formulardaten gefüllt. Einzig die Empfängeradresse und das Subject sind konstant definiert. Wenn nötig können auch diese aus den Formulardaten generiert werden. Dazu muß lediglich der Name des HTML-Formularfeldes als Variablenname verwendet werden.
Bsp.:
Formular: <input type="text" name="mailsubject">
CGI: print MAIL "Subject: $mailsubject \r\n\n";


Überblick PHP
PHP ist eine Scriptsprache, die serverseitig ausgeführt wird. D.h., um sie nutzen zu können, muß das PHP-Modul auf ihrem Server installiert sein.
Ursprünglich wurde die Sprache als eine Art CGI-Makro für Privatanwender entwickelt, um wichtige Funktionen wie Datumsmanipulation, Formular- und Variablenverarbeitung oder Datenbankoperationen weniger schwerfällig zu machen.
Seine Stärke gewinnt PHP, ähnlich wie Linux, aus dem 'Open Source' Gedanken. Dadurch, daß der Code frei zugänglich ist, arbeiten tausende Programmierer an der ständigen Weiterentwicklung. Momentan ist die Version 3 aktuell, Version 4 ist schon als Beta-Version verfügbar

Erklärung des PHP-Scripts
Wie man sieht wird zuerst eine normale HTML-Seite aufgebaut. Die PHP-Befehle werden direkt in den HTML-Code eingebettet.
In Zeile 4 beginnt der PHP-Code, eingeleitet mit einem <?. In der nächsten Zeile stoßen wir auf das Kernstück, die Mailfunktion. Sie besteht aus vier Teilen, die durch Beistriche voneinander getrennt sind:
- E-mail Adresse des Empfängers (hier fix eingestellt)
- Subject des Mails (ebenfalls fix)
- Der eigentliche Text des Mails, in dem alle vom Formular übergebenen Variablen eingesetzt werden.
- Das From-Feld, das die E-Mail Adresse des Absenders enthält Anschließend wird mit dem echo-Befehl noch eine Meldung am Bildschirm ausgegeben, so daß der User weiß, daß seine Daten verarbeitet worden sind.
Der Befehl ?> schließt den PHP-Code.
Wie man sieht, ist der Aufwand um einiges geringer. Dies liegt vor allem daran, daß man in dem Perl/CGI-Script erst mühsam die Variablen einlesen, splitten und zuweisen muß.
Das PHP Script erkennt die Eingaben des Formulares und kann sie ohne Probleme als Variablen übernehmen.


Ressourcen
HTML Formulare
· http://www.idocs.com/tags/forms/index_famsupp_1.html
Mikodocs Guide to HTML
· http://www.webcom.com/~webcom/html/tutor/forms/example_list.shtml
Webcom Forms Guide


PHP
· http://www.devshed.com/Server_Side/PHP/
Einführungen, Praxisbeispiele, Dokumentation
· http://www.php.net/
Download und Links zu vielen Ressourcen
· http://www.phpbuilder.com/
Viele fix und fertige Scripts
· http://php.net/manual/html/
Die komplette PHP-Dokumentation


CGI
· http://www.teamone.de/selfhtml/tg.htm
SelfCGI, ein Tutorium von Stefan Münz
· http://www.cgi-resources.com/Programs_and_Scripts/Perl/
Sammlung fertiger Scripts
· http://www.worldwidemart.com/scripts/
Matt's Script Archive

Die nötigen Dateien
Das HTML-Formular
<html>
<head><title>Titel</title></head>
<body>
<!-- Beginn des Formulares-->
<form action="bestell.cgi" method="post">
<input type="text" value="Ihr Vorname" name="vorname" size="20"><br>
<input type="text" value="Ihr Nachname" name="nachname" size="20"><br>
<input type="text" value="Ihre E-Mail Adresse" name="email" size="20"><br>
Abstimmung:
<input type="radio" name="abstimmung" value="ja">
<input type="radio" name="abstimmung" value="nein">
<input type="radio" name="abstimmung" value="weissnicht"><br>
<textarea cols="20" rows="5" name="kommentar">Ihr Kommentar</textarea><br>
<input type="submit" value="Abschicken">
</form>
<!-- Ende des Formulares-->
</body>
</html>

Das CGI-Script
#!/usr/bin/perl
$SENDMAIL = '/usr/lib/sendmail';
$SUBJECT='Bestellformular';
$empfaengeradresse='ihre@email.com';

read(STDIN, $daten, $ENV{'CONTENT_LENGTH'});
print "Content-type: text/html\n\n";
@forms = split(/&/, $daten);
foreach $feld (@forms)
{
($name, $value) = split(/=/, $feld);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$$name="$value";
}
print "<h1>Danke für ihre Bestellung!</h1>";
print "</body></html>\n";

open(MAIL,"|$SENDMAIL -t");
print MAIL "To: $empfaengeradresse\r\n";
print MAIL "From: $email\r\n";
print MAIL "Subject: $SUBJECT\r\n\n";
print MAIL "$vorname $nachname hat folgendes zu sagen:\n$kommentar\nErgebnis der Abstimmung: $abstimmung";
close(MAIL);

Das PHP-Script
<html>
<head><title>PHP Formular</title></head>
<body>
<?
mail("ihre@email.com","Bestellformular","$vorname $nachname hat folgendes zu sagen: $kommentar\nErgebnis der Abstimmung: $abstimmung\n", "From: $email");
echo("<b>Danke, ihre Anfrage wurde weitergeleitet</b>");
?>
</html>



Zurück zur Übersicht