Hörb: Merken von Formularfeldern

Hi,

wie kann ich den aktuell eingetragenen Stand von Formularfeldern "einfrieren"?
Soll heißen, wenn der User einen Fehler macht oder ein Feld vergessen hat, auszufüllen, soll der Rest nicht immer autom. auch verlorengehen?
Wäre schön, wenn es eine recht einfache Lösung gäbe, da meine Formulare, wo ich es einsetzen möchte, sehr viele dieser Formularfelder haben :-(

Grüße

Hörb

  1. hallo
    du schickst dein formular zum überprüfen an $PHP_SELF
    und übergibst einen $GET wert ob die eingaben überprüft werden sollen oder nicht.so hast du alle eingegebenen werte zur verfügung.
    und kannst sie mit value=$POST[wasweißich] ausgeben.

  2. Es kommt drauf an,
    Wie funktioniert Dein Skript?
    Fehlerverarbeitung im eignen Skript?

    dann klappt folgendes:

    <input type="text" size="20" name="name" value="<? echo $name ?>">

    Ich hoffe es Hilft:
    Im Übrigen zu Kontaktformularen gibt es einen Tips und Tricks Artikel:
    http://aktuell.de.selfhtml.org/tippstricks/php/form-mail/index.htm

    Da nachzugraben lohnt sich immer mal wieder.
    Es liegen mitunter wahre Schätze in diesem Self-Bereich.
    Im übrigen, überlege Dir auch mal was zum Thema Sicherheit von Mailformularen.
    Da gibt es einiges was man falsch machen kann.

    Viele Grüße aus Berlin TomIRL

    1. Kleine Ergänzung:
      <input type="text" size="20" name="name" value="<? echo $_POST[name} ?>">

      Ich werte meine Variablen immer vorher mittels foreach ()aus um festzustellen was tatsächlich da ist.
      Deshalb die kleine Ungenauigkeit.

      TomIRL

      1. Hallo,

        <input type="text" size="20" name="name" value="<? echo $_POST[name} ?>">
        Deshalb die kleine Ungenauigkeit.

        äm sollte dass nicht heißen $_POST[name] ?

        Grüße
        Jeena Paradies

        --
        I want to be a woman... from now on I want you all to call me Loretta.
        1. äm sollte dass nicht heißen $_POST[name] ?

          Sollte, alles andere wäre Unfug
          ;-)
          Außerdem war dies der Fehler zum selber finden.

          1. Hello,

            Außerdem war dies der Fehler zum selber finden.

            Hatten wir aber schon im Türchen vom 05.12.2002.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Hello,

              Außerdem war dies der Fehler zum selber finden.

              Hatten wir aber schon im Türchen vom 05.12.2002.

              Sach mal was macht Deine Formularfunktion genau, ist dies nurein zusätzlicher Formmailer?

              Also, ich habe mir Da auch schon was selber geschrieben,, bei mir ist das Problem gewesen, dass ich immer unterschiedlich viele Felder habe, aber trotzdem nicht jedes mal den ganzen Quatsch Auswertung, u.s.w. neu schreiben wollte.

              Deshalb kann ich vielleicht ein bischen Quelltext beisteuern, hast Du mal was zum angucken da?

              TomIRL

              1. Hello,

                Also, ich habe mir Da auch schon was selber geschrieben,, bei mir ist das Problem gewesen, dass ich immer unterschiedlich viele Felder habe, aber trotzdem nicht jedes mal den ganzen Quatsch Auswertung, u.s.w. neu schreiben wollte.

                Datensatzdefinition

                $_rec = array();

                $_rec["cat"]["col"] = 20;
                $_rec["cat"]["row"] = 4;
                $_rec["cat"]["type"] = "alt";

                /*
                $_rec["cat"]["opt"][1] = "Freund";
                $_rec["cat"]["opt"][2] = "Kunde";
                $_rec["cat"]["opt"][3] = "Mitarbeiter";
                $_rec["cat"]["opt"][4] = "Lieferant";
                $_rec["cat"]["opt"][5] = "Behörde";
                */

                $_rec["cat"]["opt"] = "Freund,Kunde,Mitarbeiter,Lieferant,Behörde,Bank";

                $_rec["name"]["col"] = 40;
                $_rec["name"]["max"] = 60;
                $_rec["name"]["type"] = "char";
                $_rec["name"]["text"] = "Name";
                $_rec["name"]["duty"] = "1";

                $_rec["email"]["col"] = 40;
                $_rec["email"]["max"] = 76;
                $_rec["email"]["type"] = "char";
                $_rec["email"]["text"] = "eMailadresse";
                $_rec["email"]["duty"] = "1";

                $_rec["text"]["col"] = 40;
                $_rec["text"]["row"] = 8;
                $_rec["text"]["max"] = 600;
                $_rec["text"]["type"] = "text";
                $_rec["text"]["text"] = "Beitrag";
                $_rec["text"]["duty"] = "1";

                Ich muss nur eine solche Datzensatzdefinition generieren.
                Außerdem gibt es bisher die Formulartypen "Liste" und "Detail"
                Die verfügen je nach User-Rechten über unterschiedliche Button-Funktionen

                Die Datensatzdefinition ist ständig um Werte, Eigenschaften und Methoden erweiterbar. PHP-Arrays machen es möglich.

                Und ausgegeben wird das ganze dann von einer Masterfunktion

                function makeform($desc, $data, $ctrl, $form_id="0")
                {
                   $ret = "\n<form action="".$_SERVER["PHP_SELF"].""\n".
                            "      method="POST" enctype="nultipart/form-data"\n".
                            "      name="F$form_id">\n".
                            "  <input type="hidden" name="formid" value="$form_id">\n";

                $ret .= "  <table>\n";

                foreach ($desc as $key => $val)
                   {
                     $func = "make_type_".$val["type"];
                     if (!function_exists($func))
                     {
                       die("Die Funktion <b>$func</b> fehlt");
                     }
                     else
                     {
                       $input = call_user_func($func,$key,$val,$data[$key]);

                $ret .= "    <tr>\n".
                               "       <td>".htmlentities($val["text"])."</td>".
                               "       <td>$input</td>\n".
                               "    </tr>\n";
                     }
                   }

                $ret .= "  </table>\n";

                $ret .= "  <input type="submit" name="ctrl[save]" value="speichern">\n";

                $ret .= "</form>\n";

                return $ret;
                }

                Hier ein Codeausschnitt aus einer älteren Version für den Typ DETAIL.

                Beim zrückliefern der Post-Daten wird das Subarray $_POST["data"] einfach mit der Satzdefinition abgeglichen. Da kann keiner mehr Fakes produzieren. Und das Subarray $_POST["ctrl"] mit der Funktionsliste des Formulartyps...

                Passiert ja immer das gleiche (_nicht_ dasselbe!)

                Das ist dann eine OOP durch die Hintertür.

                Dank der Funktionen serialize(), clean(), restore(), unserialize() kann man auch gut mit Flatfiles arbeiten. clean entfernt die Zeilenende-Zeichen aus dem Datensatz und restore stellt sie wieder her.

                Die Datensatzdefinition kann man mittels eines Click-Tools erzeugen. Dafür benötige ich unter anderem auch die dynamische Verwaltung von <input...> Elementen. Krieg ich aber einfach nicht hin. Sch.... DHTML.

                Das ganze wird dann so eine Art dBase für HTML/CSS/PHP/MySQL bzw. Flatfiles

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  3. Hallo,

    Soll heißen, wenn der User einen Fehler macht oder ein Feld vergessen hat, auszufüllen, soll der Rest nicht immer autom. auch verlorengehen?

    Du schickst sie ja per post oder get an dein verarbeitendes Script. Das Script schreibst du so, dass wenn ein Fehler kommt noch mal das Formular erscheint. Bei jedem Feld ist ja ein value="<?php echo $daten ?>" möglich. Und so machst du dass so lange bis es keine Fehler mehr gibt.

    Grüße
    Jeena Paradies

    --
    I want to be a woman... from now on I want you all to call me Loretta.
  4. Hello,

    Hi,

    wie kann ich den aktuell eingetragenen Stand von Formularfeldern "einfrieren"?

    <?php

    #...

    $_POST = strip($_POST);  ## entfernt rekursiv alle \ wenn MQ_GPC

    if (isset($_POST["data"]) and is_array($_POST["data"]))
    {
      $_data = $_POST["data"];
    }

    #...

    echo "<input type="text" name="data[name]" value="".$data["name"]."">\n";

    #...

    ?>

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hello,

      #...

      echo "<input type="text" name="data[name]" value="".htmlentities($data["name"])."">\n";

      #...

      ?>

      Sorry, ich schreibe mir dafür gerade eine Gesamtfunktion und muss mich dann gar nicht mehr darum kümmern. Das Script erkennt auch aus einer Dataensatzdefinition heraus, welche Felder es akzeptier, welchen Typ sie haben und welche Position...

      Langsam wird's

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen