neues formularmodul :: w3concepts.form.v1
ja, ich habe mir den code auch schon x-mal angeschaut. ich begreife nur nicht, wo letztlich deffiniert wird, das die values ausgegeben werden. wenn ich das gefunden hätte, würde ich einfach mal versuchen das in options zu ändern. d.h. das die values ganz normal ihrer bestimmung weitergehen und halt stattdessen nur die options ausgegeben werden.
die values haben für mich halt zur zeit nur den zweck der pflichtangabenauswahl, da man damit hier einfach und schnell arbeiten kann.
wenn du mir einen hinweis auf die stelle im code geben kannst, dann setzte ich mich hin und probiere weiter. ich hänge da halt nur gerade (wie in einem guten adventure )
danke,
stephan
die values haben für mich halt zur zeit nur den zweck der pflichtangabenauswahl, da man damit hier einfach und schnell arbeiten kann.
wenn du mir einen hinweis auf die stelle im code geben kannst, dann setzte ich mich hin und probiere weiter. ich hänge da halt nur gerade (wie in einem guten adventure )
danke,
stephan
So jetzt habe ich alles in den Griff gebracht, bis auf eins:
wenn jemand einen Text, oder Bemrkung schreiben möchte, und dabei Absätze verwendet, wird das formular nicht verschickt.
bei diesem Text geht es:
Und das hier geht nicht:
Hat da jemand eine Lösung?
wenn jemand einen Text, oder Bemrkung schreiben möchte, und dabei Absätze verwendet, wird das formular nicht verschickt.
bei diesem Text geht es:
Code: Alles auswählen
Hallo Frau Müller, wie geht es Ihnen? ich wünsche Ihnen gute Besserung. MfG Herr Maier
Code: Alles auswählen
Hallo Frau Müller,
wie geht es Ihnen?
ich wünsche Ihnen gute Besserung.
MfG Herr Maier
Hi kummer,kummer hat geschrieben: wenn es ein pflichtfeld sein soll, muss du ohnehin noch eine dritte option angeben, die ursprünglich ausgewählt ist. also z.b. 'bitte wählen...' (oder auch einfach ein leerzeichen). und diese option hat dann wieder mehr (oder auch weniger) als vier buchstaben. dann sollte es auch wieder funktionieren (auch ohne values).
ich habe das jetzt mal in allen varianten ausprobiert. sobald ich ein dropdown menu habe und die values weglasse und dafür ein min und maxlength einsetzte, dann wird nichts mehr weggeschickt. er prüft und wartet auf eine korrekte eingabe. er kann scheinbar mit "lenght" in diesem fall nichts anfangen.
sobald ich wieder values einsetze, dann geht es wieder. aber dann bin ich wieder bei meinem alten problem, dass auch nur bei den dropdown menüs auftaucht.
stephan
könnte es sein, dass nur ein schreibfehler besteht? weil es müsste length heissen und nicht lenght.smeusel hat geschrieben:er kann scheinbar mit "lenght" in diesem fall nichts anfangen.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
kannst du es hier mal publizieren? ich meine nicht das modul, sondern das formular selber, so wie du es in der konfiguration angibst.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
zeilenumbruchproblem behoben
das problem bei zeilenumbrüchen in textfeldern habe ich lösen können. dazu muss in der methode 'formularFeldKorrekt()' folgende zeile zusätzlich eingefügt werden:
in der konfiguration muss dann einfach anstatt 'valid:text' 'valid:textmitumbruch' verwendet werden.
man kann selbstverständlich auch einfach die bestehende zeile 'text' durch 'textmitumbruch' ersetzten und dann in 'text' umbenennen. allerdings dürfte es nie schaden, eine vielfalt an regex-prüfungen zur verfügung zu haben. es könnte ja sein, dass in einem einzelfall genau der ausschluss von zeilenumbrüchen gefragt sein könnte.
gruss,
andreas
das problem bei zeilenumbrüchen in textfeldern habe ich lösen können. dazu muss in der methode 'formularFeldKorrekt()' folgende zeile zusätzlich eingefügt werden:
Code: Alles auswählen
if (!empty($feld['valid']) && $feld['valid'] == 'textmitumbruch' && !eregi("^[ \n\r.,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
man kann selbstverständlich auch einfach die bestehende zeile 'text' durch 'textmitumbruch' ersetzten und dann in 'text' umbenennen. allerdings dürfte es nie schaden, eine vielfalt an regex-prüfungen zur verfügung zu haben. es könnte ja sein, dass in einem einzelfall genau der ausschluss von zeilenumbrüchen gefragt sein könnte.
gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
so schaut er mit values aus, wo halt leider nur die nummer, aber nicht der text in die mail geschrieben wird:kummer hat geschrieben:kannst du es hier mal publizieren? ich meine nicht das modul, sondern das formular selber, so wie du es in der konfiguration angibst.
Code: Alles auswählen
###name:anrede; type:select; valid:integer; size:1; option:bitte auswählen; optionvalue:0; option:Frau; optionvalue:1; option:Herr; optionvalue:2; value:0;minvalue:1###
Code: Alles auswählen
###name:anrede; type:select; valid:integer; size:1; option:?; option:Frau; option:Herr; minlength:2###
is
na ja, die prüfung auf integer ist natürlich dann nicht mehr zutreffend. also musst du...
durch
ersetzen. dann sollte es auch funktionieren.
gruss,
andreas
Code: Alles auswählen
valid:integer
Code: Alles auswählen
valid:text
gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
auf anregung von m.hoffmann habe ich das output-script so abgeändert, dass jetzt dynamsich feldvorbelegungen möglich sind. dazu müssen lediglich per post oder get parameter (mit den gleichen bezeichnungen wie im formular) übergeben werden. die entsprechenden felder werden dann mit den übergebenen werten vorbelegt.
hier der output-code (input bleibt unverändert):
gruss,
andreas
hier der output-code (input bleibt unverändert):
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : w3concepts.form.mod2.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 15-10-2004
* Modified : 15-10-2004
************************************************/
class w3form {
var $email, $aufgedroeselt, $form, $formularFeld;
function w3form() {
}
// PRIVATE
function sendEmail() {
$this->aufdroeseln($this->suppress('sent'));
$this->generateEmailMessage();
mail($this->email['adresses'],$this->email['subject'],$this->email['message'],"From: {$this->email['from']['name']} <{$this->email['from']['email']}>\nReply-To: {$this->email['from']['email']}\nX-Mailer: PHP/" . phpversion());
}
// PRIVATE
function aufdroeseln($aufzudroeseln,$prefix = '') {
foreach ($aufzudroeseln as $key => $value) {
if (is_array($value)) {
$this->aufdroeseln($value,$key." ");
} else {
$this->aufgedroeselt["{$prefix}{$key}"] = $value;
}
}
}
// PRIVATE
function add2Message($key,$value) {
if (strlen($key) > 25 OR strlen($value) > 54) {
$this->email['message'] .= "$key\n$value\n";
} else {
$this->email['message'] .= $key;
$this->email['message'] .= str_repeat(' ',25-strlen($key));
$this->email['message'] .= "$value\n";
}
}
// PRIVATE
function generateEmailMessage() {
if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
$this->add2Message($key,$value);
}
}
// PRIVATE
function suppress() {
$suppress = func_get_args();
foreach ($_POST as $key => $value) {
if (array_search($key,$suppress) === false) $fields[$key] = $value;
}
return $fields;
}
// PUBLIC
function addEmailAdress($email) {
if (empty($this->emailAdresses)) {
$this->email['adresses'] .= "$email";
} else {
$this->email['adresses'] .= ", $email";
}
}
// PUBLIC
function setEmailSubject($subject) {
$this->email['subject'] = $subject;
}
// PUBLIC
function setEmailFrom($email,$name) {
$this->email['from']['email'] = $email;
$this->email['from']['name'] = $name;
}
// PUBLIC
function setForm($form) {
$this->form['form'] = $form;
}
// PUBLIC
function setAnswer($answer) {
$this->form['answer'] = $answer;
}
// PUBLIC
function setBackgroundError($color) {
$this->form['colorError'] = $color;
}
// PRIVATE
function formularInterpretation(&$formular) {
$felder = split('###',$formular);
for ($i=1;$i<count($felder);$i=$i+2) {
$attributte = split(';',trim($felder[$i]));
foreach ($attributte as $attribut) {
$namewert = split(':',trim($attribut));
if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') {
$feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1];
} else {
$feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1];
}
}
}
return $feld;
}
// PRIVATE
function formularAusgabe($sent = false) {
echo '<form action="" method="POST">';
echo '<input type="hidden" name="sent" value="true" />';
$formular = $this->form['form'];
$formulardaten = $this->formularInterpretation(&$formular);
$formular = split('###',$formular);
foreach ($formular as $formularteil) {
if (!empty($formulardaten["{$formularteil}"])) {
$this->formularFeld($formulardaten["{$formularteil}"],$sent);
} else {
echo $formularteil;
}
}
echo '</form>';
}
// PRIVATE
function formularFeld($attribute,$sent) {
$parameter = "name=\"{$attribute['name']}\"";
if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style=\"background-color:{$this->form['colorError']};\"";
switch ($attribute['type']) {
case 'select':
case 'password':
case 'text':
if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
break;
}
switch ($attribute['type']) {
case 'textarea':
case 'text':
if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
if (!empty($attribute['value'])) $value = $attribute['value'];
if (!empty($_REQUEST["{$attribute['name']}"])) $value = $_REQUEST["{$attribute['name']}"];
break;
}
switch ($attribute['type']) {
case 'text':
echo "<input type=\"text\" $parameter value=\"$value\" $style />";
break;
case 'password':
echo "<input type=\"password\" $parameter value=\"$value\" $style />";
break;
case 'textarea':
echo "<textarea name=\"{$attribute['name']}\" cols=\"";
echo (empty($attribute['cols']))?('20'):($attribute['cols']);
echo "\" rows=\"";
echo (empty($attribute['rows']))?('2'):($attribute['rows']);
echo "\" wrap=\"virtual\" $style>$value</textarea>";
break;
case 'select':
echo "<select $parameter $style>";
for ($i=0;$i<count($attribute['option']);$i++) {
if (!empty($attribute['optionvalue'][$i])) {
if (!empty($_REQUEST["{$attribute['name']}"]) && $_REQUEST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
} else {
if (empty($_REQUEST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) {
echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
} else {
echo "<option value=\"{$attribute['optionvalue'][$i]}\">{$attribute['option'][$i]}</option>\n";
}
}
} else {
if (!empty($_REQUEST["{$attribute['name']}"]) && $_REQUEST["{$attribute['name']}"] == $attribute['option'][$i]) {
echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
} else {
if (empty($_REQUEST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) {
echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
} else {
echo "<option>{$attribute['option'][$i]}</option>\n";
}
}
}
}
echo "</select>";
break;
case 'checkbox':
$formularbezeichner = preg_split('[\[|\]]',$attribute['name']);
if ($sent) {
if ($_REQUEST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) {
echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
}
} else {
if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
}
}
break;
case 'radio':
if (!empty($_REQUEST["{$attribute['name']}"])) {
if ($_REQUEST["{$attribute['name']}"] == $attribute['value']) {
echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" />";
}
} else {
if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\"/>";
}
}
break;
}
}
// PRIVATE
function formularVollstaendig() {
$formular = $this->form['form'];
$felder = $this->formularInterpretation(&$formular);
foreach ($felder as $feld) {
if (!$this->formularFeldKorrekt(&$feld)) return false;
}
return true;
}
// PRIVATE
function success() {
$this->sendEmail();
echo $this->form['answer'];
}
// PRIVATE
function formularFeldKorrekt(&$feld) {
// prüfung, ob pflichtfeld vorhanden
if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false;
// wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
if (empty($_POST["{$feld['name']}"])) return true;
// regular expression prüfungen
if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[ öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'textmitumbruch' && !eregi("^[ \n\r.,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false;
// grössenbereich bei integer und float prüfen
if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false;
if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false;
// längenbereich bei allen typen prüfen
if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false;
if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false;
return true;
}
//PUBLIC
function process() {
if (!isset($_POST['sent'])) {
$this->formularAusgabe();
} elseif ($this->formularVollstaendig()) {
$this->success();
} else {
$this->formularAusgabe(true);
}
}
}
if ($edit) {
echo "<h1>Formularkonfiguration</h1>";
echo "<p>Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:</p>";
echo "CMS_HTML[0]";
echo "<p>Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:</p>";
echo "CMS_HTML[1]";
} else {
$formular = new w3form();
$formular->addEmailAdress("CMS_VALUE[0]");
$formular->setEmailSubject("CMS_VALUE[1]");
$formular->setEmailFrom("CMS_VALUE[2]","CMS_VALUE[3]");
$formular->setBackgroundError("CMS_VALUE[4]");
$formular->setForm("CMS_HTML[0]");
$formular->setAnswer("CMS_HTML[1]");
$formular->process();
}
?>
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Mein Formular sendet nicht
Hallo,
ich habe alles laut Anleitung gemacht. Wenn ich das Formular ausfülle, und etwas falsch oder gar nicht ausgefüllt ist, dann unterlegt er das natürlich in der von mir bestimmten Farbe. Wenn ich dann alles korrigiert habe, dann erscheint natürlich kein feld mehr in der unterlegten Farbe, aber er verschickt auch nichts. Er öffnet einfach wieder das Formular und zwar mit den werten die ich gerade eingetragen hatte.
Hat jemand ne Ahnung woran das liegen könnte?
Mein Formular sieht so aus:
Danke für Eure Hilfe..
Jeannette
ich habe alles laut Anleitung gemacht. Wenn ich das Formular ausfülle, und etwas falsch oder gar nicht ausgefüllt ist, dann unterlegt er das natürlich in der von mir bestimmten Farbe. Wenn ich dann alles korrigiert habe, dann erscheint natürlich kein feld mehr in der unterlegten Farbe, aber er verschickt auch nichts. Er öffnet einfach wieder das Formular und zwar mit den werten die ich gerade eingetragen hatte.
Hat jemand ne Ahnung woran das liegen könnte?
Mein Formular sieht so aus:
Code: Alles auswählen
<TABLE style="WIDTH: 100%" width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD width="37%">Vor-/Nachname:*</TD>
<TD width="63%">###name:vorname; type:text; valid:simpletext; size:15; mandatory:true### / ###name:nachname; type:text; valid:simpletext; size:15; mandatory:true###</TD></TR>
<TR>
<TD>Straße & Nr.*</TD>
<TD>###name:strasse; type:text; valid:text; size:20; mandatory:true### / ###name:nr; type:text; valid:integer; size:4; mandatory:true###</TD></TR>
<TR>
<TD>PLZ/Ort:*</TD>
<TD>###name:plz ;type:text;valid:integer;size:5;mandatory:true### / ###name:ort;type:text;valid:text;size:15;mandatory:true###</TD></TR>
<TR>
<TD>Land:*</TD>
<TD>###name:land2; type:select; valid:text; size:1; option:bitte auswählen; option:Schweiz; option:Deutschland; option:Oesterreich; value:bitte auswählen###</TD></TR>
<TR>
<TD class="" vAlign=top>Geburtsdatum:* (TT.MM.JJ)</TD>
<TD>###name:gebdatum;type:text;valid:date; mandatory:true### </TD></TR>
<TR>
<TD class="" vAlign=top>Telefon:*</TD>
<TD>###name:telefon;type:text;valid:integer;size:15;mandatory:true###</TD></TR>
<TR>
<TD>Handy-Nr.:</TD>
<TD>###name:handy;type:text;valid:integer;size:17###</TD></TR>
<TR>
<TD>Emailadresse:*</TD>
<TD>###name:email;type:text;valid:email;size:25;mandatory:true###</TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD></TD>
<TD><FONT size=2>Einzugsermächtigung:</FONT></TD></TR>
<TR>
<TD>Bank:*</TD>
<TD>###name:bank; type:text;valid:text; size:20; mandatory:true### </TD></TR>
<TR>
<TD>BLZ:*</TD>
<TD>###name:blz;type:text;valid:integer;size:9;mandatory:true###</TD></TR>
<TR>
<TD>Kontonummer:*</TD>
<TD>###name:konto;type:text;valid:integer;size:8;mandatory:true###</TD></TR>
<TR>
<TD>Bemerkungen:</TD>
<TD>
<P>###name:bemerkungen; type:textarea; valid:text; rows:6; cols:30###</P></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD height=40>
<P>###name:inhaber; type:checkbox;mandatory:true###</P></TD>
<TD>Der Antragsteller ist auch Kontoinhaber.</TD></TR>
<TR>
<TD>###name:inhaber; type:checkbox;mandatory:true###</TD>
<TD>
<P class=legal> </P>
<P class=legal>Hiermit ermächtige ich WIWOin International, den Betrag von 19.95 EUR (plus 2,50 Euro Bearbeitungs- und Versandkosten) für meine persönliche Shopping Card für das erste Jahr und im Folgejahr zum gleichen Zeitpunkt von meinem o.g. Konto per Lastschrift einzuziehen.</P></TD></TR>
<TR>
<TD>
<P>###name:inhaber; type:checkbox;mandatory:true###</P></TD>
<TD>
<P><SPAN class=legal></SPAN> </P>
<P><SPAN class=legal>Die Allgemeinen Geschäftsbedingungen sowie die Bestimmungen zur Datenerhebung sind mir bekannt<BR>und werden hiermit akzeptiert.</SPAN></P></TD></TR>
<TR>
<TD colSpan=2>
<P align=center><INPUT type=submit value=senden><INPUT type=reset value=löschen></P></TD></TR></TBODY></TABLE>
Jeannette
hallo jeannette
du hast zwei fehler in deinem formular:
(1) zum einen fehlen bei den drei checkboxen unten der value-parameter. dem formular muss bekannt sein, welchen werte das feld annimmt, wenn die checkbox selektiert ist. leider funktioniert die vergabe der hintergrundfarbe über css für diesen feldtyp nicht. da lässt sich leider vorerst auch nichts machen.
(2) zum anderen heissen die drei checkboxen alle gleich. das wäre auch kein problem, wenn nicht alle pflichtfelder wären. in diesem fall muss die bezeichnung für jede checkbox allerdings eindeutig sein.
sobald du diese beiden änderungen vornimmst, wird dein formular auch funktionieren.
gruss,
andreas
du hast zwei fehler in deinem formular:
(1) zum einen fehlen bei den drei checkboxen unten der value-parameter. dem formular muss bekannt sein, welchen werte das feld annimmt, wenn die checkbox selektiert ist. leider funktioniert die vergabe der hintergrundfarbe über css für diesen feldtyp nicht. da lässt sich leider vorerst auch nichts machen.
(2) zum anderen heissen die drei checkboxen alle gleich. das wäre auch kein problem, wenn nicht alle pflichtfelder wären. in diesem fall muss die bezeichnung für jede checkbox allerdings eindeutig sein.
sobald du diese beiden änderungen vornimmst, wird dein formular auch funktionieren.
gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Hallo,
gibt es bei diesem Script die Möglichkeit, die Adressaten erst über das Formular auszuwählen? Ich weiß nicht, wie ich da anfangen soll. Der CMS_VALUE[0] muss dafür ja in dem Formular erst angegeben werden. Evenetuell bin ich aber einfach noch zu neu, was PHP angeht. Hat dazu jemand eine Idee?
Beste Grüße
Maik
gibt es bei diesem Script die Möglichkeit, die Adressaten erst über das Formular auszuwählen? Ich weiß nicht, wie ich da anfangen soll. Der CMS_VALUE[0] muss dafür ja in dem Formular erst angegeben werden. Evenetuell bin ich aber einfach noch zu neu, was PHP angeht. Hat dazu jemand eine Idee?
Beste Grüße
Maik
Damit man sich das besser vorstellen kann:
Input:
Output:
Formular:
Input:
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname : w3concepts.form.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 20-08-2004
* Modified : 20-08-2004
************************************************/
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">";
echo "<tr><td>Betreff:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size=\"30\" /></td></tr>";
echo "<tr><td>Hintergrundfarbe bei Fehlern (z.B. red):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"30\" /></td></tr>";
echo "</table>";
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : w3concepts.form.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 20-08-2004
* Modified : 20-08-2004
************************************************/
class w3form {
var $email, $aufgedroeselt, $form, $formularFeld;
function w3form() {
}
// PRIVATE
function sendEmail() {
$this->aufdroeseln($this->suppress('sent'));
$this->generateEmailMessage();
mail($this->email['adresses'],$this->email['subject'],$this->email['message'],"From: {$this->email['from']['name']} <{$this->email['from']['email']}>\nReply-To: {$this->email['from']['email']}\nX-Mailer: PHP/" . phpversion());
}
// PRIVATE
function aufdroeseln($aufzudroeseln,$prefix = '') {
foreach ($aufzudroeseln as $key => $value) {
if (is_array($value)) {
$this->aufdroeseln($value,$key." ");
} else {
$this->aufgedroeselt["{$prefix}{$key}"] = $value;
}
}
}
// PRIVATE
function add2Message($key,$value) {
if (strlen($key) > 25 OR strlen($value) > 54) {
$this->email['message'] .= "$key\n$value\n";
} else {
$this->email['message'] .= $key;
$this->email['message'] .= str_repeat(' ',25-strlen($key));
$this->email['message'] .= "$value\n";
}
}
// PRIVATE
function generateEmailMessage() {
if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
$this->add2Message($key,$value);
}
}
// PRIVATE
function suppress() {
$suppress = func_get_args();
foreach ($_POST as $key => $value) {
if (array_search($key,$suppress) == false) $fields[$key] = $value;
}
return $fields;
}
// PUBLIC
function addEmailAdress($email) {
if (empty($this->emailAdresses)) {
$this->email['adresses'] .= "$email";
} else {
$this->email['adresses'] .= ", $email";
}
}
// PUBLIC
function setEmailSubject($subject) {
$this->email['subject'] = $subject;
}
// PUBLIC
function setEmailFrom($email,$name) {
$this->email['from']['email'] = $email;
$this->email['from']['name'] = $name;
}
// PUBLIC
function setForm($form) {
$this->form['form'] = $form;
}
// PUBLIC
function setAnswer($answer) {
$this->form['answer'] = $answer;
}
// PUBLIC
function setBackgroundError($color) {
$this->form['colorError'] = $color;
}
// PRIVATE
function formularInterpretation(&$formular) {
$felder = split('###',$formular);
for ($i=1;$i<count($felder);$i=$i+2) {
$attributte = split(';',trim($felder[$i]));
foreach ($attributte as $attribut) {
$namewert = split(':',trim($attribut));
if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') {
$feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1];
} else {
$feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1];
}
}
}
return $feld;
}
// PRIVATE
function formularAusgabe($sent = false) {
echo '<form action="" method="POST">';
echo '<input type="hidden" name="sent" value="true" />';
$formular = $this->form['form'];
$formulardaten = $this->formularInterpretation(&$formular);
$formular = split('###',$formular);
foreach ($formular as $formularteil) {
if (!empty($formulardaten["{$formularteil}"])) {
$this->formularFeld($formulardaten["{$formularteil}"],$sent);
} else {
echo $formularteil;
}
}
echo '</form>';
}
// PRIVATE
function formularFeld($attribute,$sent) {
$parameter = "name=\"{$attribute['name']}\"";
if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style=\"background-color:{$this->form['colorError']};\"";
switch ($attribute['type']) {
case 'select':
case 'password':
case 'text':
if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
break;
}
switch ($attribute['type']) {
case 'textarea':
case 'text':
if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
if (!empty($attribute['value'])) $value = $attribute['value'];
if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
break;
}
switch ($attribute['type']) {
case 'text':
echo "<input type=\"text\" $parameter value=\"$value\" $style />";
break;
case 'password':
echo "<input type=\"password\" $parameter value=\"$value\" $style />";
break;
case 'textarea':
echo "<textarea name=\"{$attribute['name']}\" cols=\"";
echo (empty($attribute['cols']))?('20'):($attribute['cols']);
echo "\" rows=\"";
echo (empty($attribute['rows']))?('2'):($attribute['rows']);
echo "\" wrap=\"virtual\" $style>$value</textarea>";
break;
case 'select':
echo "<select $parameter $style>";
for ($i=0;$i<count($attribute['option']);$i++) {
if (!empty($attribute['optionvalue'][$i])) {
if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
} else {
if (empty($_POST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) {
echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
} else {
echo "<option value=\"{$attribute['optionvalue'][$i]}\">{$attribute['option'][$i]}</option>\n";
}
}
} else {
if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['option'][$i]) {
echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
} else {
if (empty($_POST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) {
echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
} else {
echo "<option>{$attribute['option'][$i]}</option>\n";
}
}
}
}
echo "</select>";
break;
case 'checkbox':
$formularbezeichner = preg_split('[\[|\]]',$attribute['name']);
if ($sent) {
if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) {
echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
}
} else {
if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
}
}
break;
case 'radio':
if (!empty($_POST["{$attribute['name']}"])) {
if ($_POST["{$attribute['name']}"] == $attribute['value']) {
echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" />";
}
} else {
if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\"/>";
}
}
break;
}
}
// PRIVATE
function formularVollstaendig() {
$formular = $this->form['form'];
$felder = $this->formularInterpretation(&$formular);
foreach ($felder as $feld) {
if (!$this->formularFeldKorrekt(&$feld)) return false;
}
return true;
}
// PRIVATE
function success() {
$this->sendEmail();
echo $this->form['answer'];
}
// PRIVATE
function formularFeldKorrekt(&$feld) {
// prüfung, ob pflichtfeld vorhanden
if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false;
// wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
if (empty($_POST["{$feld['name']}"])) return true;
// regular expression prüfungen
if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça0-9-z-]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false;
if (!empty($feld['valid']) && $feld['valid'] == 'textmitumbruch' && !eregi("^[ \n\r.,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
// grössenbereich bei integer und float prüfen
if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false;
if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false;
// längenbereich bei allen typen prüfen
if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false;
if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false;
return true;
}
//PUBLIC
function process() {
if (!isset($_POST['sent'])) {
$this->formularAusgabe();
} elseif ($this->formularVollstaendig()) {
$this->success();
} else {
$this->formularAusgabe(true);
}
}
}
if ($edit) {
echo "<h1>Formularkonfiguration</h1>";
echo "<p>Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:</p>";
echo "CMS_HTML[0]";
echo "<p>Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:</p>";
echo "CMS_HTML[1]";
} else {
$formular = new w3form();
$formular->addEmailAdress($_POST['kontaktperson']);
$formular->setEmailSubject("CMS_VALUE[1]");
$formular->setEmailFrom($_POST['kundenemail'],$_POST['kundenname'].", ".$_POST['kundenvorname']); $formular->setBackgroundError("CMS_VALUE[4]");
$formular->setForm("CMS_HTML[0]");
$formular->setAnswer("CMS_HTML[1]");
$formular->process();
}
?>
Code: Alles auswählen
<table style="WIDTH: 100%" width="100%" border="0">
<tr>
<td>Vorname / Nachname:</td>
<td>###name:vorname; type:text; valid:simpletext; size:20; mandatory:true### / ###name:nachname; type:text; valid:simpletext; size:20; mandatory:true###</td>
</tr>
<tr>
<td>Firma:</td>
<td>###name:firma; type:text; valid:text;size:40###</td>
</tr>
<tr>
<TD>Email-Adresse:</TD>
<TD>###name:kundenemail; type:text; valid:email; size:40; mandatory:true###</TD>
</tr>
<tr>
<td class vAlign="top">An:</td>
<td>###name:kontaktperson[0]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
###name:kontaktperson[1]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
###name:kontaktperson[2]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
###name:kontaktperson[3]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
###name:kontaktperson[4]; type:checkbox; valid:text; value:'em@il.de'### Person<br>
###name:kontaktperson[5]; type:checkbox; valid:text; value:'em@il.de'; selected:true### Person</td>
</tr>
<tr>
<td>Betreff:</td>
<td>###name:betreff; type:text; valid:text; rows:6; cols:30###</td>
</tr>
<tr>
<td>Nachricht:</td>
<td>###name:bemerkungen; type:textarea; valid:textmitumbruch; rows:10; cols:40###</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td colSpan="2">
<p align="center"><input type="submit" value="senden"></td>
</tr>
</table>