w3concepts::form - Fehler nach dem bearbeiten eins Formulare

Gesperrt
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

w3concepts::form - Fehler nach dem bearbeiten eins Formulare

Beitrag 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?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

hmm verwende ddas modul auch oft und gerne aber diesen fehler hatte ich bis jetzt nicht...

steht vielleicht was im errorlog.txt ?
*** make your own tools (wishlist :: thx)
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag von phpchris »

Nein, leider gar nichts.


Der Fehler ist auch total sporadisch...
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag 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.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag von phpchris »

Danke schonmal...
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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();
}

?>
*** make your own tools (wishlist :: thx)
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag von phpchris »

Cheers, aber das PRoblem besteht auch damit.
Evtl. ein Firefox-Fehler?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag von phpchris »

Ja, da werde ich das nächste Mal dran denken.
Habe das Problem heute nur einmal gehabt.
Gesperrt