Togaras: PL/SQL und Formulare mit mehreren Submits, mit IE spinnt es

Hallo

ich programmiere mit PL/SQL an einer kleinen Portlett, bei der ich gerne ein Formular mit mehreren Submits benutzen würde. Ich habe dafür zunächst den <input type="submit" ...> Tag benutzt und dabei zu erst beiden Buttons den selben Name aber verschiedene Value zugeordnet.

Wärend der Entwicklung hab ich alles mit Firefox betrachtet und unentwegt das gesammte Tool fertig gestellt. Anschließend wurde das ganze unter IE getestet und das Erschrecken war groß. Es ließ sich nicht nachvollziehen welcher der Buttons unter IE gedrückt wurde.

Die Variablen für die einzelnen Formularfelder waren grundsätzlich immer null (also leer), bei Firefox bekam ich dagegen immer den richtigen Wert übermittelt.

Eine Umstellung auf verschiedene Buttonnamen brachte keine Verbesserung, Firefox übermittelte die Werte korrekt, bei IE gab es immer nur die default Werte.

Als nächstes versuchte ich mittels <button name=".." value="..."><img ...></button>. Erstaunlicher Weise bekam ich hier beim IE immerhin einen Wert, und zwar den IMG Tag. Leider ließ sich auch hier keine Unterscheidung treffen, da grundsätzlich alle Buttons übermittelt wurden, oder wenn alle Buttons den selben Namen hatten, nur der Wert des ersten Buttons. Also wieder keine Unterscheidung möglich.

Liegt das nun an PL/SQL oder an IE oder an beiden? Kennt jemand eine Lösung für dieses Problem, dass zb unter PHP eigentlich gar nicht auftritt, hier hab ich bei <input ..> immer herausfinden könnte welcher Button gedrückt wurde.

Vielen Dank

Togaras

  1. Liegt das nun an PL/SQL oder an IE oder an beiden?

    Ich mag es zwar selber nicht, wenn jemand nur dumme Kommentare abgibt, aber das ist zu lustig. Oracle wird sich sicher freuen, dass der IE jetzt auch PL/SQL kann :D *vorlachenaufbodenroll*! Verwechselst Du da nicht was? Und ein paar Teile Deines !!! HTML !!! Codes würden anderen Helfen Dir zu helfen!

    1. Ich mag es zwar selber nicht, wenn jemand nur dumme Kommentare abgibt, aber das ist zu lustig. Oracle wird sich sicher freuen, dass der IE jetzt auch PL/SQL kann :D *vorlachenaufbodenroll*! Verwechselst Du da nicht was? Und ein paar Teile Deines !!! HTML !!! Codes würden anderen Helfen Dir zu helfen!

      Du weisst wie PL/SQL funktioniert?
      Mit PL/SQL und einem Oracle Applikationserver bin ich in der Lage Webapplikationen zu schreiben. Der IE bekommt an dieser Stelle nur seine HTML Daten übermittelt, genau wie es bei PHP ist.

      Mit "liegt das nun an beiden" meine ich, ob es vielleicht an dem Zusammenspiel zwischen IE, dem Oracle Applikation Server und dann letztendlich PL/SQL liegt. Es kann ja durch aus sein, dass der IE die Daten zwar halbwegs richtig sendet, diese aber nur falsch bei den PL/SQL Skripten ankommen.

      In sofern muss ich leider mein Unverständnis für dein Lachen äussern.

      Zum HTML Code: Der ist ziemlich simple:
      Variante 1:
      <input type="submit" name="pButton1" value="Aktion 1">
      <input type="submit" name="pButton1" value="Aktion 2">

      Variante 2:
      <input type="submit" name="pButton1" value="Aktion 1">
      <input type="submit" name="pButton2" value="Aktion 2">

      Ergebnis beim Übermitteln: Der IE interpretierte die Values nicht, da ich in PL/SQL in meinen Funktionen alle Variablen definieren muss, gleichzeitig aber ein Leerstring ('') als NULL interpretiert wird, kann ich im PL/SQL nicht erkennen ob der Button gedrückt wurde oder nicht. - Wie aber bereits geschrieben: Firefox lieferte die korrekten Values mit.

      Variante 3:
      <button type="submit" name="pButton1" value="Aktion1"><img src="bild1" alt="Aktion1"></button>
      <button type="submit" name="pButton1" value="Aktion2"><img src="bild2" alt="Aktion2"></button>

      Variante 4:
      <button type="submit" name="pButton1" value="Aktion1"><img src="bild1" alt="Aktion1"></button>
      <button type="submit" name="pButton2" value="Aktion2"><img src="bild2" alt="Aktion2"></button>

      Auch hier keine Unterscheidung möglich. Firefox belegte grundsätzlich immer nur die Variable mit dem entsprechenden Wert, die auch dem gedrückten Button zugeordnet war.

      IE lieferte zwar endlich Werte die ich auslesen konnte: Allerdings statt der im value definierten Werte gab es den gesammten Image-Tag der zwischen <button ..> und </button> definiert war zurück. Leider war auch hier keine Unterscheidung möglich, ich bekam bei Variante 3 immer nur "Aktion1", auch wenn Aktion 2 gedrückt wurde und bei Variante 4 waren grundsätzlich beide Button-Variablen mit den Werten belegt.

      1. Du weisst wie PL/SQL funktioniert?

        Ja ich weiss das, aber deshalb kann es der IE noch lange nicht. ;)

        Nun mal zum Grundsätzlichen. Buttons werden genau wie Formvariablen an den Server zurückgegeben, um evtl. zu erkennen, welche Aktion ausgeführt wurde. Deshalb ist es schon mal grundsätzlich ratsam ihnen verschiedene Namen zu geben.

        Was jetzt noch wichtig ist, ist der Auszug Deines <form>-Tags, um überhaupt zu sehen, wie Du die Daten an den Server übergibst.

        1. Du weisst wie PL/SQL funktioniert?

          Ja ich weiss das, aber deshalb kann es der IE noch lange nicht. ;)

          Du redest Unsinn. Niemand hat gesagt, das der IE das kann. Togaras hat dich bereits darauf hingewiesen, dass natürlich, wie bei allen CGI Skripten, der Browser nur HTML Code sieht und das ist auch gar nicht die Frage.

          Nun mal zum Grundsätzlichen. Buttons werden genau wie Formvariablen an den Server zurückgegeben, um evtl. zu erkennen, welche Aktion ausgeführt wurde. Deshalb ist es schon mal grundsätzlich ratsam ihnen verschiedene Namen zu geben.

          Auch das ist Unsinn. Es ist durchaus üblich einen button mehrfach zu belegen. z.b.
          <input type="submit" name="do" value="löschen">
          <input type="submit" name="do" value="einfügen">

          so kannst du mit einem Formular (in dem u.U. noch andere Parameter enthalten sind) unterschiedliche funktionen ausführen.

          Struppi.

          1. Du redest Unsinn. Niemand hat gesagt, das der IE das kann. Togaras hat dich bereits darauf hingewiesen, dass natürlich, wie bei allen CGI Skripten, der Browser nur HTML Code sieht und das ist auch gar nicht die Frage.

            Er schreibt es aber in der Überschrift! Ganz fett!

            Auch das ist Unsinn. Es ist durchaus üblich einen button mehrfach zu belegen. z.b.
            <input type="submit" name="do" value="löschen">
            <input type="submit" name="do" value="einfügen">

            so kannst du mit einem Formular (in dem u.U. noch andere Parameter enthalten sind) unterschiedliche funktionen ausführen.

            Struppi.

            Bei wem ist das üblich? Der Browser übergibt im Normalfall gleiche Variablennamen (wenn es nicht gerade Buttons sind) doppelt, z.B. http://blablabla.../blabla.pl?do=löschen&do=einfügen ! Wie soll der Server dabei den richtigen Wert ermitteln? Du hast nur Glück, dass Du nicht gleichzeitig 2 Buttons klicken kannst, aber schön ist das nicht! Und auch mit unterschiedlichen Variablennamen kannst du unterschiedliche Funktionen auslösen!

            1. Du redest Unsinn. Niemand hat gesagt, das der IE das kann. Togaras hat dich bereits darauf hingewiesen, dass natürlich, wie bei allen CGI Skripten, der Browser nur HTML Code sieht und das ist auch gar nicht die Frage.

              Er schreibt es aber in der Überschrift! Ganz fett!

              Nein, er schreibt das es im IE seltsamerweise nciht klappt und im firefox schon. Er hat also ein Phänomen im IE.

              Auch das ist Unsinn. Es ist durchaus üblich einen button mehrfach zu belegen. z.b.
              <input type="submit" name="do" value="löschen">
              <input type="submit" name="do" value="einfügen">

              so kannst du mit einem Formular (in dem u.U. noch andere Parameter enthalten sind) unterschiedliche funktionen ausführen.

              Struppi.

              Bei wem ist das üblich? Der Browser übergibt im Normalfall gleiche Variablennamen (wenn es nicht gerade Buttons sind) doppelt, z.B. http://blablabla.../blabla.pl?do=löschen&do=einfügen ! Wie soll der Server dabei den richtigen Wert ermitteln? Du hast nur Glück, dass Du nicht gleichzeitig 2 Buttons klicken kannst, aber schön ist das nicht! Und auch mit unterschiedlichen Variablennamen kannst du unterschiedliche Funktionen auslösen!

              Ja das ist genau der Sinn darin, du löst mit ein und dem selben Formular unterschiedliche Aktionen aus.

              <form name="iform" method="GET" action="">
              <input type="submit" name="do" value="wert 1">
              <input type="submit" name="do" value="wert 2">
              </form>

              es wird immer nur der Button übergeben, der gedrückt wurde und das ist durchaus üblich da man eben nur einen Button drücken kann.
              Das ist schön und elegant alles andere ist Murks.

              Struppi.

              1. alles andere ist Murks.

                Was soll man diesem Argument entgegensetzen? Bei Dir ist es "üblich" bei mir ist es unüblich, aber stell es nicht dar, als wäre es quasi Standard! Der einzige Fall wo es "üblich" ist, sind Radiobuttons, da die über den Namen gruppiert werden und der Browser garantiert, dass der Wert einmalig ist! Alles andere ist ein Glücksfall.

                1. Was soll man diesem Argument entgegensetzen? Bei Dir ist es "üblich" bei mir ist es unüblich, aber stell es nicht dar, als wäre es quasi Standard! Der einzige Fall wo es "üblich" ist, sind Radiobuttons, da die über den Namen gruppiert werden und der Browser garantiert, dass der Wert einmalig ist! Alles andere ist ein Glücksfall.

                  Nein, es ist durchaus üblich

                  <form action="do.pl">
                  <input type="hidden" name="id" value="xxxx">
                  <input type="submit" name="do" value="edit">
                  <input type="submit" name="do" value="delete">
                  </form>

                  zu machen. Und was hat das mit Glück zu tun?

                  Der User drückt entweder auf 'edit' dann werden die Daten mit der ID bearbeitet oder er drückt auf 'delete' dann werden sie gelöscht (nach Rückfrage natürlich). das ist absolut zuverlässig und auch durchaus ein Standard bei vielen CGI Anwendungen.

                  Struppi.

                  1. Was soll man diesem Argument entgegensetzen? Bei Dir ist es "üblich" bei mir ist es unüblich, aber stell es nicht dar, als wäre es quasi Standard! Der einzige Fall wo es "üblich" ist, sind Radiobuttons, da die über den Namen gruppiert werden und der Browser garantiert, dass der Wert einmalig ist! Alles andere ist ein Glücksfall.

                    Nein, es ist durchaus üblich

                    <form action="do.pl">
                    <input type="hidden" name="id" value="xxxx">
                    <input type="submit" name="do" value="edit">
                    <input type="submit" name="do" value="delete">
                    </form>

                    zu machen. Und was hat das mit Glück zu tun?

                    Der User drückt entweder auf 'edit' dann werden die Daten mit der ID bearbeitet oder er drückt auf 'delete' dann werden sie gelöscht (nach Rückfrage natürlich). das ist absolut zuverlässig und auch durchaus ein Standard bei vielen CGI Anwendungen.

                    Struppi.

                    Schon klar, mach was Du willst ;) Du benutzt auch lokale Variablen, die auch global deklariert sind, stimmt's? Das geht auch ... ;) :D

                    1. Schon klar, mach was Du willst ;) Du benutzt auch lokale Variablen, die auch global deklariert sind, stimmt's? Das geht auch ... ;) :D

                      Wenn du damit ausdrücken willst das das unsauber wäre. Ist mit (und sicher vielen anderen auch) nicht klar was du meinst.

                      Schau dich doch mal um!

                      Selbst das Formular, was du gerade im Augenblick benutzt geht genauso vor, sas Google Suchformular ebenso.
                      Wie gesagt das ist eine übliche Vorgehensweise, es ist nicht unsauber und es gibt  keinen Grund es nicht so zu tun.

                      Struppi.

                      1. Selbst das Formular, was du gerade im Augenblick benutzt geht genauso vor

                        Gutes Beispiel, exakt diese Formular macht es eben NICHT so. Jeder Submit-Button hat schön einen anderen Namen :)!

                        1. Ist es nicht egal was üblich ist und was nicht?

                          Ich kannte es von PHP, dass es ohne weiteres funktioniert wenn ich verschiedene Buttons in ein Formular packe. Und ich finde es einfach ein Formular mit mehreren Actions zu haben, als für jede Action ein Formular zu erstellen.

        2. Was jetzt noch wichtig ist, ist der Auszug Deines <form>-Tags, um überhaupt zu sehen, wie Du die Daten an den Server übergibst.

          <form action="http://server.local/portal/page?_pageid=ID&_dad=portal&_schema=PORTAL&show_t=260,1&p_kat_id=0" method="post">

          Das ganze wird nicht direkt an mein eigenes PL/SQL Skript geschickt, sondern an die Portal-Verwaltung. Diese ruft an Hand der pageid dass gewünschte Portlet auf und dieses Portlet ruft dann meine PL/SQL Funktion auf.

          1. <form action="http://server.local/portal/page?_pageid=ID&_dad=portal&_schema=PORTAL&show_t=260,1&p_kat_id=0" method="post">

            hier dürfte der Hund begraben sein.

            Einmal schickst du das Formular per post. Die Parameter werden also nicht über die URL abgefragt. Kann sein das das u.U. funktioniert, aber es ist auf jeden Fall sinnvoll das zu vermeiden. In deinem Fall solltest du hidden Formularfelder verwenden. Außerdem müssen die Parameter kodiert werden

            Struppi.

            1. Hab den Kram jetzt mit nem Hiddenfeld und nem Javascript erschlagen. Ist zwar nicht wirklich die schönste Methode in meinen Augen, aber das ganze Portal nutzt scheinbar an jeder Ecke JavaScript, so dass meine Funktion da keine Probleme machen sollte.

              Jedenfalls läuft es jetzt auch mit 2 Buttons unter IE :)

              1. Hab den Kram jetzt mit nem Hiddenfeld und nem Javascript erschlagen. Ist zwar nicht wirklich die schönste Methode in meinen Augen, aber das ganze Portal nutzt scheinbar an jeder Ecke JavaScript, so dass meine Funktion da keine Probleme machen sollte.

                Wieso JS?

                Jedenfalls läuft es jetzt auch mit 2 Buttons unter IE :)

                also ich benutze sowas ohne Probleme und ohne JS. Ich weiß nicht was du da falsch machst.

                Struppi.

                1. Ich weiß nicht was du da falsch machst.

                  Ich bin eigentlich der Meinung, dass ich nichts falsch mache, ich hab verschiedene Möglichkeiten probiert aber es führte keine zu einem Erfolg mit dem IE.

                  1. Ich bin eigentlich der Meinung, dass ich nichts falsch mache, ich hab verschiedene Möglichkeiten probiert aber es führte keine zu einem Erfolg mit dem IE.

                    Also bei mir funktioniert es ohne Probleme: http://die-bunte-liga.de/cgi-bin/formtest.pl

                    Struppi.

                    1. Also bei mir funktioniert es ohne Probleme: http://die-bunte-liga.de/cgi-bin/formtest.pl

                      Ja.
                      unter Perl, ebenso unter PHP, geht es ohne Probs, mit beiden Browsern.

                      Deswegen denke ich, dass es vermutlich doch an PL/SQL liegt, bzw daran wie PL/SQL oder das Oracle-Portal die Daten vom IE verarbeitet.
                      PL/SQL hat ja mit Perl relativ wenig zu tun ;) und ist ursprünglich als Storage Procedure Language für Oracle Datenbanken gedacht. Irgendwann wurde es dann um das HTP-Paket erweitert mit dem dann die Ausgabe über den Apache vom Application-Server möglich wurde.

                      Ich werd mal bei Gelegenheit prüfen ob es als reine PL/SQL Anwendung ohne das Portal drum herum funktioniert.

                      Najo, ich sag ma
                      Danke für die Tipps :)

                      Togaras

      2. Zum HTML Code: Der ist ziemlich simple:
        Variante 1:
        <input type="submit" name="pButton1" value="Aktion 1">
        <input type="submit" name="pButton1" value="Aktion 2">

        Variante 2:
        <input type="submit" name="pButton1" value="Aktion 1">
        <input type="submit" name="pButton2" value="Aktion 2">

        Das ist sehr seltsam. Ich kann nur Perl, aber grundsätzlich sollte das doch richtig übergeben werden, egal mit welchem Browser (ich hatte bei sowas auch noch nie Probleme).

        Hast du mal probiert die Werte mit GET zu übergeben? Dann kannst du ja zumindest im Browser sehen, welche Werte er übermittelt.

        Struppi.