Olaf Blum: Probleme mit submit() und cgi-Auswertung

Hallo zusammen,

folgendes Problem - in einem Formular gibt es mehrere Submit-Buttons wie:

<INPUT TYPE = "submit" NAME = "order_form_button" VALUE = "order">
...

Diese Buttons will ich durch Grafik-Buttons ersetzen, habe aber das Problem, daß im aufgerufenen cgi die Formulardaten wie folgt ausgewertet werden:

if ($form_data{'order_form_button'} ne "")
  {
  &require_supporting_libraries (__FILE__, __LINE__,
                              "$sc_order_lib_path");
  &display_order_form;
  exit;
  }
...

Mein Lösungsversuch:

Grafik-Button:

<A HREF="#1" onClick="sentform('kaufen')" onMouseOver="setImage('Bild7', 0,
1); window.status='in den Warenkorb legen'; return true;"
onMouseOut="setImage('Bild7', 0, 0); window.status=''; return true;"><IMG
NAME="Bild7" SRC="http://www.bhss.de/image/kaufen.gif" ALT="kaufen"
WIDTH="46" HEIGHT="29" BORDER="0"></A>

Javascript dazu:

function sentform(ButNam)
{
  switch([ButNam])
  {
  case "kaufen":
    document.product.write("<INPUT TYPE='HIDDEN' NAME='add_to_cart_button'
VALUE='add_to_cart_button'>");
  case "bestellen":
    document.product.write("<INPUT TYPE='HIDDEN' NAME='order_form_button'
VALUE='order_form_button'>");
  case "ansehen":
    document.product.write("<INPUT TYPE='HIDDEN' NAME='modify_cart_button'
VALUE='modify_cart_button'>");
  }
  document.product.submit()
}

leider funktioniert irgendetwas daran nicht. Fehlermeldungen bekomme ich keine, aber das cgi findet offensichtlich nicht die richtigen Daten.

Hat jemand eine n Ansatz für mich, was ich falsch mache?

MfG
Olaf

  1. Hi,

    folgendes Problem - in einem Formular gibt es mehrere Submit-Buttons wie:

    »»  <INPUT TYPE = "submit" NAME = "order_form_button" VALUE = "order">

    bis hierhin funktioniert das CGI auch?

    Diese Buttons will ich durch Grafik-Buttons ersetzen, habe aber das Problem, daß im aufgerufenen cgi die Formulardaten wie folgt ausgewertet werden:

    »»  if ($form_data{'order_form_button'} ne "")

    {
      &require_supporting_libraries (__FILE__, __LINE__,
                                  "$sc_order_lib_path");
      &display_order_form;
      exit;
      }

    Hm, ich sehe da eigentlich noch kein Problem. Wenn ich mich recht erinnere, wird noch immer order_form_button=order übergeben, zusätzlich zu order_form_button_x=42 und order_form_button_y=17 (oder so, je nach Klickposition). Was genau treten denn dann für Schwierigkeiten auf? Hast Du Dir mal die übergebenen Parameter ausgeben lassen? Liest Du die Parameter auch brav mit CGI.pm aus? ;-)

    Mein Lösungsversuch:

    Du hast noch nicht mal ein Problem genannt...?

    Grafik-Button:

    <A HREF="#1" onClick="sentform('kaufen')"

    Setz da noch mal ein return false; zu, sonst wird nämlich direkt nach sentform() (also bevor es effektiv ausgeführt werden kann) zu #1 gesprungen.

    function sentform(ButNam)

    Dir ist übrigens klar, daß "sentform" soviel wie "gesendetes Formular" heißt? ;-) ("sendform" wäre passender.)

    document.product.write("<INPUT TYPE='HIDDEN' NAME='add_to_cart_button'
    VALUE='add_to_cart_button'>");

    Was soll diese Zeile Deiner Meinung nach bewirken? Was ist "document.product", und mit welcher Ambition schreibst Du dort hinein?

    document.product.submit()

    Also ist document.product das Formular. Man möge mich bitte korrigieren, aber soweit ich weiß unterstützt ein Formular-Objekt keine write-Methode. Selbst wenn; es würde vermutlich das komplette Formular überschrieben werden.

    Schreibe am besten ein <input type="hidden"> von Anfang an ins Formular und ändere nur den value desselben.

    leider funktioniert irgendetwas daran nicht. Fehlermeldungen bekomme ich keine, aber das cgi findet offensichtlich nicht die richtigen Daten.

    Laß das CGI erst mal einige Variablen ausgeben, arbeite Dich im Quellcode vor. Andernfalls kann man nur raten, und das fängt bei "stimmt der Pfad zu den Dateien" an.

    Hat jemand eine n Ansatz für mich, was ich falsch mache?

    Diverse :-)

    HTH

    Cheatah

    1. hi,

      mit der input type=submit... Geschichte funktioniert alles bestens - also sind cgi und Pfade... in Ordnung.

      Aber wenn Du sagst, daß in ein Formular nicht geschrieben werden kann...

      Wenn ich jetzt Deinen Ansatz benutze und die Knöpfe im Formular mit Value="" vorbelege - wie kann ich dann im script den Value verändern?

      Für einen Ansatz hierzu wäre ich sehr dankbar.

      P.S.: mit Perl und Javascript beschäftige ich mich erst seit kurzem und muß mir da immer noch so einiges ausprobieren. Den funktionierenden shop findet man auf den Seiten von www.bhss.de - nur wollte ich halt die Knöpfe noch ein wenig aufpeppen...

      mfg
      Olaf

      1. hi,

        habe die Nuss geknackt, offensichtlich hatte ich einen Fehler in meinem with() - case Konstrukt. Nachdem ich jetzt die Sache mit if-Abfragen mache, werden mit document.form.button.value="xyz", die hidden - Werte vernünftig gesetzt.

        Danke für den Lösungsansatz.

        mfg
        Olaf