Onkel Schnitzel: Von einem Formular in ein anderes und wieder zurück

Nabend,

nochmal ich mit meinem CMS-Versuch :-)  Ich fange am besten mal von vorne an. Ich habe jetzt ein Formular "maske.php" mit diversen Feldern, unter anderem auch ein Textfeld, in dem man einen Link aus dem Bilderverzeichnis der Homepage eingeben kann, um eventuell ein Bild in den Artikel einzubinden. Das ist natürlich unkomfortabel, also gibt es einen Link zu einem ganz einfachen Galerie-Formular-Script "galerie.php". Dort kann per Radio-Button im linken Frame genau ein Bild ausgewählt werden. Das Formular wird an "bildlink.php" gesendet. Diese Datei wiederum include ich in mein Ausgangsformular "maske.php". Das alles sieht auszugsweise so aus:

//galerie.php
<frameset cols="80%,20%">
  <form action="bildlink.php" method="post">
  <frame src="gal_bilder.php" name="Bilder">
  <frame src="gal_menue.php" name="Menue">
  </form>.............

//gal_menue.php
   echo "<a href="maske.php" target="_blank"><input type="submit"
          name="submit" value="Bild übernehmen" /></a>\n";......................

//bildlink.php
<?php
$bild = $_POST['bild'];
echo "$bild\n";
  ?>

//maske.php
<input name="bild" type="text" size="45" value="<?php include "bildlink.php"; ?>" />

Das Problem ist, daß man die Formularfelder füllt, dann geht man in die Galerie, sucht ein Bild aus und wird dann zurück zu "maske.php" gelinkt. Allerdings wird dieses Formular völlig neu geöffnet. Alle Einträge sind weg und auch der Bildlink aus "bildlink.php" wurde nicht eingefügt. (Den target="_blank" hab ich übrigens eingfügt, weil "maske.php" sonst im Frame "gal_menue.php" geöffnet wird. Die Einträge sind auch ohne das target nicht da.)

Wie stell ich es also an, von einem Formular in ein zweites zu verweisen und von diesem zweiten Formular mit dem Absenden automatisch in das erste (schon ausgefüllte) Formular geleitet zu werden? Dort sollen die übertragenen Daten aus dem zweiten Formular in ein Feld eingetragen werden und außerdem sollen natürlich alle vorher gemachten Einträge noch enthalten sein.

Ich hoffe meine lange Beschreibung schreckt Euch nicht ab. Vielleicht wißt ihr ja wieder mal, worans hakt?

Beste Grüße,
Onkel Schnitzel

  1. Hallo Onkel Schnitzel!

    Du musst ganz einfach alle bereits eingegebenen Daten (von maske) in die Galerie mitnehmen und auf dem Weg zurück in das ursprüngliche Formular (maske) all die "alten" Werte und zusätzlich den oder die neuen aus der Galerie einfügen.

    Du musst also alle Eingaben über mehrere Formular mitschleppen - zB über hidden-Felder.

    Siehe dazu auch Näheres zum Thema Affenformular ...

    lg

    norbert =:-)

    1. Du musst also alle Eingaben über mehrere Formular mitschleppen - zB über hidden-Felder.

      Ja, da kann ich mir was drunter vorstellen vorstellen, hab ich an anderer Stelle sogar schonmal gemacht.

      Siehe dazu auch Näheres zum Thema Affenformular ...

      oh nein, bitte nicht. :-(  Ich hatte mir das vor kurzem schonmal angeguckt und nicht verstanden und beim Blick darauf wurde mir gerade auch schon wieder schwummerig. Geht das nur über Affenformulare? Der Hauptpunkt, den ich daran nicht verstehe: Durch den Eintrag des Scriptnamens bei action soll sich das Formular immer wieder selbst aufrufen. Aber irgendwann, wenn alles richtig ausgefüllt ist, soll das Formular ja irgendwo hingeschickt werden. Wohin denn, wenn action immer wieder das Formular selbst aufruft?

      Soweit schonmal Danke,
      Onkel Schnitzel

      1. Hallo Onkel Schnitzel!

        oh nein, bitte nicht. :-(  ... schonmal angeguckt ... wieder schwummerig.

        Vergiss es. Viele Wege führen nach Rom. Affenformular trifft in diesem Fall ohnehin nicht ganz zu - ich dachte aber, vielleicht hilft die Seite ein wenig bei der Lösungsfindung.

        Ja, da kann ich mir was drunter vorstellen vorstellen, hab ich an anderer Stelle sogar schonmal gemacht.

        Na eben. Is ja egal, wie man dazu sagt ;-)

        Viel Erfolg.

        lg

        norbert =:-)

      2. Hi Onkel,

        Siehe dazu auch Näheres zum Thema Affenformular ...

        oh nein, bitte nicht. :-(  Ich hatte mir das vor kurzem schonmal angeguckt und nicht verstanden und beim Blick darauf wurde mir gerade auch schon wieder schwummerig.

        Affenformular gehören zu den Grundlagen in PHP - wer damit nicht zurecht kommst, sollte sich IHMO noch nicht an ein CMS wagen.

        Im Prinzip ist ein Affenformular aber nichts anderes, als ein Formular, was "an sich selber" geschickt wird. Wobei das "an sich selber" etwas unklar sein kann. Gibt z.B. /foo/bar.php ein Formular aus, welches an /foo/bar.php verschickt wird, so handelt es sich um Affenformular.

        Geht das nur über Affenformulare? Der Hauptpunkt, den ich daran nicht verstehe: Durch den Eintrag des Scriptnamens bei action soll sich das Formular immer wieder selbst aufrufen. Aber irgendwann, wenn alles richtig ausgefüllt ist, soll das Formular ja irgendwo hingeschickt werden. Wohin denn, wenn action immer wieder das Formular selbst aufruft?

        Nein, das ist ein falscher Denkweg. Das Formular schickt sich immer wieder an sich selber. Dabei kann man z.B. irgendwelche Bedigungen prüfen (XY nicht leer usw.), bei Fehler gibt man das Formular wieder aus - dabei belegt man die Felder im Formular die korrekt waren direkt wieder mit ihren alten Werten.

        Ist dann alles korrekt, so wird ein anderer Zweig abgearbeitet - dabei kann man dann die Daten z.B. in eine Datenbank eintragen oder sonst etwas machen. Das Formular muss dann i.d.R. nicht mehr ausgegeben werden - wozu auch, wenn keine Fehler da waren. Man kann dann z.B. noch einen Bestätigungshinweis angeben.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
        Wissen ist gut, Können ist besser, aber das Beste und Interessanteste ist der Weg dahin! (Detlef G.)
          • wer damit nicht zurecht kommst, sollte sich IHMO noch nicht an ein CMS wagen.

          Wahrscheinlich verstehst Du unter einem CMS etwas anderes. Ich nenne es CMS, weil ich meinen Redakteuren mit einem simplen Formular eine einfache Möglichkeit gebe, Beiträge auf die Seite (nur News auf der Startseite) zu stellen. Des weiteren sorgt mein "CMS" dafür, daß pro neuem Beitrag ein alter von der Startseite verschwindet und archiviert wird- mehr isses nicht :-)

          Nein, das ist ein falscher Denkweg. Das Formular schickt sich immer wieder an sich selber. Dabei kann man z.B. irgendwelche Bedigungen prüfen (XY nicht leer usw.), bei Fehler gibt man das Formular wieder aus - dabei belegt man die Felder im Formular die korrekt waren direkt wieder mit ihren alten Werten.

          Ist dann alles korrekt, so wird ein anderer Zweig abgearbeitet -

          Alle Überprüfungen und Bedingungen sowie das Eintragen in die Datenbank werden also in der Formulardatei gemacht? Das können ja dann regelrechte Monsterdateien werden.

          Gruß,
          Onkel Schnitzel

          1. Hi Onkel,

            Alle Überprüfungen und Bedingungen sowie das Eintragen in die Datenbank werden also in der Formulardatei gemacht? Das können ja dann regelrechte Monsterdateien werden.

            Richtig, dafür hast du aber nicht für jeden Krimskram zehn einzelne Dateien auf dem Server rumfliegen. IMHO ist das dann auch ordentlicher. Mehrere 100, manchmal auch weit über 1000 Zeilen Code kommen da schon mal vor - da ist es natürlich wichtig den Code ordentlich zu strukturieren, einzurücken und zu kommentieren, damit man sich da noch zurecht finden ;-)

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
            Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)
            1. Richtig, dafür hast du aber nicht für jeden Krimskram zehn einzelne Dateien auf dem Server rumfliegen. IMHO ist das dann auch ordentlicher.

              Das stimmt wohl. Ich werde mich bei Gelegenheit doch nochmal mit den Affenschlokus beschäftigen. :-)

              Beste Grüße,
              Onkel Schnitzel

              1. Hi Onkel,

                Richtig, dafür hast du aber nicht für jeden Krimskram zehn einzelne Dateien auf dem Server rumfliegen. IMHO ist das dann auch ordentlicher.

                Das stimmt wohl. Ich werde mich bei Gelegenheit doch nochmal mit den Affenschlokus beschäftigen. :-)

                Man braucht es eigentlich permanent. Stelle dir vor, du hast eine Login Seite - da wäre es doch blöd, wenn du eine .html Seite mit dem kleine Formular hättest und eine .php Seite, die die Daten überprüft. Vor allem - was wenn ein Fehler auftritt? Dann kannst du eben nicht die Fehlermeldung direkt über dem Formular ausgeben.

                MfG, Dennis.

                --
                Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
                Nicht wundern, wenn jetzt keine Antworten mehr von mir kommen - ich bin ab heute (Sa) im Urlaub ;-)
            2. echo $begrueszung;

              Richtig, dafür hast du aber nicht für jeden Krimskram zehn einzelne Dateien auf dem Server rumfliegen. IMHO ist das dann auch ordentlicher. Mehrere 100, manchmal auch weit über 1000 Zeilen Code kommen da schon mal vor - da ist es natürlich wichtig den Code ordentlich zu strukturieren, einzurücken und zu kommentieren, damit man sich da noch zurecht finden ;-)

              Irgendwann wirst du aus eigener Erfahrung zur Erkenntnis kommen, dass solche Monsterscripte auch nicht grade einfach zu pflegen sind. Dann wirst du deine Funktionalitäten in Funktionen zusammenfassen, die dann so generisch sind, dass man sie in einer in mehreren Projekten verwendbaren Bibliothek auslagern kann und nicht immer das Rad bei jedem Projekt neu erfinden wollen.
              Wollen wir wetten? :-)

              Vielleicht hast du dann auch PEAR kennen und schätzen gelernt...

              Dann sehen z.B. die wesentlichen Bestandteile eines Affenformulars z.B. so aus:

              Der Hauptteil:

              $form =& getForm();
              if ($form->validate())
                $form->process('processFormData');
              else
                $form->display();

              Die "Nebensächlichkeiten":

              function &getForm() {
                $form =& new HTML_QuickForm(...);
                ...
                $form->addElement(...)
                ...
                $form->addRule(...)
                ...
                return $form;
              }

              function processFormData($values) {
                ...
                $db =& DB::connect(DSN);
                $db->autoExecute('tableName', $values); // und das escapen ist auch schon drin
                ...
              }

              Das setzt natürlich Kenntnisse im Umgang mit Klassen voraus...

              Und? Konnte ich dein Interesse an PEAR wecken? :-)

              echo "$verabschiedung $name";