Malcolm Beck´s: OOP-Tutorial: Einfaches Formular erstellen

hi,

ich krieg das mit OOP in PHP irgendwie nicht auf die reihe, auf den meisten Tutorialseiten wird was von Autos und Fahrern geschrieben, damit kann ich aber nichts anfangen, ich brauche ein Praktisches Beispiel.

Ich hab ein kleines Formular geschrieben, wer kann mir helfen, dass Script in OOP zu ändern?
Mein Verständnis-Problem beginnt schon bei Klassen, daher bitte langsam und verständlich.

<?php  
  error_reporting(E_ALL);  
  
  // htmlspecialchars abkürzen  
  function h($val) {  
    $val = isset($val) ? htmlspecialchars($val) : '' ;  
   return $val;  
  }  
  // Affenformalität  
  function aForm($PostVal) {  
    $PostVal = isset($_POST[$PostVal]) ? $_POST[$PostVal] : '' ;  
   return $PostVal;  
  }  
  
  // Usereingaben ; Zeichen begrenzen auf vorgegebene min- maximale länge  
  function validieren($name,$min,$max)  
  {  
    $minMaxError = (isset($_POST[$name]) AND !preg_match('/^.{'.$min.','.$max.'}$/', $_POST[$name]))  
                 ? "<p>Eingabe zwischen $min und $max Zeichen</p>"  
                 : '' ;  
    return $minMaxError;  
  }  
  
  // Input type Text zusammenbauen  
  function InputTextForm($name,$min,$max)  
  {  
    $minMaxError = validieren($name,$min,$max);  
  
    // Ausgabe  
    $Form = "$minMaxError<label for='$name'>$name\n"  
          . '<input type="text" name="'.$name.'" id="'.$name.'" value="'.h(aForm($name)).'" />'  
          . "\n</label>\n";  
  
    return $Form;  
  }  
  
?>

<form action="" method="post">

<?php  
     // Input type text ; Name, mindest-länge, maximale-länge  
     echo InputTextForm ('test', 3, 20);  
?>

<input type="submit" value="Abschicken" /></form>

Online Beispiel mit 2 Eingabefeldern

Wahrscheinlich macht es keinen Sinn, so ein kleines Script in OOP zu schreiben, wie gesagt, es geht nur um das Verständnis.

mfg

  1. Hellihello

    Wahrscheinlich macht es keinen Sinn, so ein kleines Script in OOP zu schreiben, wie gesagt, es geht nur um das Verständnis.

    Die Länge ist doch unerheblich. Ich wollte es grad mal anpassen, aber ich denke, bei u.g. kannst Du Dir das vielleicht selbst abschauen. Kommentare fehlen übrigens...;

      
    <?php  
    // todo: outsource to file  
    ob_start()?><modelexample>  
    <name type="text"/>  
    <mailaddy type="text"/>  
    <url type="text"/>  
    <AGB type="checkbox"/>  
    <Wochentage type="radio">  
     <options>Mo,Di,Mi,Do,Fr</options>  
    </Wochentage>  
    <checkies type="checkbox">  
     <options>XML,HTML,PHP,JS</options>  
    </checkies>  
    <Abijahrgang type="select">  
     <options>k.A., 1950 - 2020</options>  
    </Abijahrgang>  
    <kommentar type="textarea"/>  
    </modelexample>  
    <?php  
    $rawModel = ob_get_clean();  
      
    class My  
    {  
     public static function formatNeatly($xml)  
     {  
      $dom = new DOMDocument();  
      $dom->preserveWhiteSpace = false;  
      if (is_object($xml)) {  
       $xml = $xml->asXML();  
      }  
      $dom->loadxml($xml);  
      $dom->formatOutput = true;  
      return $dom->saveXML();  
     }  
    }  
      
    $model = ModelReader::getModel($rawModel);  
      
    // expand model with php-code and csv-options  
      
    class ModelReader  
    {  
     private $_rawModel = NULL;  
     private $_expandedModel = NULL;  
      
     private function __construct($xml) {  
      $this->_rawModel = new SimpleXMLElement($xml);  
      $this->_expandedModel = clone ($this->_rawModel);  
      foreach ($this->_expandedModel as $var) {  
       if ($this->_hasOptions($var)) {  
        $this->_explodeOptions($var);  
       }  
      }  
     }  
      
     private function _hasOptions ($simplexmlElement) {  
      return isset($simplexmlElement->options);  
     }  
      
     private function _explodeOptions ($var) {  
      $optionArray = NULL;  
      $optionKey = 0;  
      if ( strpos($var->options, ",") !== false ) {  
       $optionArray = explode(",",$var->options);  
      } elseif (strpos($option, "-") !== false) {  
       for($i = (int)$intervallArray[0]; $i < (int)$intervallArray[1]; $i++) {  
        $var->option[$optionKey] = $option;  
        $optionKey++;  
       }  
       return true;  
       } else {  
       return false;  
      }  
      unset($var->options);  
      foreach ($optionArray as $option) {  
       if (strpos($option, "-") !== false) {  
        $intervallArray = explode("-", $option);  
        for($i = (int)$intervallArray[0]; $i < (int)$intervallArray[1]; $i++) {  
         $var->option[$optionKey] = $i;  
         $optionKey++;  
        }  
       } else {  
        $var->option[$optionKey] = $option;  
        $optionKey++;  
       }  
      }  
     }  
      
     public function getXML()  
     {  
      return $this->_expandedModel->asXML();  
     }  
      
     public static function getModel($xml)  
     {  
      $modelReader = new self($xml);  
      return new SimpleXMLElement(  
       My::formatNeatly(  
        $modelReader->getXML()  
       )  
      );  
     }  
    }  
      
      
      
    /** 19.11.2008  
     * converts given model to form if given with presets using simplexml functions  
     */  
    class FormCreator  
    {  
     // will be instance of SimpleXMLElement represneting data model  
     private $_model = NULL;  
      
     // will be instance of SimpleXMLElement with root element named "form"  
     public $form = NULL;  
     // count of div elments  
     private $_divKey = -1;  
      
     function __construct(SimpleXMLElement $model = NULL) {  
      $this->form = new SimpleXMLElement("<form/>");  
      $this->form["method"] = "post";  
      $this->form["action"] =  basename(__FILE__);  
     }  
      
     private function _isPreset($name) {  
      return isset($_REQUEST["form"][$name]);  
     }  
      
     private function _getPresetValue($name) {  
      return $_REQUEST["form"][$name];  
     }  
      
     private function _isChecked($name, $value)  
     {  
      if (is_array($_REQUEST["form"][$name]) &&  
       in_array($value , $_REQUEST["form"][$name]) ||  
       $_REQUEST["form"][$name] == $value) {  
       return true;  
      }  
      return false;  
     }  
      
     private function _getNewFormDiv()  
     {  
      $this->_divKey++;  
      $this->form->div[$this->_divKey]["class"] = "label_control_set";  
      return $this->form->div[$this->_divKey];  
     }  
      
     private function _getNewLabelControllSpan($key)  
     {  
      $this->form->div[$this->_divKey]->span[$key]["class"] = "label_control_set";  
      return $this->form->div[$this->_divKey]->span[$key];  
     }  
      
     function textInput($name)  
     {  
      $parentDiv = $this->_getNewFormDiv();  
      $parentDiv->label = $name;  
      $parentDiv->label["class"] = "block";  
      $parentDiv->input["type"] = "text";  
      $parentDiv->input["name"] = "form[".$name."]";  
      $parentDiv->input["value"] = "preset";  
      if($this->_isPreset($name)) {  
       $parentDiv->input["value"] = $this->_getPresetValue($name);  
      }  
     }  
      
     function singleCheckbox($name)  
     {  
      $parentDiv = $this->_getNewFormDiv();  
      $parentDiv->label = $name;  
      $parentDiv->input["type"] = "checkbox";  
      $parentDiv->input["name"] = "form[".$name."]";  
      if($this->_isPreset($name)) {  
       $parentDiv->input["checked"] = "checked";  
      }  
     }  
      
     function optionSet($name, $values, $type = "radio") {  
      $valueKey = 0;  
      $parentDiv = $this->_getNewFormDiv();  
      $parentDiv->label = $name;  
      if ($type == "select") {  
       foreach ($values as $value) {  
        $parentDiv->select["name"] = "form[".$name."]";  
        $parentDiv->select->option[$valueKey] = $value;  
        if ($this->_isPreset($name) && $this->_isChecked($name, $value)) {  
         $parentDiv->select->option[$valueKey]["selected"] = "selected";  
        }  
        $valueKey++;  
      }  
       return true;  
      }  
      foreach ($values as $value) {  
       $parentSpan = $this->_getNewLabelControllSpan($valueKey);  
       $this->_optionElement($parentSpan, $name, $value, $type);  
       $valueKey++;  
      }  
     }  
      
     private function _optionElement($parentSpan, $name, $value, $type)  
     {  
      if ($type == "checkbox") {  
       $arrayBrackets = "[]";  
      }  
      $parentSpan->label = $value;  
      $parentSpan->input["type"] = $type;  
      $parentSpan->input["name"] = "form[".$name."]".$arrayBrackets;  
      $parentSpan->input["value"] = $value;  
      if ($this->_isPreset($name) && $this->_isChecked($name, $value)) {  
       $parentSpan->input["checked"] = "checked";  
      }  
     }  
      
     function textArea($name)  
     {  
      $parentDiv = $this->_getNewFormDiv();  
      $parentDiv->label = $name;  
      $parentDiv->label["class"] = "block";  
      $parentDiv->textarea["name"] = "form[".$name."]";  
      if(trim($this->_getPresetValue($name))) {  
       $parentDiv->textarea = $this->_getPresetValue($name) ;  
      } else {  
       $parentDiv->textarea = " ";  
      }  
     }  
      
     function create($model) {  
      $fc = $this;  
      foreach ($model as $var) {  
      $name = $var->getName();  
       switch ($var["type"]) {  
      case "text":  
       $fc->textInput($name);  
      break;  
      
      case "checkbox":  
       if (!isset($var->option)) {  
        $fc->singleCheckbox($name);  
       }else {  
        $fc->optionSet($name, $var->option, "checkbox");  
       }  
      break;  
      case "select":  
       $fc->optionSet($name, $var->option, "select");  
      break;  
      case "radio":  
       $fc->optionSet($name, $var->option, "radio");  
      break;  
      case "textarea":  
       $fc->textArea($name);  
      break;  
      }  
     }  
      
     }  
      
     function button($value = "submit") {  
      $parentDiv = $this->_getNewFormDiv();  
      if ($value == "reset") {  
       $parentDiv->input["type"] = "reset";  
       return;  
      }  
      $parentDiv->button["value"] = $value;  
      $parentDiv->button["type"] = $value;  
      $parentDiv->button = $value;  
     }  
      
     function formatNeatly()  
     {  
      $dom = new DOMDocument();  
      $dom->preserveWhiteSpace = false;  
      $dom->loadxml($this->form->asXML());  
      $dom->formatOutput = true;  
      return $dom->saveXML();  
     }  
    }  
      
    ///////////////// model:  
      
     $fc = new FormCreator();  
     $fc->create($model);  
      
    function hide() {  
    // two text-inputs  
      
      
      
      
      
    }  
      
     // abschicken wollen wir auch noch  
     $fc->button();  
     // abschicken wollen wir auch noch  
     $fc->button("reset");  
      
      
    ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <html>  
    <head>  
      <meta http-equiv="Content-Type" content="text/html; charset=utf8"/>  
     <title>sxe-form-data</title>  
     <style type="text/css">  
      div, label, input, button {padding:.2em}  
      label.block {display: block; float:left; width:5em;text-align:right}  
      textarea {width:80%; height:20em;}  
     </style>  
    </head>  
    <body>  
      
     <?= $fc->formatNeatly();?>  
     <hr/>  
     <pre>  
     <?//~ = var_dump(get_object_vars($_form))?>  
     </pre>  
     <pre>  
    <?= var_dump($_REQUEST)?>  
      </pre>  
    </body>  
    </html>  
    
    

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. hi,

      Die Länge ist doch unerheblich. Ich wollte es grad mal anpassen, aber ich denke, bei u.g. kannst Du Dir das vielleicht selbst abschauen. Kommentare fehlen übrigens...;

      Danke für das Script, an sich sieht es auch sehr verständlich aus, aber ich bekomme immer ein

      Warning: domdocument::domdocument() expects at least 1 parameter, 0 ... on line 11

      Ich weiss nicht, was ich da machen soll. Ich habe es auf folgende weise probiert:

      <?php  
        
       require_once 'settings.xml'; // in die XML Datei alles rein geschrieben, was vorher an dieser stelle stand  
        
       $rawModel = ob_get_clean();  
      #...
      

      Was meinst du mit

      // todo: outsource to file

      Wo muss das rein und wie binde ich es in das Script ein?

      mfg

      1. Hellihello

        na, es ging ja eher um die Grundlagen. Das XML könnte zB. aus einer Datei via file_get_contents() eingelesen werden. Oder per simplexml_load_file().

        require_once müsste innerhalb des Outputbuffers auch gehen, aber da (s.o. und s.u.) sicher nicht angebracht.

        Schau mal hier ein Versuch mit strikterem MVC:

        
        
        <?php
        /**
         * My static functions for global use
         *
         */
        class My
        {
           /**
             * create nice idented xml string (from simplexml)
             * @param string | object
             */
            public static function formatNeatly($xml)
            {
                $dom = new DOMDocument();
                $dom->preserveWhiteSpace = false;
                if (is_object($xml)) {
                    $xml = $xml->asXML();
                }
                $dom->loadxml($xml);
                $dom->formatOutput = true;
                return $dom->saveXML();
            }
        }
        
        
        /**
         * expand model with php-code and csv-options
         *
         */
        class ModelReader
        {
           /**
             * @var SimpleXMLElement
             */
            private $_rawModel = NULL;
        
           /**
             * @var SimpleXMLElement
             */
            private $_expandedModel = NULL;
        
            /**
             * Constructor
             *
             * instanciate $_rawModel and $_expandedModel
             *
             * @param mixed $xml
             * @return void
             */
            private function __construct($xml) {
                $this->_rawModel = new SimpleXMLElement($xml);
                $this->_expandedModel = clone ($this->_rawModel);
                foreach ($this->_expandedModel as $var) {
                    if ($this->_hasOptions($var)) {
                        $this->_explodeOptions($var);
                    }
                }
            }
        
            /**
             * check if element contains option elemens
             *
             * @param SimpleXMLElement $simplexmlElement
             * @return boolean
             */
            private function _hasOptions ($simplexmlElement) {
                return isset($simplexmlElement->options);
            }
        
            /**
             * blow up options (comma seperated and "-" seperated
             *
             * @param SimpleXMLElement $var
             * @return boolean
             */
            private function _explodeOptions ($var) {
                $optionArray = NULL;
                $optionKey = 0;
                if ( strpos($var->options, ",") !== false ) {
                    $optionArray = explode(",",$var->options);
                } elseif (strpos($option, "-") !== false) {
                    for($i = (int)$intervallArray[0]; $i < (int)$intervallArray[1]; $i++) {
                        $var->option[$optionKey] = $option;
                        $optionKey++;
                    }
                    return true;
                 } else {
                    return false;
                }
                unset($var->options);
                foreach ($optionArray as $option) {
                    if (strpos($option, "-") !== false) {
                        $intervallArray = explode("-", $option);
                        for($i = (int)$intervallArray[0]; $i < (int)$intervallArray[1]; $i++) {
                            $var->option[$optionKey] = $i;
                            $optionKey++;
                        }
                    } else {
                        $var->option[$optionKey] = $option;
                        $optionKey++;
                    }
                }
            }
        
            /**
             * get full model as XML-String
             *
             * @param void
             * @return string
             */
            public function getXML()
            {
                return $this->_expandedModel->asXML();
            }
        
            /**
             * get model definition
             *
             * @param mixed $xml
             * @return void
             */
            public static function getModel($xml)
            {
                if (is_string($xml) && file_exists($xml)) {
                    $xml = file_get_contents("ModelModel.xml");
                }
                $modelReader = new self($xml);
                return new SimpleXMLElement(
                    My::formatNeatly(
                        $modelReader->getXML()
                    )
                );
            }
        }
        
        
        
        /** 19.11.2008
         * converts given model to form if given with presets using simplexml functions
         */
        class FormCreator
        {
            // will be instance of SimpleXMLElement representing data model
            private $_model = NULL;
            private $_divKey = NULL;
        
            // will be instance of SimpleXMLElement with root element named "form"
            public $form = NULL;
            // count of div elments
        
            function __construct(SimpleXMLElement $model = NULL) {
                $this->form = new SimpleXMLElement("<form/>");
                $this->form["method"] = "post";
                $this->form["action"] =  basename(__FILE__);
                if (NULL !== $model) {
                    $this->create($model);
                }
                // abschicken wollen wir auch noch
                 $this->button();
                // abschicken wollen wir auch noch
                $this->button("reset");
            }
        
            private function _isPreset($name) {
                return isset($_REQUEST["form"][$name]);
            }
        
            private function _getPresetValue($name) {
                return $_REQUEST["form"][$name];
            }
        
            private function _isChecked($name, $value)
            {
                if (is_array($_REQUEST["form"][$name]) &&
                    in_array($value , $_REQUEST["form"][$name]) ||
                    $_REQUEST["form"][$name] == $value) {
                    return true;
                }
                return false;
            }
        
            private function _setDivKey()
            {
                if (NULL === $this->_divKey) {
                    $this->_divKey= 0;
                } else {
                    $this->_divKey++;
                }
            }
        
            private function _getNewFormDiv()
            {
                $this->_setDivKey();
                $this->form->div[$this->_divKey]["class"] = "label_control_set";
                return $this->form->div[$this->_divKey];
            }
        
            private function _getNewLabelControllSpan($key)
            {
                $this->form->div[$this->_divKey]->span[$key]["class"] = "label_control_set";
                return $this->form->div[$this->_divKey]->span[$key];
            }
        
            function textInput($name)
            {
                $parentDiv = $this->_getNewFormDiv();
                $parentDiv->label = $name;
                $parentDiv->label["class"] = "block";
                $parentDiv->input["type"] = "text";
                $parentDiv->input["name"] = "form[".$name."]";
                $parentDiv->input["value"] = "preset";
                if($this->_isPreset($name)) {
                    $parentDiv->input["value"] = $this->_getPresetValue($name);
                }
            }
        
            function singleCheckbox($name)
            {
                $parentDiv = $this->_getNewFormDiv();
                $parentDiv->label = $name;
                $parentDiv->label["class"] = "block";
                $parentDiv->input["type"] = "checkbox";
                $parentDiv->input["name"] = "form[".$name."]";
                if($this->_isPreset($name)) {
                    $parentDiv->input["checked"] = "checked";
                }
            }
        
            function optionSet($name, $values, $type = "radio") {
                $valueKey = 0;
                $parentDiv = $this->_getNewFormDiv();
                $parentDiv->label = $name;
                $parentDiv->label["class"] = "block";
                if ($type == "select") {
                    foreach ($values as $value) {
                        $parentDiv->select["name"] = "form[".$name."]";
                        $parentDiv->select->option[$valueKey] = $value;
                        if ($this->_isPreset($name) && $this->_isChecked($name, $value)) {
                            $parentDiv->select->option[$valueKey]["selected"] = "selected";
                        }
                        $valueKey++;
                }
                    return true;
                }
                foreach ($values as $value) {
                    $parentSpan = $this->_getNewLabelControllSpan($valueKey);
                    $this->_optionElement($parentSpan, $name, $value, $type);
                    $valueKey++;
                }
            }
        
            private function _optionElement($parentSpan, $name, $value, $type)
            {
                if ($type == "checkbox") {
                    $arrayBrackets = "[]";
                }
                $parentSpan->label = $value;
                $parentSpan->input["type"] = $type;
                $parentSpan->input["name"] = "form[".$name."]".$arrayBrackets;
                $parentSpan->input["value"] = $value;
                if ($this->_isPreset($name) && $this->_isChecked($name, $value)) {
                    $parentSpan->input["checked"] = "checked";
                }
            }
        
            function textArea($name)
            {
                $parentDiv = $this->_getNewFormDiv();
                $parentDiv->label = $name;
                $parentDiv->label["class"] = "block";
                $parentDiv->textarea["name"] = "form[".$name."]";
                if(trim($this->_getPresetValue($name))) {
                    $parentDiv->textarea = $this->_getPresetValue($name) ;
                } else {
                    $parentDiv->textarea = " ";
                }
            }
        
            function create($model) {
                $fc = $this;
                foreach ($model as $var) {
                $name = $var->getName();
                switch ($var["type"]) {
                case "text":
                    $fc->textInput($name);
                break;
        
                case "checkbox":
                    if (!isset($var->option)) {
                        $fc->singleCheckbox($name);
                    }else {
                        $fc->optionSet($name, $var->option, "checkbox");
                    }
                break;
                case "select":
                    $fc->optionSet($name, $var->option, "select");
                break;
                case "radio":
                    $fc->optionSet($name, $var->option, "radio");
                break;
                case "textarea":
                    $fc->textArea($name);
                break;
                }
            }
        
            }
        
            function button($value = "submit") {
                $parentDiv = $this->_getNewFormDiv();
                if ($value == "reset") {
                    $parentDiv->input["type"] = "reset";
                    return;
                }
                $parentDiv->button["value"] = $value;
                $parentDiv->button["type"] = $value;
                $parentDiv->button = $value;
            }
        
            function getForm()
            {
                return $this->form->asXML();
            }
        
            function formatNeatly()
            {
                $dom = new DOMDocument();
                $dom->preserveWhiteSpace = false;
                $dom->loadxml($this->form->asXML());
                $dom->formatOutput = true;
                return $dom->saveXML();
            }
        }
        
        class Model
        {
            private $_model = NULL;
        
            function __construct($modelFileName)
            {
                $this->_model = ModelReader::getModel($modelFileName);
            }
        
            public function getForm()
            {
                return new FormCreator($this->_model);
            }
        }
        
        class View
        {
            function __construct($params)
            {
                include ("doctemplate.inc.php");
            }
        }
        
        class Controll
        {
            private $_modelPath = "";
            public function __construct()
            {
               $this->_modelPath = "ModelModel.xml";
                $model = new Model("ModelModel.xml");
                $form = $model->getForm();
                new View(array("form"=>$form));
            }
        }
        
        new Controll();
        
        
        

        Bzw. http://html-ag.wvs-berlin.de/selfhtml/downloads/Model_SELFHTML.zip

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. hi,

          na, es ging ja eher um die Grundlagen. Das XML könnte zB. aus einer Datei via file_get_contents() eingelesen werden. Oder per simplexml_load_file().

          Was hat es denn mit diesem

          domdocument::domdocument()

          auf sich? ich bekomme immer noch die Meldung

          Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in E:\***\index.php on line 118

          Fatal error: Call to undefined method domdocument::loadxml() in E:\***\index.php on line 120

          Ich teste mit der „Kopie von FormCreator.php“.

          mfg

          1. Hellihello

            die Kopie, ich habs jetzt nicht im Blick. Warum die Kopie? Hab ich das falsche rausgeworfen.

            domdocument::domdocument()

            das ist wohl der Konstructor von new DOMDocument() der einen Paratemeter erwartet.

            Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in E:\***\index.php on line 118

            Offenbar der Parameter nicht gesetzt oder war leer.

            Fatal error: Call to undefined method domdocument::loadxml() in E:\***\index.php on line 120

            Mh, hat er vielleicht dann ->loadxml() nicht, weil er DOMDocument nicht konstruieren konnte? An der PHP-Version wirds wohl nicht liegen, oder.

            Immerhin solltest Du nicht die Kopie nehmen.

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
          2. Hellihello

            Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in E:\***\index.php on line 118

            Wieso index.php?

            Ordner "Model_SELFHTML" entpacken und so wie er ist irgendwo hinstellen, wo php läuft.

            dann "localhost/da_wo_er_steht/Model_SELFHTML/FormCreator.php" und das wars...;

            http://html-ag.wvs-berlin.de/selfhtml/tests/Model_SELFHTML/FormCreator.php

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. hi,

              Ordner "Model_SELFHTML" entpacken und so wie er ist irgendwo hinstellen, wo php läuft.

              dann "localhost/da_wo_er_steht/Model_SELFHTML/FormCreator.php" und das wars...;

              Irgendwas läuft bei mir gehörig schief.

              phpversion();  --  5.2.6

              Hab 's jetzt so wie du gesagt hast gemacht, immer noch die gleiche Fehlermeldung.

              -------------------------------------------------------------------------

              Das liegt wohl an meinem Lokalen Apache, Online funktioniert es (ich verlinke es nicht, da die POST-variablen unbehandelt ins HTML eingefügt werden).

              Woran kann das liegen?

              XAMPP für Windows Version 1.6.7
              Win XP SP 2

              mfg

              1. Hellihello

                Das liegt wohl an meinem Lokalen Apache, Online funktioniert es (ich verlinke es nicht, da die POST-variablen unbehandelt ins HTML eingefügt werden).

                Woran kann das liegen?

                XAMPP für Windows Version 1.6.7
                Win XP SP 2

                woher kommt denn die "index.php"? Die gibt es doch garnicht.  Vielleicht stimmt ja infolge dessen was mit den relativen Pfaden nciht.

                So wie ich das sehe, setzt simpleXML übrigens htmlentities automatisch.

                versuch mal <?php echo time();?> in eins der Felder zu setzen. Als value kommt dann "&gt;" etc.pp.

                Dank und Gruß,

                frankx

                --
                tryin to multitain  - Globus = Planet != Welt
                1. hi,

                  woher kommt denn die "index.php"? Die gibt es doch garnicht.  Vielleicht stimmt ja infolge dessen was mit den relativen Pfaden nciht.

                  Ich hatte das so gemacht, habe ich inzwischen wieder geändert und so belassen, wie im Zip-Archiv, immer noch die selbe Fehlermeldung.

                  Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in E:\xampp\anonymous\datatest\Model_SELFHTML\FormCreator.php on line 14

                  So wie ich das sehe, setzt simpleXML übrigens htmlentities automatisch.
                  versuch mal <?php echo time();?> in eins der Felder zu setzen. Als value kommt dann "&gt;" etc.pp.

                  Ja, stimmt. Sorry, ich hatte das

                  <?= var_dump($_REQUEST)?>

                  übersehen, dass schreibt die Post-Variablen unbehandelt in die Seite. Habe ich erstmal entfernt, Online.

                  Das Online-Beispiel habe ich einfach so wie ich es Lokal habe hochgeladen, Online Funktioniert es, nur Lokal eben nicht.

                  mfg

                  1. Hellihello

                    Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in E:\xampp\anonymous\datatest\Model_SELFHTML\FormCreator.php on line 14

                    $dom = new DOMDocument();

                    Deine PHP-Version local möchte da gerne was haben. Lokal wirklich 5.2? Schreib doch mal "1.0" in die Klammer, vielleicht hilft das ja.

                    Wenn der kein DomDocument da erzeugt, funktioniert ja auch die Filterung durch format::Neatly nicht, und dann gibs auch kein output, oder?

                    Dank und Gruß,

                    frankx

                    --
                    tryin to multitain  - Globus = Planet != Welt
                    1. hi,

                      Deine PHP-Version local möchte da gerne was haben. Lokal wirklich 5.2?

                      Ja, die xampp-eigene Startseite sagt:

                      XAMPP
                      [PHP: 5.2.6]

                      Die abfrage im betreffenden Verzeichnis durch echo phpversion(); ergibt das gleiche.

                      Schreib doch mal "1.0" in die Klammer, vielleicht hilft das ja.

                      Nicht wirklich, jetzt kommt Fehler

                      Warning: domdocument::domdocument() [domdocument.domdocument]: Entity: line 1: parser error : Start tag expected, '<' not found in E:...\Model_SELFHTML\FormCreator.php on line 14

                      Warning: domdocument::domdocument() [domdocument.domdocument]: 1 in E:...\Model_SELFHTML\FormCreator.php on line 14

                      Warning: domdocument::domdocument() [domdocument.domdocument]: ^ in E:...\Model_SELFHTML\FormCreator.php on line 14

                      Wenn der kein DomDocument da erzeugt, funktioniert ja auch die Filterung durch format::Neatly nicht, und dann gibs auch kein output, oder?

                      Eben, bis auf die Fehlermeldungen bekomme ich nichts ausgegeben. Wie hast du deine Lokale Maschine konfiguriert? Vielleicht fehlt mir ja ein Modul oder irgendeine Einstellung.

                      mfg

                      1. Hellihello

                        Warning: domdocument::domdocument() [domdocument.domdocument]: Entity: line 1: parser error : Start tag expected, '<' not found in E:...\Model_SELFHTML\FormCreator.php on line 14

                        Dann will er ein Element? <?xml version="1.0"?></wurzel> ?

                        Oder nur <wurzel/>.

                        Aber dann hängt da ja noch nen Element vor.

                        Warning: domdocument::domdocument() [domdocument.domdocument]: 1 in E:...\Model_SELFHTML\FormCreator.php on line 14

                        Warning: domdocument::domdocument() [domdocument.domdocument]: ^ in E:...\Model_SELFHTML\FormCreator.php on line 14

                        Wenn der kein DomDocument da erzeugt, funktioniert ja auch die Filterung durch format::Neatly nicht, und dann gibs auch kein output, oder?

                        Eben, bis auf die Fehlermeldungen bekomme ich nichts ausgegeben. Wie hast du deine Lokale Maschine konfiguriert? Vielleicht fehlt mir ja ein Modul oder irgendeine Einstellung.

                        Google fragen:

                        Problem :
                        Warning: domdocument::domdocument() [domdocument.domdocument]: Entity: line 1: parser error : Start tag expected, '<' not found in C:\xampp\htdocs\xyz.php on line 8.

                        solution :
                        php_domxml.dll extension has to be commented in the php.ini file under apache/bin.(or
                        whatever php.ini file is loaded for you, find out through phpinfo()).

                        Dank und Gruß,

                        frankx

                        --
                        tryin to multitain  - Globus = Planet != Welt
                        1. hi,

                          Problem :
                          Warning: domdocument::domdocument() [domdocument.domdocument]: Entity: line 1: parser error : Start tag expected, '<' not found in C:\xampp\htdocs\xyz.php on line 8.

                          solution :
                          php_domxml.dll extension has to be commented in the php.ini file under apache/bin.(or
                          whatever php.ini file is loaded for you, find out through phpinfo()).

                          Das war es, ich frag mich nur, hattest du schwierigkeiten mit dem Script?
                          Das scheint ja eine Grundeinstellung im Apache zu sein, ich hatte da jedenfalls nichts verstellt.

                          Wie dem auch sei, Danke für das Script, ich werde mich da mal versuchen, durchzukämpfen.

                          mfg

                          1. Hellihello

                            Das war es, ich frag mich nur, hattest du schwierigkeiten mit dem Script?

                            Nein, das hab ich wohl vor einiger Zeit schon geändert.

                            Das scheint ja eine Grundeinstellung im Apache zu sein, ich hatte da jedenfalls nichts verstellt.

                            Musst du u.U. einschalten eben.

                            Wie dem auch sei, Danke für das Script, ich werde mich da mal versuchen, durchzukämpfen.

                            Naja, eher als Anhaltspunkt dafür, wie ich mich versuche, diesem Thema zu nähern. Aber s.a. die Diskussion mit Daniel Thoma und auch dedlfix. Da gibts ja einige, die mehr wissen/können. Wie auch immer man das zend-framework sehen mag, es ist mit Sicherheit guter Anschauungsunterricht. Aber nicht einfach, wie ich finde.

                            Dank und Gruß,

                            frankx

                            --
                            tryin to multitain  - Globus = Planet != Welt
                            1. hi,

                              Das scheint ja eine Grundeinstellung im Apache zu sein, ich hatte da jedenfalls nichts verstellt.
                              Musst du u.U. einschalten eben.

                              Nein, ich musste es entkommentieren, es war default eingeschaltet.

                              Naja, eher als Anhaltspunkt dafür, wie ich mich versuche, diesem Thema zu nähern.

                              Darum geht es mir auch. Formularverarbeitung kann ich noch ganz gut nachvollziehen.

                              Aber s.a. die Diskussion mit Daniel Thoma und auch dedlfix. Da gibts ja einige, die mehr wissen/können.

                              Da lese ich auch mit, aber, umso tiefer die Diskussion geht, desto weniger verstehe ich ;)
                              Aber macht nix, ich hab Zeit es zu lernen. Und ich könnte mir während der Arbeit hier auch nichts besseres vorstellen[1] ;)

                              mfg
                              [1] mein Job ist schon ziemlich langweilig, nur sitzen und warten, bisschen Quatschen und warten usw.

  2. echo $begrüßung;

    Wahrscheinlich macht es keinen Sinn, so ein kleines Script in OOP zu schreiben, wie gesagt, es geht nur um das Verständnis.

    Etwas übertrieben ist es schon, besonders, wenn man nur dieses einfache Beispiel betrachtet. Geht man davon aus, eine wiederverwendbare Bibliothek zu erstellen, wird das Ganze schon sinnvoller.

    Vorab jedoch etwas anderes:

    // htmlspecialchars abkürzen
      function h($val) {
        $val = isset($val) ? htmlspecialchars($val) : '' ;
       return $val;
      }

    So ist das nicht sinnvoll. Um innerhalb einer Funktion eine Variable auf Vorhandensein zu testen, muss man diese per Referenz übergeben. Ansonsten ergibt es bereits beim Funktionsaufruf einen E_NOTICE-Meldung. Wenn man die Referenz übergibt, darf man der Variablen innerhalb der Funktion nichts zuweisen, wenn der Originalwert außerhalb der Funktion erhalten bleiben soll. Und das ist in dem Fall auch gar nicht notwendig. So wäre es richtig:

    function h(&$val) {  
      return isset($val) ? htmlspecialchars($val) : '' ;  
    }
    

    ich krieg das mit OOP in PHP irgendwie nicht auf die reihe, auf den meisten Tutorialseiten wird was von Autos und Fahrern geschrieben, damit kann ich aber nichts anfangen, ich brauche ein Praktisches Beispiel.

    Man könnte anfangen, ein HTML-Dokument oder ein Fragment davon (ein Formular, eine Tabelle) mit Objekten zusammenzusetzen. Dazu benötigt man ein abstraktes Element, das schonmal alle grundlegenden Eigenschaften und Fähigkeiten eines HTML-Elements mitbringt, als da unter anderen wären: Name, Attribute, Liste der erlaubten Attribute, Kindelemente, Liste der erlaubten Kindelemente, Suche nach Kindelementen, Rendern (inklusive der Kindelemente).

    Davon abgeleitet werden dann Klassen für die im Standard definierten HTML-Elemente erstellt. Weiterhin können spezialisierte Gebilde wie Formulare (komlette, nicht nur <form>-Element und Kinder - also mit Datenhandling) oder Datentabellen abgeleitet werden.

    Und damit bekommt man schonmal eine große HTML-Elemente-Library, die locker den Rahmen einer Forumsantwort sprengt, aber nur als ein vom eigentlichen Projekt verwendeter Baustein fungiert.

    Wenn du erst dabei bist, die OOP zu erlernen, ist die HTML-Lib Overkill. Du könntest anfangen, indem du zunächst die einzelnen Elemente deiner Anwendung ermittelst. Suche die Einheiten, die funktional und nach Daten klar separiert werden können, also eigenständig leben können. Die kannst du dann in Code gießen, wobei dann jeweils eine Klasse rauskommt. Mitunter erkennt man, dass es ähnliche Elemente gibt, die viele Gemeinsamkeiten haben, aber auch deutliche Unterschiede. Dann kann man eine abstrakte Klassen mit den Gemeinsamkeiten erstellen und spezialisierte ableiten für die Unterschiede.

    echo "$verabschiedung $name";

    1. hi,

      Geht man davon aus, eine wiederverwendbare Bibliothek zu erstellen, wird das Ganze schon sinnvoller.

      Das war auch so gedacht, nur muss ich OOP ja erstmal verstehen, daher wollte ich ganz klein anfangen.
      Es gibt auch kein vernünftiges Tutorial, wo eben so ein „Formmailer in OOP“ erklärt wird.
      Ich hab gerade bei der suche Swift entdeckt und hatte mich schon gefreut -- ein in OOP geschriebenes Formular -- Pustekuchen, das Formular hat mehr Dateien im Rucksack als ich auf 3 kompletten Internetseiten zusammengezählt ;)

      function h($val) {
          $val = isset($val) ? htmlspecialchars($val) : '' ;
         return $val;
        }

      Ansonsten ergibt es bereits beim Funktionsaufruf einen E_NOTICE-Meldung.

      Bei mir kommt keine Meldung, error_reporting und display_error sind an.
      Leider ist die Archiv-suche derzeit nicht verfügbar, daher konnte ich den Thread, wo du die beispiele gepostet hattest nicht finden. Aber ich wusste, dass ich es falsch habe.

      function h(&$val) {

      return isset($val) ? htmlspecialchars($val) : '' ;
      }

        
      Danke für die Korrektur.  
        
        
      
      > Man könnte anfangen, ein HTML-Dokument oder ein Fragment davon (ein Formular, eine Tabelle) mit Objekten zusammenzusetzen.  
        
      Jetzt habe ich auch endlich ein Tutorial gefunden, das nachvollziehbar ist, eben mit HTML, [/object-oriented-php/](http://www.sitepoint.com/print/object-oriented-php/).  
        
      
      > Suche die Einheiten, die funktional und nach Daten klar separiert werden können, also eigenständig leben können. Die kannst du dann in Code gießen, wobei dann jeweils eine Klasse rauskommt. Mitunter erkennt man, dass es ähnliche Elemente gibt, die viele Gemeinsamkeiten haben, aber auch deutliche Unterschiede.  
        
      Das werde ich jetzt in Angriff nehmen. Mal sehen, was ich von dem verlinkten Tutorial umsetzen kann.  
        
      Danke für die Hilfe.  
        
      mfg
      
      -- 
      [I Have a Dream](http://www.myvideo.de/watch/2503116/I_have_a_dream_Will_I_AM_feat_Common)  
      
      
      1. [latex]Mae  govannen![/latex]

        Jetzt habe ich auch endlich ein Tutorial gefunden, das nachvollziehbar ist, eben mit HTML, /object-oriented-php/.

        Mit dem Thema OOP wollte ich mich eigentlich auch schon länger befassen, aber irgendwie packe ich es nie *schulterzuck* :(

        Ich habe gefunden:
        http://professionelle-softwareentwicklung-mit-php5.de/index.html

        Von mir leider immer noch ungelesen, daher kann ich nicht sagen, ob es etwas taugt und/oder verständlich ist. Vielleicht kannste ja irgendwas davon brauchen, ansonsten weg damit ;)

        Cü,

        Kai

        --
        Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
        selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
        Mein Selfhtml-Kram
        1. hi,

          Mit dem Thema OOP wollte ich mich eigentlich auch schon länger befassen, aber irgendwie packe ich es nie *schulterzuck* :(

          Dieses OOP hat es in sich. Ich hab einige Tutorial bestimmt schon 10 mal gelesen und bin noch so schlau wie vorher.

          Ich habe gefunden:
          http://professionelle-softwareentwicklung-mit-php5.de/index.html

          Oo, Ich hab Gestern schon angefangen, dieses Tutorial zu lesen und gebookmarked ; und heute wieder vergessen, Danke für den Hinweis.

          Von mir leider immer noch ungelesen, daher kann ich nicht sagen, ob es etwas taugt und/oder verständlich ist. Vielleicht kannste ja irgendwas davon brauchen, ansonsten weg damit ;)

          Ich hatte mich bis zum ersten Kapitel durchgeschlagen und dort auch ein Paar Beispiele angesehen, sieht gut aus, jedenfalls eine hilfreiche Seite.

          mfg

      2. echo $begrüßung;

        [...] nur muss ich OOP ja erstmal verstehen, daher wollte ich ganz klein anfangen.

        Möglicherweise ist es sinnvoller, kein vorhandenes Beispiel umschreiben zu wollen, sondern sich anhand der Grundlagen mit der OOP im Allgemeinen vertraut zu machen. Wenn man ein Gefühl für OOP bekommen hat, wird man sich auch leichter tun, Einsatzgebiete zu erkennen.

        Es gibt auch kein vernünftiges Tutorial, wo eben so ein „Formmailer in OOP“ erklärt wird.

        Kleine Wald- und Wiesenscripte muss man nicht unbedingt völlig objektorientiert entwickeln. Man kann unter PHP sehr gut prozeduralen Code mit OO-Code mischen. Beispielsweise hat man sein Datenbankhandling in einer Klasse gekapselt und den Rest des Abfragescripts prozedural. Nicht immer hat man Vorteile beim allumfassenden Einsatz von OOP, besonders dann nicht, wenn die OOP mehr oder weniger nur eine Zugabe zum System ist.

        Ich hab gerade bei der suche Swift entdeckt und hatte mich schon gefreut -- ein in OOP geschriebenes Formular -- Pustekuchen, das Formular hat mehr Dateien im Rucksack als ich auf 3 kompletten Internetseiten zusammengezählt ;)

        Ein kurzer Blick lässt mich vermuten, dass das eine eierlegende Wollmilchsau sein soll. Sowas ist natürlich deutlich komplexer als ein Regenwurm.

        function h($val) {
            $val = isset($val) ? htmlspecialchars($val) : '' ;
           return $val;
          }
        Ansonsten ergibt es bereits beim Funktionsaufruf einen E_NOTICE-Meldung.
        Bei mir kommt keine Meldung, error_reporting und display_error sind an.

        Wenn du eine nicht vorhandene Variable zu übergeben versuchst, gibt es eine E_NOTICE. Wenn das bei dir nicht auftritt, dann ist das gut, denn dann hast du vermutlich alle verwendeten Variablen ordentlich initialisiert.

        Jetzt habe ich auch endlich ein Tutorial gefunden, das nachvollziehbar ist, eben mit HTML, /object-oriented-php/.

        Der Anfang liest sich gut. H. Fuecks (und auch der S. Bergmann) sind in der PHP-Szene bekannte Personen und qualitativ am oberen Ende der Skala angesiedelt.

        echo "$verabschiedung $name";

        1. hi,

          Möglicherweise ist es sinnvoller, kein vorhandenes Beispiel umschreiben zu wollen, sondern sich anhand der Grundlagen mit der OOP im Allgemeinen vertraut zu machen.

          Das stimmt, OOP ist doch komplexer als ich anfangs noch angenommen hatte.

          Beispielsweise hat man sein Datenbankhandling in einer Klasse gekapselt und den Rest des Abfragescripts prozedural.

          Das ist mit mysqli ja schon grösstenteils gegeben, wenn ich das richtig verstehe.

          function h($val) {
              $val = isset($val) ? htmlspecialchars($val) : '' ;
             return $val;
            }

          Wenn du eine nicht vorhandene Variable zu übergeben versuchst, gibt es eine E_NOTICE. Wenn das bei dir nicht auftritt, dann ist das gut, denn dann hast du vermutlich alle verwendeten Variablen ordentlich initialisiert.

          Liegt das nicht am „isset“? Mein Komplettes Script sieht wie folgt aus:

          <?php  
            error_reporting(E_ALL);  
            
            // htmlspecialchars abkuerzen  
            function h($val) {  
             return isset($val) ? htmlspecialchars($val) : '' ;  
            }  
            // Affenformalität  
            function aForm($PostVal) {  
             return isset($_POST[$PostVal]) ? $_POST[$PostVal] : '' ;  
            }  
            // Usereingaben ; Zeichen begrenzen auf vorgegebene min- maximale länge  
            function validminmax($name,$min,$max)  
            {  
              return (isset($_POST[$name]) AND !preg_match('/^.{'.$min.','.$max.'}$/', $_POST[$name]))  
                     ? "<p>Eingabe zwischen $min und $max Zeichen</p>"  
                     : '' ;  
            }  
            
            // Input type Text zusammenbauen  
            function InputTextForm($name,$min,$max,$errormsg)  
            {  
              $minMaxError = validminmax($name,$min,$max);  
              // Ausgabe  
              return "$minMaxError<label for='$name'>$name\n"  
                     . '<input type="text" name="'.$name.'" id="'.$name.'" value="'.h(aForm($name)).'" />'  
                     . "\n</label>\n";  
            }  
            
               // Input type text ; Name, mindest-länge, maximale-länge  
               echo InputTextForm ('test', 3, 20, 'zu Kurz');  
          
          

          Ich habe jedenfalls festgestellt, dass ich so einen einfachen Formmailer doch sehr Kompakt schreiben kann ; mein letzter versuch schoss mit über 600 Zeilen Code ziemlich übers Ziel hinaus.

          mfg

          1. echo $begrüßung;

            function h($val) {
                $val = isset($val) ? htmlspecialchars($val) : '' ;
               return $val;
              }
            Wenn du eine nicht vorhandene Variable zu übergeben versuchst, gibt es eine E_NOTICE. Wenn das bei dir nicht auftritt, dann ist das gut, denn dann hast du vermutlich alle verwendeten Variablen ordentlich initialisiert.
            Liegt das nicht am „isset“? Mein Komplettes Script sieht wie folgt aus:

            Das isset() kommt erst später zum Zug. Übergibt man ein nichtexistentes $foo, erfolgt zunächst eine Übergabe an $val, wofür eine Kopie erstellt werden muss und damit ein Lesezugriff stattfindet. Dieser wird mit E_NOTICE quittiert. Bei einer Übergabe per Referenz muss die Variable nicht vorhanden sein. Das isset() arbeitet in beiden Fällen wie erwartet. Wenn das nicht vorhandene $foo nach $val kopiert wird, ist der Inhalt von $val null, was zwar von isset() ebenfalls als "nicht existent" angesehen wird, jedoch im Prinzip nicht ganz richtig ist.

            echo "$verabschiedung $name";

            1. Hellihello

              Wenn das nicht vorhandene $foo nach $val kopiert wird, ist der Inhalt von $val null, was zwar von isset() ebenfalls als "nicht existent" angesehen wird, jedoch im Prinzip nicht ganz richtig ist.

              "is set" wäre doch "ist gesetzt", oder?

              Dank und Gruß,

              frankx

              --
              tryin to multitain  - Globus = Planet != Welt
              1. echo $begrüßung;

                Wenn das nicht vorhandene $foo nach $val kopiert wird, ist der Inhalt von $val null, was zwar von isset() ebenfalls als "nicht existent" angesehen wird, jedoch im Prinzip nicht ganz richtig ist.
                "is set" wäre doch "ist gesetzt", oder?

                Für eine Variable mit dem Inhalt null ergibt isset() false.

                var_dump(isset($foo));  
                var_dump($foo);  
                  
                $bar = $foo;  
                var_dump(isset($bar));  
                var_dump($bar);  
                  
                $qux = null;  
                var_dump(isset($qux));  
                var_dump($qux);
                

                Ergebnis:
                bool(false)                           - Variable $foo existiert nicht
                Notice:  Undefined variable: foo in … - Lesezugriff ergibt Notice
                NULL                                  - und als Ergebnis null

                Notice:  Undefined variable: foo in … - Kopieren der nichtexistenten $foo ergibt Notice
                bool(false)                           - isset() auf $bar ergibt false
                NULL                                  - $bar ist vorhanden, es gab keine Notice

                bool(false)                           - definierte Zuweisung von null an $qux, sie ist also da
                NULL                                  - Variable existiert, keine Notice beim Zugriff

                Fazit: Vorhandene Variablen ergeben mit isset() kein true, wenn sie NULL enthalten. Sie sind aber in PHPs interner Variablentabelle eingetragen.

                Für die meisten Wald- und Wiesen-Anwendungen ist das nicht relevant, da sie auf Inhalte von EGPCS testen, da kommt null nicht vor.

                echo "$verabschiedung $name";

    2. hi,

      function h(&$val) {

      return isset($val) ? htmlspecialchars($val) : '' ;
      }

        
      Das geht ja mit allen Funktionen, die ich im Einsatz habe.  
        
      ~~~php
        // htmlspecialchars abkuerzen  
        function h(&$val) {  
         return isset($val) ? htmlspecialchars($val) : '' ;  
        }  
        // Affenformalität  
        function aForm($PostVal) {  
         return isset($_POST[$PostVal]) ? $_POST[$PostVal] : '' ;  
        }  
        // Usereingaben ; Zeichen begrenzen auf vorgegebene min- maximale länge  
        function validieren($name,$min,$max)  
        {  
          return (isset($_POST[$name]) AND !preg_match('/^.{'.$min.','.$max.'}$/', $_POST[$name]))  
                 ? "<p>Eingabe zwischen $min und $max Zeichen</p>"  
                 : '' ;  
        }  
        
        // Input type Text zusammenbauen  
        function InputTextForm($name,$min,$max,$errormsg)  
        {  
          $minMaxError = validieren($name,$min,$max);  
          // Ausgabe  
          return "$minMaxError<label for='$name'>$name\n"  
                 . '<input type="text" name="'.$name.'" id="'.$name.'" value="'.h(aForm($name)).'" />'  
                 . "\n</label>\n";  
        }
      

      Ich hab noch einen langen Weg vor mir, bis ich dass alles nur Ansatzweise verstehe.

      mfg