timmy: mehrere actions oder action automatisch starten

Hallo zusammen

Ich habe ein Problem:

Ich habe ein html Formular dass zwei Eingaben ermöglicht:

1. 5 Radio Buttons um einen Typ zu bestimmen (bsp. 1, 2, 3, 4, 5, )
2. ein "File" Feld wo der Pfad zu einem lokalen File ist.

Wenn nun die action ausgelöst wird sollten zwei "actions" passieren.

1. Die zwei Eingaben werden mit vbs (action=<%= Request.ServerVariables("SCRIPT_NAME") %>) in für vbs weiter verwendbare variablen gespeichert. Es braucht unbedingt beide Variablen.

Das funktioniert soweit auch, nun muss aber noch etwas weiteres passieren:

Gleichzeitig soll eine dll aufgerufen werden, welche die angegebene Datei auf den Server lädt.

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

für die 2. "action" ruft vbs ein neues unsichtbares IE Fenster auf und übergibt den Pfad. Die "action" soll aber sofort ausgeführt werden, und dafür ist ja eigentlich ein Button nötig. Wie kann ich das umgehen, dass sobald der IE gestartet ist die action ausgeführt wird?

  1. Moin!

    Ich habe ein html Formular dass zwei Eingaben ermöglicht:

    1. 5 Radio Buttons um einen Typ zu bestimmen (bsp. 1, 2, 3, 4, 5, )
    2. ein "File" Feld wo der Pfad zu einem lokalen File ist.

    Dann kriegst du zwei Informationen: Den Value des augewählten Radiobuttons, sowie eine Sammlung von Infos über die Datei, sowie die Datei selbst.

    Alternativ (wenn du den falschen bzw. gar keinen enctype im Formular setzt) erhälst du statt der Datei selbst nur deren Namen - dann kriegst du diese Datei aber niemals auf deinen Server.

    Gleichzeitig soll eine dll aufgerufen werden, welche die angegebene Datei auf den Server lädt.

    Dein Skript muß alle gewünschten Aktionen in einem Durchgang erledigen! Der Browser sendet die Radio-Buttons und die Datei nur ein einziges Mal!

    für die 2. "action" ruft vbs ein neues unsichtbares IE Fenster auf und übergibt den Pfad. Die "action" soll aber sofort ausgeführt werden, und dafür ist ja eigentlich ein Button nötig. Wie kann ich das umgehen, dass sobald der IE gestartet ist die action ausgeführt wird?

    Was soll da technisch passieren?

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. Durch die zwei Formular felder speichert vbs folgendes:

      1. mp2 oder mp3 oder wave oder ogg vorbis
      2. den Pfad (z.b. C:\Programme\test\test.asf

      Durch den Pfad wird mittels VBScript den Dateinamen ermittelt und entsprechend der eingabe abgeändert. Das ist kein Problem und auch schon funktionstüchtig. Abgesehen davon, dass ich die Datei noch nicht uploaden kann.

      Genauergesagt:

      vbs speichert in einer Variabel "test.asf". Im nächsten Schritt wird die Datei umbenennt und zwar folgendermassen (hier kommt der Radio Button zum Einsatz):

      _1 für mp2
      _2 für mp3
      _3 für wav
      _4 für ogg vorbis

      Wenn nun also mp2 gewählt wurde sieht die Datei nun so aus: test_1.asf

      Die Variablen bleiben gespeichert im VBScript. Somit könnte also theoretisch ein zweites unsichtbares IE Formular aufgerufen werden, die Pfad Variabel eingefügt werden und dann das Formular abschicken. Der Upload funktioniert folgendermassen:
      mit "action" wird die DLL "cpshost.dll" aufgerufen und die Datei auf den Server geladen. mehr dazu: http://www.devtrain.de/artikel_372.aspx

      Das funktioniert so auch. Mein Problem ist jedoch ganz banal: wie kann ich in einem versteckten IE Pop Up die Formular Action auslösen?

      (Bevor jemand fragt: Das Script geht nachher noch weiter. Es geht darum Musik Dateien zu Konvertieren in das gewünschte Format.

      1. Moin!

        Durch die zwei Formular felder speichert vbs folgendes:

        1. mp2 oder mp3 oder wave oder ogg vorbis
        2. den Pfad (z.b. C:\Programme\test\test.asf

        Der lokale Pfad, in den die Datei auf dem Clientcomputer lagert, interessiert dich auf dem Server gar nicht. Denn du kannst ja ohnehin nicht drauf zugreifen.

        Verwende in deinem ersten Formular den für Dateiuploads notwendigen enctype="multipart/form-data" - nur damit kriegst du deine Datei hochgeladen.

        Es ist nicht möglich (und wäre auch ein heftiges Sicherheitsrisiko), einen Browser dazu zu veranlassen, vollkommen automatisch einfach ein Formular mit Dateiauswahlfeld und vorbelegter Datei abzuschicken!

        Du kannst also nicht im ersten Schritt nur den lokalen Dateinamen entgehennehmen, und diesen als Vorbelegung für das Dateifeld in ein neues Formular schreiben, und das Formular dann automatisch abschicken, um die Datei hochzuladen. Der Benutzer muß den Upload immer manuell auswählen! Er würde also das Formular neu erhalten, müßte die Datei NOCHMAL auswählen, und dann abschicken. Das ist nicht das, was du willst, aber nur so würde es gehen.

        Deshalb: Datei DIREKT beim ersten Mal mit hochladen. Dann kriegst du den Dateinamen (und nur den, ohne lokalen Pfad) mitgeliefert, und kannst die Datei dann an einem passenden Ort speichern (wofür der lokale Pfad ja sowieso irrelevant ist, da ist nur der Dateiname wichtig).

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Vielen Dank für die ausführliche antwort

          ein Sicherheitsproblem wäre es aber nicht, da das ganze nicht ffentlich sondern im privaten intranet läuft mit sicherheitszertifikat.

          Ich habe aber allerdings nicht ganz verstanden, wie du zwei verschiedene aktionen ausführen kannst? Ich brauche unbedingt diese 2 aktionen.

          <form method="GET" action=<%= Request.ServerVariables("SCRIPT_NAME") %>

          und

          <form enctype="multipart/form-data" action="/scripts/cpshost.dll?PUBLISH" method="POST">

          also 2 actions in einem formular? das ist doch nicht möglich?

          1. ein Sicherheitsproblem wäre es aber nicht, da das ganze nicht ffentlich sondern im privaten intranet läuft mit sicherheitszertifikat.

            Das spielt keine Rolle, ein Sicherheitsproblem ist ein Sicherheitsproblem, wenn man den Schutz davor umgehen könnte, hättest du wieder ein potentielles Sicherheitsproblem. Das ist doch die Taktik von M$, immer alles möglichst komfortabel und einfach, das führt eher zu mehr Sicherheitslöchern, die man dann sehr unbequem wieder umgehen muss. Indem man z.b. das Feature Javascript ganz ausschalten muss.

            Ich habe aber allerdings nicht ganz verstanden, wie du zwei verschiedene aktionen ausführen kannst? Ich brauche unbedingt diese 2 aktionen.

            Das geht nicht.
            Bzw. es ginge mit JS, aber ich würde den Wunsch nach 2 Aktionen in einer CGI Anwendung eher als Fehler im Konzept ansehen.

            also 2 actions in einem formular? das ist doch nicht möglich?

            nein.

            Struppi.

            --
            Javascript ist toll (Perl auch!)

            1. Das spielt keine Rolle, ein Sicherheitsproblem ist ein Sicherheitsproblem, wenn man den Schutz davor umgehen könnte, hättest du wieder ein potentielles Sicherheitsproblem. Das ist doch die Taktik von M$, immer alles möglichst komfortabel und einfach, das führt eher zu mehr Sicherheitslöchern, die man dann sehr unbequem wieder umgehen muss. Indem man z.b. das Feature Javascript ganz ausschalten muss.
              ---------------------------------

              Die Sicherheit ist wirklich kein Problem, glaubt mir doch...Der Server steht in einem Netzwerk wo keine Internetverbindung möglich ist. Es ist physikalisch NICHT möglich! und das Netz wird auch nicht zu einem späteren zeitpunkt ans internet angebunden ;)

              ---------------------------------
              Bzw. es ginge mit JS, aber ich würde den Wunsch nach 2 Aktionen in einer CGI Anwendung eher als Fehler im Konzept ansehen.
              ---------------------------------
              mit JS wär es also möglich. dann muss ich das wohl doch mit einem script sprach mix lösen :-/

              hat da vielleicht jemand einen Tipp für mich, wie ich das ganze angehen soll?

              gruss timmy

              1. Die Sicherheit ist wirklich kein Problem, glaubt mir doch...Der Server steht in einem Netzwerk wo keine Internetverbindung möglich ist. Es ist physikalisch NICHT möglich! und das Netz wird auch nicht zu einem späteren zeitpunkt ans internet angebunden ;)

                Es geht null darum welche Bedingungen, bei DIR vorhanden sind, sondern darum wozu ein Browser verwendet werden kann. Es ist also nicht dein Problem, sondern ein Problem der Software, das gelöst wird, in dem eben der Zugriff nicht möglich ist.

                hat da vielleicht jemand einen Tipp für mich, wie ich das ganze angehen soll?

                In dem du dein Server Skript entsprechend anpaßt. Dass es also bei Eingabe A Aktion A ausführt und bei Eingabe B Aktion B

                Struppi.

                --
                Javascript ist toll (Perl auch!)
            2. hi,

              Bzw. es ginge mit JS, aber ich würde den Wunsch nach 2 Aktionen in einer CGI Anwendung eher als Fehler im Konzept ansehen.

              Eher umgekehrt, würde ich sagen:
              Den Wunsch, mit einem Formular zwei serverseitige Scripte anstossen zu wollen, sehe ich als den Fehler.

              Folgt im Umkehrschluss, dass man _ein_ serverseitiges Script anstößt, welches dann die zwei Aktionen durchführt.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }