Seite 1 von 1
w3concepts::form - Fehler nach dem bearbeiten eins Formulare
Verfasst: Di 4. Apr 2006, 10:23
von phpchris
Hi alle zusammen,
ich verwende Contenido 4.6.8 und habe irgendwie Probleme mit dem Bearbeiten von Formularen auf Basis von w3concepts::forms.
Ich brauche nur in einen Artikel gehen, in dem ein solches Fomular ist und muss nur die Headline bearbeiten, dann ist manchmal das ganze Formular weg...
Hat jemand eine Idee?
Verfasst: Di 4. Apr 2006, 12:59
von emergence
hmm verwende ddas modul auch oft und gerne aber diesen fehler hatte ich bis jetzt nicht...
steht vielleicht was im errorlog.txt ?
Verfasst: Di 4. Apr 2006, 17:49
von phpchris
Nein, leider gar nichts.
Der Fehler ist auch total sporadisch...
Verfasst: Fr 7. Apr 2006, 08:30
von phpchris
Hmm... keiner eine Idee?
Also ich brauche nur die headline eines Artikels zu bearbeiten, in dem ein Formular ist, dann ist das gesamte Formular gelöscht.
@emergence: Hast du vielleicht den aktuellen Code des Moduls?
Nicht, dass ich irgendwas verpasst habe und eine alte Version habe oder so.
Verfasst: Fr 7. Apr 2006, 10:36
von emergence
phpchris hat geschrieben:@emergence: Hast du vielleicht den aktuellen Code des Moduls?
aktuell ?
ähm ich hab zwar mehrere versionen im einsatz aber die meisten sind bereits etwas gehackt, so das sie mit dem orginal wenig zu tun haben werden...
ich schau mal...
Verfasst: Fr 7. Apr 2006, 11:11
von phpchris
Danke schonmal...
Verfasst: Fr 7. Apr 2006, 11:15
von emergence
ein ziemlich unveränderte version die ich im einsatz habe
input:
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname : w3concepts.form.v1.1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 20-08-2004
* Modified : 20-04-2005
************************************************/
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">";
echo "<tr><td>Zieladresse (alias@mydomain.com):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[0]\" value=\"CMS_VALUE[0]\" size=\"30\" /></td></tr>";
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>Antwortadresse (alias@mydomain.com):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"30\" /></td></tr>";
echo "<tr><td>Emailname (z.B. Vorname Name):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" 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>";
output:
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : w3concepts.form.v1.1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 20-08-2004
* Modified : 19-04-2005
************************************************/
class w3form {
var $email;
var $processedValues;
var $form;
function w3form() {
$this->form['action'] = "";
}
// PRIVATE
function sendEmail() {
$this->prepareValue($this->suppress('sent', 'button'));
$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 prepareValue($process,$prefix = '') {
foreach ($process as $key => $value) {
if (is_array($value)) {
$this->prepareValue($value,$key." ");
} else {
$this->processedValues["{$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->processedValues) foreach ($this->processedValues 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;
}
// PRIVATE
function formInterpretation(&$formular) {
$felder = split('###',$formular);
for ($i=1;$i<count($felder);$i=$i+2) {
$tempField = trim(html_entity_decode($felder[$i]));
$container = "";
if (preg_match_all('/("[^"]+")/i', $tempField, $matches)) {
$x = 0;
foreach ($matches[0] as $match) {
$x++;
$tempField = str_replace ($match , "###".$x."###", $tempField) ;
$container[$x] = str_replace ('"', "", $match);
}
}
$attributes = split(';',$tempField );
foreach ($attributes as $attribut) {
if ($attribut != "") {
$namewert = split(':',trim($attribut));
if (preg_match('/###(\d)###/i', $namewert[1] , $match)) {
$namewert[1] = $container[$match[1]];
}
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 formOutput($sent = false) {
echo '<form action="'.$this->form['action'].'" method="POST">';
echo '<input type="hidden" name="sent" value="true">';
$formular = $this->form['form'];
$formulardaten = $this->formInterpretation(&$formular);
$formular = split('###',$formular);
foreach ($formular as $formularteil) {
if (!empty($formulardaten["{$formularteil}"])) {
$this->formField($formulardaten["{$formularteil}"],$sent);
} else {
echo $formularteil;
}
}
echo '</form>';
}
// PRIVATE
function formField($attribute,$sent) {
$parameter = "name=\"{$attribute['name']}\"";
$style = $attribute['style'];
if ($sent && !$this->formFieldValidator(&$attribute)) { $style.=" background-color:{$this->form['colorError']};"; echo "*"; }
if ($style != "") $style = 'style="'.$style.'"';
if (!empty($attribute['class'])) { $style = 'class="'.$attribute['class'].'" '.$style; }
switch ($attribute['type']) {
case 'select':
case 'password':
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 formComplete() {
$formular = $this->form['form'];
$felder = $this->formInterpretation(&$formular);
foreach ($felder as $feld) {
if (!$this->formFieldValidator(&$feld)) return false;
}
return true;
}
// PRIVATE
function success() {
$this->sendEmail();
echo $this->form['answer'];
}
// PRIVATE
function formFieldValidator(&$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-z-]*$",$_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'] == 'longtext' && !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 setAction($action) {
$this->form['action'] = $action;
}
// 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;
}
//PUBLIC
function process() {
if (!isset($_POST['sent'])) {
$this->formOutput();
} elseif ($this->formComplete()) {
$this->success();
} else {
$this->formOutput(true);
}
}
}
if ($edit) {
echo "<p><b>Formularkonfiguration</b></p>";
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();
}
?>
Verfasst: Fr 7. Apr 2006, 11:46
von phpchris
Cheers, aber das PRoblem besteht auch damit.
Evtl. ein Firefox-Fehler?
Verfasst: Fr 7. Apr 2006, 11:52
von emergence
phpchris hat geschrieben:Evtl. ein Firefox-Fehler?
ähm keine ahnung ich hatte das phänomen noch nicht...
das blöde daran wie du sagt, ist das es sporadisch auftritt...
wenn das auftritt kannst du beim firefox ja mal schauen ob eín javacript fehler mitprotokolliert wurde...
viele andere tipps hab ich leider nicht...
Verfasst: Fr 7. Apr 2006, 18:12
von phpchris
Ja, da werde ich das nächste Mal dran denken.
Habe das Problem heute nur einmal gehabt.