Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

Eigenes Formular in Mozilo Seite einbinden

Begonnen von maiemi, 26. April 2012, 07:30:44

« vorheriges - nächstes »

maiemi

Um ein eigenes Formular in eine Mozilo Seite einzubinden, kann folgende Vorgehensweise (am Beispiel eines Kontaktformulars) genutzt werden:

Was brauche ich ?

    1 in PHP geschriebene Mailer-Datei (Bsp. "mailer.php") , in welcher der Versand des Formulars geregelt, und die Prüfung, ob die (frei definierten) Pflichtfelder ausgefüllt sind.
    1 in HTML (!) geschriebenes Formular (Mailformular, Bestellformular, was auch immer als Formular eingebunden werden soll)
    1 "Fehlerseite" (als versteckte Seite in Mozilo angelegt)
    1 "Bestätigungsseite" (als versteckte Seite in Mozilo angelegt)
    mod_rewrite (weil's die Verlinkung auf die "Fehler- und Bestätigungsseite" einfacher macht, zur Not gehts auch ohne)

Was muss ich tun ?

zuerst erstelle ich eine Kategorie "Kontakt"

Hier erstelle ich eine sichtbare Seite, in der das Kontaktformular eingebunden werden soll, ich nenne sie mal "Kontakt".

In die Kontaktseite füge ich mein in HTML(selbst erstelltes) geschriebenes Kontaktformular mit der Funktion [html|] ein.

Beispiel:
[html|<form id="Kontaktformular" action="../../cms/mailer.php" method="post" name="Kontaktformular">
<input type=hidden name="print_blank_fields" value="1">
<table border="0" cellspacing="2" cellpadding="0" height="391">
<tr><td width="150"><label>Firma*</label></td><td><input type="text" name="firma" size="75" tabindex="1" width="300" /></td></tr>
<tr><td width="150"><label>Name*</label></td><td><input type="text" name="name" size="75" tabindex="2" width="300" /></td></tr>
<tr><td width="150"><label>Stra&szlig;e</label></td><td><input type="text" name="strasse" size="75" tabindex="3" width="300" /></td></tr>

<tr><td width="150"><label>PLZ</label></td><td><input type="text" name="plz" size="75" tabindex="4" width="300" /></td></tr>
<tr><td width="150"><label>Ort</label></td><td><input type="text" name="ort" size="75" tabindex="5" width="300" /></td></tr>
<tr><td width="150"><label>Mail </label></td><td><input type="text" name="mail" size="75" maxlength="50" tabindex="6" width="300" /></td></tr>
<tr><td width="150">&nbsp;</td><td width="300">&nbsp;</td></tr>
<tr><td width="150">&nbsp;</td><td>Ihre Nachricht an uns*</td><td width="300">&nbsp;</td>
<tr><td width="150">&nbsp;</td><td><textarea name="nachricht" rows="10" cols="70" width="300" height="152" tabindex="7"></textarea></td></tr>
<tr><td width="150">&nbsp;</td><td><input type="submit" name="submitButtonName" value=" Nachricht absenden" tabindex="8" /></td></tr>
</table>
</form>]
[Hinweis|* = Pflichtfeld]

Im Formular muss in der Zeile
[html|<form id="Kontaktformular"[b] action="../../cms/mailer.php[/b]" method="post" name="Kontaktformular">auf den mailer verlinkt werden. Hier kann ein relativer Pfad (siehe Beispiel) verwendet werden.

Als nächstes erstelle ich eine "Fehlerseite", die dem Besucher meldet, wenn nicht alle Pflichtfelder ausgefüllt werden in mozilo. Diese kann in der selben Kategorie, wie das Kontaktformular liegen, muss aber den Status "versteckt" haben.
Wichtig ist, dass auf der versteckten Fehlerseite ein "zurück" link angelegt wurde, damit der Betrachter nach dem Erscheinen der "Fehlerseite" direkt  zum Kontaktformular zurück kommt.

Dann erstelle ich eine "Bestätigungsseite", die dem Betrachter angezeigt wird, wenn alle Felder ausgefüllt und das Formular abgeschickt wurde. Diese seite wird ebenfalls als versteckte Seite angelegt.

Jetzt habe ich alle Seiten, die ich brauche und komme zum nächsten Schritt, dem in PHP geschriebenen Mailer, der die Aufgabe der Formularversands und der Fehlerprüfung übernimmt.

PHP-Mailer kann man im Internet finden, oder sich selber schreiben. (wozu natürlich PHP Kenntnisse benötigt werden)

Als Beispiel könnte nachfolgender mailer dienen:
<?php
$MyName 
$_POST['name'];
$MyMail "meine@mailadresse.de";
$betreff "Mitteilung vom Kontaktformular der Website";

if (
$_POST['mail'] != "" AND (!preg_match('/^[a-z0-9_.-]+@[a-z0-9.-]+.[a-z]{2,}$/i'$_POST['mail']))) die ("Das ist keine gültige mail Adresse");

$_POST['firma'] = htmlentities(strip_tags($_POST['firma']));
$_POST['name'] = htmlentities(strip_tags($_POST['name']));
$_POST['ort'] = htmlentities(strip_tags($_POST['ort']));
$_POST['strasse'] = htmlentities(strip_tags($_POST['strasse']));
$_POST['plz'] = htmlentities(strip_tags($_POST['plz']));
$_POST['nachricht'] = htmlentities(strip_tags($_POST['nachricht']));

$_POST['mail'] = htmlentities(strip_tags($_POST['mail']));


if (
$_POST['firma'] != "" AND $_POST['name'] != "" AND $_POST['nachricht'] != "" ) {

    
$header  'MIME-Version: 1.0'."rn";
    
$header .= 'Content-type: text/plainn; charset=iso-8859-1'."rn";
    
$header .= "From: ".$MyName."<".$MyMail.">n";
    
$header .= "Reply-To: ".$_POST['email']."n";
    
$header .= "CC: ".$_POST['mail']."n";
    
$header .= "X-Mailer: PHP/" phpversion(). "n";
    
$header .= "X-Sender-IP: ".$_SERVER['REMOTE_ADDR']."n";

    
$text $_POST['nachricht'];
    
$text str_replace("<br />"""$text);

    
$body "Firma: ".$_POST['firma']."nName: ".$_POST['name'].", ".$_POST['ort']."nStrasse: ".$_POST['strasse']."nPLZ: ".$_POST['plz']."nOrt: ".$_POST['ort']."nMailadresse: ".$_POST['mail']."nnNachricht:nn".$text;


    
mail($MyMail$betreff$body$header);

    
header("location:http://www.xxxxx.de/xxxxx/danke.html");
}
else 
header("location: http://www.xxxxxxx.de/xxxxx/fehler.html");
?>


im Bereich "MyName" muss nichts eingetragen werden.
im Bereich "Betreff" kann ein freier Betreff eingetragen werden.

In der Zeile if ($_POST['firma'] != wird festgelegt, welche Pflichtfelder ausgefüllt werden müssen, damit das Formular versendet wird.

Ganz unten im Mailer wird auf die "Danke" und "Fehlerseite" verlinkt, die im entsprechenden Fall aufgerufen werden. Wichtig hier ist, dass ein absoluter HTML-Pfad eingetragen ist. (Siehe Beispiel)
Der Beispielmailer ist so gestrickt, dass der Absender eine Kopie des Formulars geschickt bekommt, wenn er seine Mailadresse eingibt, allerdings wird die gültigkeit der eingegebenen Mailadresse nicht geprüft, d. h. man könnte hier eine "beliebige" Mailadresse eingeben. (oder keine)

Nun muss der Mailer noch in Mozilo eingebunden werden.

Ich habe den Mailer per FTP in das Verzeichnis "CMS" hochgeladen, da hier die anderen PHP Scripte von mozilo liegen.

Das wars eigendlich, nun kann das eigene Formular genutzt werden.

djr

#1
Hab 's nur überflogen, aber folgende Korrektur:
[html|<form id="Kontaktformular" action="../../cms/mailer.php" method="post" name="Kontaktformular">Hier waren [b][/b] aus dem Foren-Editor dazwischen, die innerhalb der code-Tags nicht umgesetzt werden.

Original:
Zitat von: "maiemi"Im Formular muss in der Zeile[html|<form id="Kontaktformular"[b] action="../../cms/mailer.php[/b]" method="post" name="Kontaktformular">auf den mailer verlinkt werden. Hier kann ein relativer Pfad (siehe Beispiel) verwendet werden.

djr

#2
:!: Das hier gezeigte ist eine mögliche Alternative zum CONTACT-Plugin.
Plugins sind aufgrund ihr Sicherheit und dem Support zu bevorzugen.


Eine Diskussion bezüglich Sicherheit und Verbesserung der hier beschriebenen Vorgehensweise von maiemi findet sich im Thema "Bestellformular mit PHP array[] einbinden".

@maiemi:
(dennoch) Danke für Deine ausführliche Anleitung! - Die ich mir ja gewünscht hatte.
Zitat von: "maiemi"Ich habe den Mailer per FTP in das Verzeichnis "CMS" hochgeladen, da hier die anderen PHP Scripte von mozilo liegen.
Dadurch könnte es aber sein, dass bei einem Update die Datei verloren geht.

stefanbe

#3
Inhalt entfernt hat sich erledigt

gruss stefanbe

maiemi

#4
@stefanb

PN ist an Dich gegangen, bitte den Code des Beispielmailers austauschen

maiemi

#5
Zitat von: "maiemi"@stefanb

PN ist an Dich gegangen, bitte den Code des Beispielmailers austauschen

Hallo Stefan bitte tausche die entsprechenden Codeblöcke aus und füge den für das Script hinzu.
Durch die überarbeiteten Codes kann Dein Sicherheitshinweis entfallen.
Danke und Gruss

maiemi

maiemi

#6
mit dem nachfolgenden Java-Script kann auf der oben eingefügten Kontaktformularseite geprüft werden, ob die gewünschten Pflichtfelder ausgefüllt wurden.
Das Javascript wird in der .../layout/Layoutname/template.html in den HEAD - Bereich eingetragen.
<!-- Script zu Überprüfung von Formulareingaben -->
<script type="text/javascript"><!--
function chkKontaktformular () {
  if (document.Kontaktformular.firma.value == "") {
    alert("Bitte geben Sie Ihren Firmennamen ein!");
    document.Kontaktformular.firma.focus();
    return false;
  }
  if (document.Kontaktformular.name.value == "") {
    alert("Bitte geben Sie Ihren Namen ein!");
    document.Kontaktformular.name.focus();
    return false;
  }
  if (document.Kontaktformular.nachricht.value == "") {
    alert("Bitte geben Sie Ihre Nachricht ein!");
    document.Kontaktformular.nachricht.focus();
    return false;
  }
{
if (!document.Kontaktformular.mail.value == ""){
mailaufbau=document.Kontaktformular.mail.value;
erlaubt=/^w[w|.|-]+@w[w|.|-]+.[a-zA-Z]{2,4}$/;

if(!erlaubt.test(mailaufbau))
{
alert("Die email Adresse ist ungültig");
document.Kontaktformular.mail.focus();
return false;
}}}
}  
--></script>

Der Effekt ist, dass bei "Nichtausfüllen" der gewünschten Pflichtfelder eine Meldung ("alert") über das Versäumnis erscheint und nach Bestätigung der Meldung der Cursor gleich im richtigen (angemahnten) Feld im Formular steht, sodass die versäumte Angabe gemacht werden kann.

Vorteil ist, dass die Kontaktformularseite nicht neu aufgerufen wird, sondern stehen bleibt und damit auch das, was bis zur Meldung ausgefüllt wurde.

Leider kann in den HEAD Bereich für nur einer bestimmten Seite (bislang) kein separater Eintrag gemacht werden, sodass der Eintrag in der template.html platziert werden muss und damit vom CMS in jede Seite eingebaut wird.

maiemi

#7
Es kann sein ,dass Umlaute mit dem obigen Mailer falsch dargestellt werden.
in diesem Fall muss das
htmlentitiesgegen
htmlspecialcharsausgetauscht und im Mailer das Chardset von iso-8859-1 nach utf-8 geändert werden.

Somit werden lediglich die HTML Sonderzeichen (htmlspecialchars) umgewandelt, die Umlaute und "scharf-s = ß) bleiben in der Nachricht  bestehen.

djr

#8
falls noch relevant:
Zitat von: "maiemi"Leider kann in den HEAD Bereich für nur einer bestimmten Seite (bislang) kein separater Eintrag gemacht werden, ...
... mittlerweile schon: head-Plugin.

rolinux

#9
Wenn ich das richtig verstehe, fehlt hier noch die (per Zufall ausgewählte) Sicherheitsfrage (wie im Original-mozilo-Kontaktformular bzw. -Gästebuch), um Spam zu vermeiden. Ich sehe jedenfalls kein Formularfeld im HTML-Code dafür.

Gruß
Rolf
"Vergiss nie, dass die Musik viel zu wichtig ist,
um sie ganz den Profis zu überlassen."
(Robert Fulghum, amerikanischer Philosoph)

"Die Deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, d.h. du sollst sie nicht verändern oder in veränderter Form veröffentlichen."
(Verfasser unbekannt)

HPdesigner

#10
Da es hier grad reinzupassen scheint:
Ich hab vor einiger Zeit mal ein pollCreator-Plugin geschrieben, dass es erlaubt, beliebige Formulare direkt im Backend zu erstellen. Erlaubte Formularelemente sind dabei Radiobuttons, Checkboxen, einzeilige und mehrzeilige Textfelder. Ich hatte mir das mal programmiert, weil ich es als Umfrage zu einer Veranstaltung brauchte. Die Syntax im Backend ist einfach:

erzeugt das gewünschte Formular:

und wertet es bei Bedarf auch sofort aus (zB mit Balkendiagrammen):


Das Plugin is noch nich ganz ausm Beta stadium raus, deshalb hatte ichs noch nicht veröffentlich - aber es funktioniert ;) Ich hoffe ich komm bald mal dazu es zu finalisieren. Ich wollte es nur mal anmerken, dass es sowas gibt ;)

lg, HPdesigner
Check my website devmount.de
and find me on Twitter, Medium, GitHub, StackOverflow, Codepen and Slack

maiemi

#11
Zitat von: "rolinux"Wenn ich das richtig verstehe, fehlt hier noch die (per Zufall ausgewählte) Sicherheitsfrage (wie im Original-mozilo-Kontaktformular bzw. -Gästebuch), um Spam zu vermeiden. Ich sehe jedenfalls kein Formularfeld im HTML-Code dafür.

Gruß
Rolf

Lieber spät, als nie..

Durch die Sicherheitsabfragen im PHP- und Java Skript erübrigt sich das.

rolinux

#12
Bin jetzt nicht der PHP- und Java-Crack...

Aber soweit ich das verstehe, geht das PHP-Script so vor:

1. Vorbelegung von Variablen
2. Prüfung der E-Mail-Adresse auf Gültigkeit der Syntax (kann Spam nicht verhindern)
3. Zuweisung der HTML-Variablen an die PHP-Variablen
4. Prüfung der Mussfelder (kann Spam nicht verhindern)
5. Zusammenstellen des Mailheaders
6. Zusammenstellen des Mailbodys
7. Versenden der Mail und Danke-Seite

Da ist keine Sicherheitsabfrage zu sehen, die Spam verhindern könnte.

Aber vielleicht kannst Du mich ja aufklären...  ;)

Noch 'ne andere Frage:
Kann man das PHP-Script auch ohne das Java-Script verwenden?

Gruß
Rolf
"Vergiss nie, dass die Musik viel zu wichtig ist,
um sie ganz den Profis zu überlassen."
(Robert Fulghum, amerikanischer Philosoph)

"Die Deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, d.h. du sollst sie nicht verändern oder in veränderter Form veröffentlichen."
(Verfasser unbekannt)

maiemi

#13
soweit ich richtig liege, wird ein mißbrauch durch diesen "Zusatz" htmlentities(strip_tags verhindert.
Ob das allerdings zu 100% sein wird, weiss ich nicht. Zumindest ist der Mailer so gestaltet, dass er das Hinzufügen weiterer Adressen verhindert. Spam in die Eigene Mailbox wird dadurch nicht verhindert.
Allerdings muss ich sagen, dass ich bisher keine Probleme damit hatte.

Das Javascript dient nur dem Zweck, dem User mit zu teilen, wenn er ein Feld vergessen hat.
Da das Formular nicht im Cache gehalten wir, wären die EIngaben weg, wenn der Mailer (als zweite Instanz) die Prüfung vornimmt und auf einen Fehler stößt.

Man kann jedoch beides getrennt und alleinstehend verwenden.

Der Crack bin ich auch nicht, ich habe mir meine winzigen Kenntnisse mit SelfPHP und dem Forum und anderen PHP Foren angeeignet. .... Im Gegenteil, ich würde meine Kenntnisse unter einem Anfängerniveau einstufen.....Tante G o ogle hat mir dabei oft geholfen.  ;)

rolinux

#14
Hab grade mal ein bisschen im Internet gestöbert. htmlentities und strip_tags verhindert anscheinend nur (wenn ich das richtig verstanden habe), dass Schadcode in die Felder eingetragen werden kann. Spam wird damit nicht verhindert.

Gruß
Rolf
"Vergiss nie, dass die Musik viel zu wichtig ist,
um sie ganz den Profis zu überlassen."
(Robert Fulghum, amerikanischer Philosoph)

"Die Deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, d.h. du sollst sie nicht verändern oder in veränderter Form veröffentlichen."
(Verfasser unbekannt)