Formmailer

Bash, Shell, PHP, Python, Perl, CGI
Outlaw
Posts: 1500
Joined: 2002-12-04 10:22
Location: 4. Server von rechts, 2. Reihe von oben

Formmailer

Post by Outlaw »

Hallo Leute,

ich habe da so ein Skript zurechtgestrickt, bei dem Formulareingaben per Mail an mich und als Kopie an den Ausfüller geschickt werden.

Soweit so gut.

Jetzt will ich aber als Alternative auch statt dem Sendebutton noch einen Printbutton haben, damit man sich das Formular auch ausdrucken kann.

Das Ganze per Javascript auszudrucken ist nicht das Problem. Mein Problem ist, daß ich beim Ausdruck in eine andere HTML oder besser PHP Datei gehen muss, weil das ganze anders formatiert werden soll.

Ich habe mir dazu eine Datei gebastelt, bei der das Ganze wie ein Fax aussieht und entsprechende Variablen gesetzt. Nun könnte ich ja einfach hergehen und das neue "Blatt" mit globalen Variablen füttern aber da kommen 2 Probleme:

1. Ich habe in dem Eingabeformular einen Action Post auf sich selbst drinne, da sich im selben Formular auch noch die Mailroutine drin befindet. Das Layout für die Mails habe ich einfach mit in die Message eingebaut. Das funzt auch prima.
Nur kann ich doch dann nicht mehr einen POST auf eine andere Datei machen, da ja hier das Action schon auf die Ursprungsdatei zeigt. Wie bekomme ich dann die Variablen in die neue Datei ??

2. Ich möchte nicht mit Register Globals ON arbeiten, es soll ja per REQUEST auch so gehen aber ich schnalle das nicht.

Schön wäre natürlich auch alles in einer Datei aber das ist mir im Moment zu viel Aufwand, das alles umzustricken (bin erst PHP Anfänger und JS, oje ....), da die Mailfunktion perfekt funzt, ich aber für den Druck auf eine andere Datei gehen muss, weil die Druckfunktion von JS immer das ganze Fenster druckt, ich aber nur einen bestimmten Bereich anders formatiert drucken will.

Versteht Ihr, was ich meine ??

Gruß Outi
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: Formmailer

Post by wgot »

Hallo,

mit der einen Datei ist's aber ganz einfach.

Das Formular:

<form action=... method=post>
<input type=submit name=was value=send>
<input type=submit name=was value=print>
</form>

Die Aufteilung:

<?php
if (isset($_REQUEST['was'])) { $was=$_REQUEST['was']; } else { $was=''; }

if ($was=='send')
{
# hier kommt der Sendeteil rein
}
else if ($was=='print')
{
# hier kommt der Druckteil rein
}
else
{
# hier kommt das Eingabeformular rein
}
?>

Gruß, Wolfgang
Outlaw
Posts: 1500
Joined: 2002-12-04 10:22
Location: 4. Server von rechts, 2. Reihe von oben

Re: Formmailer

Post by Outlaw »

Hey, danke, werde ich ausprobieren.

Ich habe mich nun doch entschlossen, das Teil gewaltig umzustricken, da es aus mehreren includes besteht und noch etwas unstrukturiert daher kommt.

Noch was zum "Druckteil":
Da ich ja zum Drucken explizit nen neues Fenster auf machen muss (da immer nur ganze Fenster gedruckt werden), würde mich interessieren, wie ich die Variablen in dieses neue Fenster bekomme.
Das war auch das ursprüngliche Problem, da die POST Methode ja bereits auf sich selbst geht und daher nicht mehr für eine andere Datei zur Verfügung steht. Ich bekomme einfach die Eingaben nicht in diese Druckdatei. Zudem muss ich schon ne extra Datei deshalb machen, daß Leute, deren Browser den Druckbefehl noch nicht kennen, einfach im Fenster auf "Drucken" gehen können. Zudem dient diese Extra Datei auch als "Vorschau" vor dem Druck.

Gruß Outi
Outlaw
Posts: 1500
Joined: 2002-12-04 10:22
Location: 4. Server von rechts, 2. Reihe von oben

Re: Formmailer

Post by Outlaw »

Hmmmm, hab das genze jetzt nochmal mal überflogen (aber verm. noch nicht ganz verstanden):
Kann ich den Formularteil in eine Datei reinmachen, dann nen Sendebutton, der das Ganze dann an eine andere Datei sendet (Beispielsweise "wegdamit.php), die dann so aufgebaut ist, daß sie das neue Layout zum Drucken enthält aber trotzdem die Wahl lässt, das ganze zu Mailen ??

Ganz so toll wäre das auch nicht, da ich eigentlich die Vorschau nur zum Drucken bräuchte ....

Gruß Outi
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: Formmailer

Post by wgot »

Hallo,

Weitergabe der Postvariablen:

1) Anhängen an die URL - dann werden sie aber per Get weitergegeben
2) neues Formular, die alten Werte als versteckte Felder in das Formular einbringen
3) Das neue Fenster komplett in JavaScript aufbauen, da dass Script im alten Fenster steht, hat es Zugriff auf die übergebenen Werte
4) Session und Datenbank

Ich würde Dein Problem so anpacken:

Ein Eingabeformular und unten ein Knopf "Vorschau".
Klickt man drauf, kommt die druckformattierte Nachricht mit zwei Knöpfen für absenden und drucken.

Kleines Beispiel (nur ein Eingabefeld, ohne Gestaltung):

Code: Select all

<html><body>
<?php 
if (isset($_REQUEST['was'])) { $was=$_REQUEST['was']; } else { $was=''; } 
if (isset($_REQUEST['eingabe'])) { $eingabe=$_REQUEST['eingabe']; } else { $eingabe=''; } 

if ($was=='Senden') 
{ 
# mail(...)
?>
Mail abgeschickt!
<?php
} 
else if ($was=='Vorschau') 
{ 
?>
<h2>Ihre Mitteilung:</h2><br>
<?php echo htmlentities($eingabe); ?><br><br>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=post>
<input type=hidden name=eingabe value="<?php echo htmlentities($eingabe); ?>">
<input type=submit name=was value=Senden>
<input type=button value=Drucken onClick='window.print()'>
</form>
<?php
} 
else 
{ 
?>
<form action=<?php echo $_SERVER['PHP_SELF']?> method=post>
<input type=text length=30 name=eingabe><br>
<input type=submit name=was value=Vorschau><br> 
</form> 
<?php
}     
?>
</body></html> 

Gruß, Wolfgang
Outlaw
Posts: 1500
Joined: 2002-12-04 10:22
Location: 4. Server von rechts, 2. Reihe von oben

Re: Formmailer

Post by Outlaw »

Super, danke, darauf werde ich was aufbauen. ich denke, damit kann ich was anfangen.

Gruß Outi
deanwickert
Posts: 77
Joined: 2003-05-13 23:20
Location: Lahnstein

Re: Formmailer

Post by deanwickert »

Schau dir auch mal CSS / CSS2 an. Wird im Moment zwar noch nicht von unbedingt allen Brwosern so wirklich 100%ig unterstützt, aber ...

Hier mal ein Bsp. für ein mögliches CSS Stylesheet:

Code: Select all

@media print {
  body {
    margin: 0px;
    border: none;
    color: #000000;
    background-color: #FFFFFF;
    font-family: Arial;
    font-size: 10pt;
  }
}

@media screen {
  body {
    margin: 0px;
    background-color: #0066FF;
    border: none;
    color: #FFFFFF;
    font-family: Arial;
    scrollbar-base-color: #000000;
    scrollbar-arrow-color: #FFFFFF;
    scrollbar-track-color: #CCCCCC;
    font-size: 10pt;
  }
}
Wenn du das Stylesheet in eine HTML-Datei einbindest wird die auf dem Monitor mit blauem Hintergrund, weißer Schrift usw. angezeigt.
Wenn du auf Druckvorschau klickst hast du nen weißen Hintergrund und schwarze Schrift.

Mit

Code: Select all

    display: none;
    visibility: hidden;
kannst du dann auch Bereiche auf dem Bildschirm bzw. beim Ausdruck verstecken. Wenn zum Bsp. ein Bild nicht mit gedruckt werden soll. Oder eine Kopfzeile gedruckt werden soll, die auf dem Bildschirm nicht angezeigt werden soll.

Ein praktisches Beispiel:
http://www.uni-koblenz.de/FB4/
Hier wird nur ein Teil der Tabelle ausgedruckt. Die Kopfleiste und die Navigation links werden weggelassen.