Formularversand

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datenbank Eintrag:
    • Produkt: Formularversand
    • Version: Unbekannt
    • Entwickler: S. Gerster
    • Entwicklungsjahr: 2008
    • Demo: Keine Demo vorhanden


    Beschreibung:

    Mit folgenden Schnippseln kann an den Admin aus dem Chat eine Nachricht per Formularversand geschickt werden. Alle benötigten Eingaben werden aus der Users.html übernommen, so dass der Absender lediglich den Text eingeben und auf Senden klicken muss.
    Datum/Uhrzeit wird im zweiten Code ausgelesen, da dies über die Users keinen Sinn macht, weil diese erst nach einem Refresh aktualisiert würde.

    Die Screenshots gab es hier: forum.gt-chat.de/thread.php?threadid=712

    Schritt 1:
    Fügt am Besten ans Ende Eurer users.html die Zeilen ein. Anzupassen sind hier noch die URL zum php-script (form action = ...) und eine URL bzw. GETIMAGE (input type = image src=....) zu einer gültigen Grafik für den Submit.

    Beginn Script 1 einfügen in users.html ----------------------------------


    <br>
    <center>
    {NEED|$user_information}
    {FOREACH|$user|$room.onlineusers}
    {IF|$user.name eq $current_user.name}
    <form action="http://www.DEINE-DOMAIN.de/nachricht.php" method="post" style="display:inline;" target="nachricht" onsubmit="window.open('','nachricht','top=250,left=360,height=320,width=300,scrollbars=0,')">
    <input type="hidden" name="nick" value="{GET|$user.nick}">
    <input type="hidden" name="mail" value="{GET|$user_information.email}">
    <input type="hidden" name="ip" value="{GET|$user_information.ip}">

    <input type = "image" src="http://DEINE-DOMAIN.de/XYZ/EINE-GÜLTIGE-GRAFIK.gif" alt="Nachricht an Admin">

    {ENDIF}
    {ENDFOR}
    </form>

    Ende Script 1 -------------------------------------------------


    Schritt 2:

    Die nachricht.php.
    Kopiert diese ins www-Verzeichnis und achtet darauf, dass die Urlangabe aus obigen Schritt stimmt. Im Script müsst Ihr in dieser Zeile die gültige Mailadresse eintragen (<INPUT TYPE="hidden" NAME="recipient" VALUE="Adminmailadresse@DEINE-DOMAIN.de">)

    Weiterhin muss die URL zum Perl-Script angepasst werden (<FORM style="display:inline;" ACTION="http://www.DEINE-DOMAIN.de/cgi-bin/nachricht.pl" METHOD="POST">).

    Beginn Script 2 hochladen in www-dir -------------------------------------


    <?php
    $timestamp = time();
    $uhrzeit = date("H:i", $timestamp);
    $heute = date("d.m.Y", $timestamp);
    $nick=$_POST['nick'];
    $zeit=$_POST['zeit'];
    $mail=$_POST['mail'];
    $ip=$_POST['ip'];

    ?>

    <HTML>
    <HEAD>

    <TITLE>Nachricht an Admin</TITLE>

    </HEAD>
    <BODY LINK="#ffffff" ALINK="#ffffff" VLINK="#ffffff" BGCOLOR="#ffffff">


    <center><FONT COLOR="#808080" SIZE="-1" FACE="Arial"><b>Nachricht</b></font><br>
    <FORM style="display:inline;" ACTION="http://www.DEINE-DOMAIN.de/cgi-bin/nachricht.pl" METHOD="POST">


    <FONT COLOR="#000080" SIZE="-1" FACE="Arial"><INPUT TYPE="hidden"
    NAME="recipient" VALUE="Adminmailadresse@DEINE-DOMAIN.de">

    <INPUT TYPE="hidden" NAME="Nachricht aus" VALUE="Chat"></FONT>

    <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">

    <TR>
    <TD HEIGHT="33" WIDTH="140">
    <FONT COLOR="#000000" SIZE="-1" FACE="Arial">Nickname:</FONT></TD>
    <TD WIDTH="64%" HEIGHT="33"><FONT SIZE="-1" FACE="Arial"><?php echo $nick; ?>
    <INPUT TYPE="hidden" NAME="realname" VALUE="<?php echo $nick; ?>"></FONT>
    </TD>
    </TR>
    <TR>
    <TD HEIGHT="33" WIDTH="140">
    <FONT COLOR="#000000" SIZE="-1" FACE="Arial">e-Mail:</FONT></TD>
    <TD WIDTH="64%" HEIGHT="33"><FONT SIZE="-1" FACE="Arial"><?php echo $mail; ?>
    <INPUT TYPE="hidden" NAME="email" VALUE="<?php echo $mail; ?>"></FONT>
    </TD>
    </TR>

    <TR>
    <TD HEIGHT="33" WIDTH="140">
    <FONT COLOR="#000000" SIZE="-1" FACE="Arial">Datum:</FONT></TD>
    <TD WIDTH="64%" HEIGHT="33"><FONT SIZE="-1" FACE="Arial"><?php echo $heute; ?>, <?php echo $uhrzeit; ?> Uhr

    </TD>
    </TR>

    <TR>
    <TD HEIGHT="80" WIDTH="140">
    <FONT COLOR="#000000" SIZE="-1" FACE="Arial">Nachricht:</FONT></TD>
    <TD WIDTH="64%" HEIGHT="80">
    <TEXTAREA NAME="Nachricht" ROWS="3" COLS="20" wrap="soft"></TEXTAREA>
    </TD>
    </TR>

    <TR>
    <TD HEIGHT="33" WIDTH="140">
    <FONT COLOR="#000000" SIZE="-1" FACE="Arial">Verwendete IP:</FONT></TD>
    <TD WIDTH="64%" HEIGHT="33"><FONT SIZE="-1" FACE="Arial"><?php echo $ip; ?>
    <INPUT TYPE="hidden" NAME="ip" VALUE="<?php echo $ip; ?>"></FONT>
    </TD>
    </TR>
    <TR>
    <TD HEIGHT="33" WIDTH="140">
    <FONT COLOR="#0000ff" SIZE="-1" FACE="Arial"><INPUT TYPE="submit"
    VALUE="Senden"></FONT>
    </TD>
    <TD WIDTH="64%" HEIGHT="33">
    &nbsp;</TD>
    </TR>
    </TABLE>
    </FORM>

    </BODY>
    </HTML>



    Ende Script 2 -----------------------------------------------


    Scritt 3:

    Das Hauptprogramm nachricht.pl. Dieses muss ins CGI-VErzeichnis. Bitte im ASCII hochladen und chmod 755. Achtet darauf, dass Ihr im 2ten Script die URL zu diesem Script richtig eingetragen habt. Dieses Script lässt sich noch vielseitig anpassen (%config).
    Wichtig sind hier die ersten drei Zeilen: Pfade zu perl und sendmail, bei referers tragt ihr bitte Euren Domainnamen ohne http und www ein. Somit wird verhindert, dass das Programm von einer externen URL aufgerufen werden kann.



    Beginn Script 3 hochladen ins cgi-bin -------------------------------------



    #!/usr/bin/perl

    $mailprog = '/usr/sbin/sendmail';

    @referers = ('DEINE-DOMAIN.de');


    &check_url;

    &get_date;

    &parse_form;

    &check_required;

    &return_html;

    &send_mail;

    sub check_url {

    local($check_referer) = 0;

    if ($ENV{'HTTP_REFERER'}) {
    foreach $referer (@referers) {
    if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) {
    $check_referer = 1;
    last;
    }
    }
    }
    else {
    $check_referer = 1;
    }

    if ($check_referer != 1) { &error('bad_referer') }
    }

    sub get_date {




    @days = ('Sonntag','Montag','Dienstag','Mittwoch',
    'Donnerstag','Freitag','Samstag');
    @months = ('Januar','Februar','März','April','Mai','Juni','Juli',
    'August','September','Oktober','November','Dezember');


    ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6];
    $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
    $year += 1900;


    $date = "$days[$wday], $mday. $months[$mon] $year um $time";

    }

    sub parse_form {


    %Config = ('recipient','', 'subject','',
    'email','', 'realname','',
    'redirect','', 'bgcolor','',
    'ip','', 'link_color','',
    'vlink_color','', 'text_color','',
    'alink_color','', 'title','',
    'sort','', 'print_config','',
    'required','', 'env_report','',
    'return_link_title','', 'return_link_url','',
    'print_blank_fields','', 'missing_fields_redirect','');


    if ($ENV{'REQUEST_METHOD'} eq 'GET') {

    @pairs = split(/&/, $ENV{'QUERY_STRING'});
    }
    elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {

    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

    @pairs = split(/&/, $buffer);
    }
    else {
    &error('request_method');
    }


    foreach $pair (@pairs) {

    local($name, $value) = split(/=/, $pair);

    $name =~ tr/+/ /;
    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    $value =~ s/<!--(.|\n)*-->//g;


    if (defined($Config{$name})) {
    $Config{$name} = $value;
    }
    else {
    if ($Form{$name} && $value) {
    $Form{$name} = "$Form{$name}, $value";
    }
    elsif ($value) {
    push(@Field_Order,$name);
    $Form{$name} = $value;
    }
    }
    }


    $Config{'required'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'required'} =~ s/(\s+)?\n+(\s+)?//g;
    $Config{'env_report'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'env_report'} =~ s/(\s+)?\n+(\s+)?//g;
    $Config{'print_config'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'print_config'} =~ s/(\s+)?\n+(\s+)?//g;

    @Required = split(/,/,$Config{'required'});
    @Env_Report = split(/,/,$Config{'env_report'});
    @Print_Config = split(/,/,$Config{'print_config'});
    }

    sub check_required {


    local($require, @error);

    if (!$Config{'recipient'}) {
    if (!defined(%Form)) { &error('bad_referer') }
    else { &error('no_recipient') }
    }


    foreach $require (@Required) {


    if ($require eq 'email' && !&check_email($Config{$require})) {
    push(@error,$require);
    }


    elsif (defined($Config{$require})) {
    if (!$Config{$require}) {
    push(@error,$require);
    }
    }


    elsif (!$Form{$require}) {
    push(@error,$require);
    }
    }


    if (@error) { &error('missing_fields', @error) }
    }

    sub return_html {

    local($key,$sort_order,$sorted_field);


    if ($Config{'redirect'}) {
    print "Location: $Config{'redirect'}\n\n";
    }


    else {


    print "Content-type: text/html\n\n";
    print "<html>\n <head>\n";


    if ($Config{'title'}) { print " <title>$Config{'title'}</title>\n" }
    else { print " <title>Danke</title>\n" }

    print " </head>\n <body bgcolor=#ffffff";


    &body_attributes;


    print ">\n <center>\n";



    if ($Config{'title'}) { print " <h1>$Config{'title'}</h1>\n" }
    else { print " <h2><font face=arial>Vielen Dank für Ihre Nachricht</h2>\n" }

    print "<center>\n";

    print "<font face=arial size=-1>Folgende Daten wurden erfolgreich übermittelt";
    print "<p><hr size=1 width=55%><p>\n";
    print "<center><p>\n";


    if ($Config{'sort'} eq 'alphabetic') {
    foreach $field (sort keys %Form) {


    if ($Config{'print_blank_fields'} || $Form{$field}) {
    print "<b>$field:</b> $Form{$field}<p>\n";
    }
    }
    }


    elsif ($Config{'sort'} =~ /^order:.*,.*/) {


    $sort_order = $Config{'sort'};
    $sort_order =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $sort_order =~ s/(\s+)?\n+(\s+)?//g;
    $sort_order =~ s/order://;
    @sorted_fields = split(/,/, $sort_order);


    foreach $sorted_field (@sorted_fields) {
    if ($Config{'print_blank_fields'} || $Form{$sorted_field}) {
    print "<b>$sorted_field:</b> $Form{$sorted_field}<p>\n";
    }
    }
    }


    else {


    foreach $field (@Field_Order) {
    if ($Config{'print_blank_fields'} || $Form{$field}) {
    print "<b>$field:</b> $Form{$field}<p>\n";
    }
    }
    }

    print "<p><hr size=1 width=75%><p>\n";


    if ($Config{'return_link_url'} && $Config{'return_link_title'}) {
    print "<ul>\n";
    print "<li><a href=\"$Config{'return_link_url'}\">$Config{'return_link_title'}</a>\n";
    print "</ul>\n";
    }


    print <<"(END HTML FOOTER)";

    <p><center></center></p>

    </body>
    </html>
    (END HTML FOOTER)
    }
    }

    sub send_mail {

    local($print_config,$key,$sort_order,$sorted_field,$env_report);


    open(MAIL,"|$mailprog -t");

    print MAIL "To: $Config{'recipient'}\n";
    print MAIL "From: $Config{'email'} ($Config{'realname'})\n";


    if ($Config{'subject'}) { print MAIL "Subject: $Config{'subject'}\n\n" }
    else { print MAIL "Subject: Chatmail\n\n" }

    print MAIL "Unten sehen Sie die Formular-Auswertung, gesendet von\n";
    print MAIL "$Config{'realname'} ($Config{'email'}), IP: $Config{'ip'} am $date\n";
    print MAIL "-" x 75 . "\n\n";

    if (@Print_Config) {
    foreach $print_config (@Print_Config) {
    if ($Config{$print_config}) {
    print MAIL "$print_config: $Config{$print_config}\n\n";
    }
    }
    }


    if ($Config{'sort'} eq 'alphabetic') {
    foreach $field (sort keys %Form) {


    if ($Config{'print_blank_fields'} || $Form{$field} ||
    $Form{$field} eq '0') {
    print MAIL "$field: $Form{$field}\n\n";
    }
    }
    }


    elsif ($Config{'sort'} =~ /^order:.*,.*/) {


    $Config{'sort'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'sort'} =~ s/(\s+)?\n+(\s+)?//g;
    $Config{'sort'} =~ s/order://;
    @sorted_fields = split(/,/, $Config{'sort'});


    foreach $sorted_field (@sorted_fields) {
    if ($Config{'print_blank_fields'} || $Form{$sorted_field} ||
    $Form{$sorted_field} eq '0') {
    print MAIL "$sorted_field: $Form{$sorted_field}\n\n";
    }
    }
    }


    else {


    foreach $field (@Field_Order) {
    if ($Config{'print_blank_fields'} || $Form{$field} ||
    $Form{$field} eq '0') {
    print MAIL "$field: $Form{$field}\n\n";
    }
    }
    }

    print MAIL "-" x 75 . "\n\n";


    foreach $env_report (@Env_Report) {
    if ($ENV{$env_report}) {
    print MAIL "$env_report: $ENV{$env_report}\n";
    }
    }

    close (MAIL);
    }

    sub check_email {

    $email = $_[0];


    if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||



    $email !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) {


    return 0;
    }

    else {


    return 1;
    }
    }

    sub body_attributes {

    if ($Config{'bgcolor'}) { print " bgcolor=\"$Config{'bgcolor'}\"" }


    if ($Config{'background'}) { print " background=\"$Config{'background'}\"" }


    if ($Config{'link_color'}) { print " link=\"$Config{'link_color'}\"" }


    if ($Config{'vlink_color'}) { print " vlink=\"$Config{'vlink_color'}\"" }


    if ($Config{'alink_color'}) { print " alink=\"$Config{'alink_color'}\"" }


    if ($Config{'text_color'}) { print " text=\"$Config{'text_color'}\"" }
    }

    sub error {

    local($error,@error_fields) = @_;
    local($host,$missing_field,$missing_field_list);

    if ($error eq 'bad_referer') {
    if ($ENV{'HTTP_REFERER'} =~ m|^https?://([\w\.]+)|i) {
    $host = $1;
    print <<"(END ERROR HTML)";
    Content-type: text/html

    <html>
    <head>
    <title>Fehler!</title>
    </head>
    <body bgcolor=#ebebeb text=#000000>
    <center>
    <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Verbotener Zugriff!</font></th></tr>
    </table>
    <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>Der Zugriff auf das FormMail Skript ist von dieser Adresse verboten!<p>

    Wenn Sie wollen, dass der Zugriff von dieser Adresse erlaubt wird, fügen Sie bitte folgendes in ihr Skript ein<p>

    <tt>'$host'</tt> to your <tt><b>\@referers</b></tt><hr size=1>

    </td></tr>
    </table>
    </center>
    </body>
    </html>
    (END ERROR HTML)
    }
    else {
    print <<"(END ERROR HTML)";
    Content-type: text/html

    <html>
    <head>
    <title>Nachricht</title>
    </head>
    <body bgcolor=#ebebeb text=#000000>

    </body>
    </html>
    (END ERROR HTML)
    }
    }

    elsif ($error eq 'request_method') {
    print <<"(END ERROR HTML)";
    Content-type: text/html

    <html>
    <head>
    <title>Fehler!</title>
    </head>
    <body bgcolor=#ebebeb text=#000000>
    <center>
    <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Falsche "request" Methode!</font></th></tr>
    </table>
    <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>Die "request" Methode in Ihrem Formular entspricht weder
    <tt>GET</tt> noch <tt>POST</tt>. Bitte überprüfen Sie das Formular und stellen Sie sicher, dass der Tag
    <tt>method=</tt> in Großbuchstaben ist und <tt>GET</tt> oder <tt>POST</tt> entspricht.<p>


    </td></tr>
    </table>
    </center>
    </body>
    </html>
    (END ERROR HTML)
    }

    elsif ($error eq 'no_recipient') {
    print <<"(END ERROR HTML)";
    Content-type: text/html

    <html>
    <head>
    <title>Fehler!</title>
    </head>
    <body bgcolor=#ebebeb text=#000000>
    <center>
    <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Kein Empfänger!</font></th></tr>
    </table>
    <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>Es wurde kein Empfänger im Formular spezifiziert! Bitte stellen Sie sicher, dass der Tag 'recipient' mit einer gültigen E-Mail Adresse ausgefüllt ist.


    </td></tr>
    </table>
    </center>
    </body>
    </html>
    (END ERROR HTML)
    }

    elsif ($error eq 'missing_fields') {
    if ($Config{'missing_fields_redirect'}) {
    print "Location: $Config{'missing_fields_redirect'}\n\n";
    }
    else {
    foreach $missing_field (@error_fields) {
    $missing_field_list .= " <li>$missing_field\n";
    }

    print <<"(END ERROR HTML)";
    Content-type: text/html

    <html>
    <head>
    <title>Fehler!</title>
    </head>
    <center>
    <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Freigelassene Felder!</font></th></tr>
    </table>
    <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>Folgende Felder wurden nicht ordnungsgemäß ausgefüllt:<p>
    <ul>
    $missing_field_list
    </ul><br>

    Bitte nutzen Sie den 'Zur&uuml;ck' Button Ihres Browsers um das Problem zu beheben.<hr size=1>

    </td></tr>
    </table>
    </center>
    </body>
    </html>
    (END ERROR HTML)
    }
    }
    exit;
    }



    Ende Script 3 --------------------------------------------


    Die Integration dürfte auch Anfängern innerhalb von fünf Minuten gelingen.

    829 mal gelesen