alex: 2 Skripte mit einem Submit starten(oder 2in1?)

Hallo!
Ich weiß, das wurde hier vor kurzem schon gefragt, aber finde den Beitrag nicht mehr. hab versucht

Action = "skript1.pl" ,"skript2.pl"
Aber da wird nur ein Skript ausgeführt. Was kann das sein?
Gruß
Alex

PS: Wenn ich an Stelle dessen beide Skripte in eins packen will, also in etwa so:

#!/usr/bin/perl
print "Content-type: text/html","\n\n";

.
.
.
        }
sub pick_up{
        if(($_[1]=~/^$_[0]=([^&\b]+)/i)||($_[1]=~/&$_[0]=([^&\b]+)/i)){
                $pick=$+;
                $pick=~s/%([\dA-Fa-f][\dA-Fa-f])/pack("C",hex($1))/eg;
                $pick=~tr/+/ /;
                $_[1]=~s/$_[0]=[^&\b]+//i;
                $_[1]=~s/&&/&/g;
                $_[1]=~s/^&//g;
                $_[1]=~s/&$//g;
                }
                else{
                        return 0;
                        }
        return $pick;
        }

-------> SMTP-Programm zum Versenden der Mail:

$Sendmail_Prog = "/usr/lib/sendmail";

-------> Modul für CGI-Scripts einbinden:

use CGI;

-------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:

$query = new CGI;
@names = $query->param;

-------> interne Daten aus den erwarteten hidden-Feldern auslesen:

$delimiter = $query->param('delimiter');  # ---> Begrenzerzeichen zwischen name und value
$mailto = $query->param('mailto');        # ---> Empfängeradresse
$returnhtml = $query->param('return');    # ---> URL für Dankeseite
$subject = $query->param('subject');
.
.
.

-------> Text der E-Mail aus den Formulardaten ermitteln:

my $mailtext = "Hallo $Vorname $Nachname\n\n";
$mailtext .= "Vielen Dank für Ihre Bestellung!\n\n\n";
$mailtext .= "Hiermit bestätigen wir Ihnen Ihre Bestellung für .
.
.
.

-------> E-Mail versenden:

open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
print MAIL "To: $email\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$mailtext\n";
close(MAIL);

Geht das nicht, hab die kompletten Skripte(die beide funktionieren hintereinander gesetzt, nur die 2. Perl-Zeile rausgenommen. Was mache ich falsch? Gruß
Alex

  1. Hi,

    Aber da wird nur ein Skript ausgeführt. Was kann das sein?

    ganz einfach: Ein Formular erlaubt exakt eine Action - nicht mehr und nicht weniger.

    PS: Wenn ich an Stelle dessen beide Skripte in eins packen will, also in etwa so:

    [...]

    Geht das nicht, hab die kompletten Skripte(die beide funktionieren hintereinander gesetzt, nur die 2. Perl-Zeile rausgenommen. Was mache ich falsch? Gruß

    *seufz* Programmierung erfordert mehr als nur Codezeilen zusammenzustückeln. Schritt Eins: Begreife, was die beiden Scripts wie machen.

    Cheatah

    1. Hallo Cheatah!

      Ich weiß wohl was das 2.(mail) Skript macht, das erste ist so ne Sache, ich weiß zwar ungefähr, was es macht, aber ich kann jetzt nicht genau sagen, was mit jedem Befehl passiert, ist halt schon fertig gewesen. Ich hatte das soger einmal geschafft, dass so beide FUnktionen funktionieren, die mail hatte nur zu lange gebraucht, da habe ich es wieder geändert. Aber aus irgend einem Grund geht es jetzt nicht mehr:-(
      Ich will ja gar nichts großartiges Programmieren, ich will nur 2 Skripte zusammenfügen, warum geht das nicht so einfach, wie ich eigentlich glaube? Genau so wie beschreieben habe ich das schon mir 2 Mail-Skripten gemacht, das hat geklappt. Was könnte denn das Problem sein? Muß ich nach dem DB-Teil etwas beenden?
      Gruß
      Alex

      1. Hi,

        Ich will ja gar nichts großartiges Programmieren, ich will nur 2 Skripte zusammenfügen, warum geht das nicht so einfach, wie ich eigentlich glaube?

        stell Dir vor, Du hast einen superschnellen Porsche und einen alten Mercedes mit großem Kofferraum. Wenn Du jetzt einen superschnellen Wagen mit großem Kofferraum haben willst, dann schaffst Du das nicht, indem Du mit dem einen in den anderen crashst.

        Ein Grund ist z.B., daß beide Scripts einen HTTP-Header senden (müssen). Ein Script darf aber nicht zwei Header zurückschicken, also mußt Du aus den beiden einen machen. Ein anderer Grund ist die gesamte Logik möglicher Fälle (alles hat geklappt, es gab einen Fehler...). Bisher waren es zwei Entscheidungslisten, daraus mußt Du jetzt eine machen.

        Programmierung ist _nicht_ einfach. Ein Script zu verändern erfordert, dieses Script zu verstehen.

        Cheatah

    2. Hallo Cheatah!

      ganz einfach: Ein Formular erlaubt exakt eine Action - nicht mehr und nicht weniger.

      Ich dachte da an sowas wie mit Javascript und 2. Formular, aber halt wegen Javaskript finde ich das nicht so besonders.

      *seufz* Programmierung erfordert mehr als nur Codezeilen zusammenzustückeln. Schritt Eins: Begreife, was die beiden Scripts wie machen.

      Das Problem an der Sache: Das DB-Skript ist nicht von mir und super kompliziert, bis ich das kpl. verstanden habe brauche ich Jahre!!! Das hat halt viele nützliche Funktionen, und da das so ganz gut funktionierte, hat mir das so gereicht.
      Aber was hätte ich den davon, wenn ich fede Kleinigkeit zu 100% begreife(sicher wäre das schön), aber ich will nur das Mailskript integrieren. Das verstehe ich auch zu 100%.(Sieht mán vielleicht daran wie umständlich das gemacht wurde) Jedenfalls verstehe ich das nicht. Erstmal, die erste Zeile mit dem Pfad zu Perl braucht man wohl nur einmal. Das Problem ist glaube ich, dass die Variablen doppelt "geöffnet" werden, halt von meinem Mailskript "von Hand", also alle einzelnd, und bei dem DB-Script alle autotmatisch.
      Wenn ich das Mailskript vor dem DB-Script einfüge, kommt die email an, aber das DB-Script liefett den fehler: nicht über eine html Seite geöffnet. Wenn ich das umgekehrt mache, wird was in die DB geschrieben, ader dafür im Gegenzug keine Mail abgeschickt.
      Wenns hilft könnte ich das kpl. Script mal posten, oder wenns euch zu groß ist als TXT Datei auf meinem Server ablegen.
      Ich will bestimmt kein fertiges Skript, ich habe mi´ch heut mit dem Problem bestimmt 10 Stunden auseinander gesetzt und komme einfach nicht mehr weiter. Ich kann lesen und machen was ich will, ich verstehe das DB Skript einfach nicht genug, um das anpassen zu können. Jeder Versuch in diese Richtung ist kläglich gescheitert.
      Ich fänd es nur nett, wenn jemand einen Tip fr mich hätte, in welche Richtung ich was verändern müßte, oder wo Erfahrungsgemäß Fehler gemacht werden können. Wie gesagt laufen beide Skripte alleine Perfekt.
      Wäre sehr dankbar, wenn mir jemand weiterhefen könnte!
      Gruß
      Alex

      1. Hallo,

        Einfach wird das sicherlich nicht. Ohne halbwegs guter Perlkenntnisse, und ohne Verständis der Funktionsweise _beider_ Scripts ist das, denke ich, nicht zu machen.

        Ein Ansastz wäre:
        -- eines der Scripte zu einem Modul zu machen
        -- den Hauptcode, also alles das nicht in einer Funktion steht, auch zu einer Funktion zu machen
        -- konsequent mit 'use strict' und 'my' zu arbeiten (sollte ja sowieso 'Pflicht' sein)
        -- und dann noch alle Codeteile daraus vorsichtig zu eliminieren, welche vom eigentlichen, neuen Hauptprogramm zu erledigen sind
        -- und dann noch alle Sachen, die mir so auf die Schnelle nicht einfallen :-(

        Wie gesagt, einfach wird es sicher nicht. Vor allem, wenn die Scripts nicht von vornherein eine halbwegs klare Struktur aufweisen.
        Wichtig ist dabei sicherlich, daß Du Dich mehr mit den Scripts auseinandersetzen mußt, als Dir vielleicht lieb ist.
        Aber dafür hast Du hinterher ein Mehr an Wissen, welches Dir in Zukunft noch viel weiterhelfen wird.

        Grüße
          Klaus

        1. Hallo!
          Das befürchte ich auch! Aber das Skript ist wirklich sehr lang und sehr kompliziert, da alle möglichen eventualitäten und sehr viele Möglichkeiten mit eingearbeitet sind.
          Ich habe aber noch eine Idee:
          Kann man nicht aus dem einen Skript, das andere autotmatisch starten? Oder die Daten in hidden Fields auf eine Antwort-Seite und ein Formular autotmatisch starten? Wäre sowas wohl denkbar? Es ist nicht, dass ich mich drum drückn will, mich mit Grundlagen auseinander zu setzten, das sind leider keine Grundlagen mehr, sicher, schön wäre es, wenn ich das alles verstünde, aber der Aufwand ist einfach zu groß! Damit DU mich verstehst, habe ich das Script mal in eine html-Datei gepack: http://www.autotuning-shop.com/script.htm
          Gruß
          ALex

          1. Hallo!

            Ich wieder *g*.

            Habe oben schon etwas geschrieben und nun den Thread hier gelesen. Ich habe Dein Skript mal kurz überflogen.
            Was mir als erstes eingefallen ist: Steck den Mail-Teil mal in ein Unterprogramm, z.B. sub sendEmail{...}. Das Gleiche mit dem DB-Teil ab dem Ende des Konfig-Teiles bis vor 'sub check_if_mail' z.B. sub dbAction{...}.

            Dann füge mal nach den Konfig-Teil folgendes ein:

            &sendEmail;
            &dbAction;

            Hat es geholfen?

            Gruß Markus

            1. Hi!
              Wie oben geschrieben, bekomme ich als Antwort vom Server nur eine weiße Seite, auch wenn ich nur den Mail Teil in ein Sub. packe. Also ich bekome weder eine Fehlermeldung, noch wird etwas ausgeführt, hatte ich bis jetzt noch nie, vielleicht weiß jaeiner von Euch, was das jetzt sein kann! Hab unter dem selben link nochmal das aktuelle Skript hochgeladen!
              Gruß
              Alex

              1. Hallo,

                Es wäre wirklich gut, wenn Du Dir Perl lokal installieren würdest, und dann das Script auch ordentlich lokal testest.
                <shelloutput>
                D:\tests>perl  alex2.pl
                Content-type: text/html

                Undefined subroutine &main::sendEmail called at alex2.pl line 79.
                </shelloutput>
                Wobei die Zeile mit 'Undefined ' sicherlich per STDERR gekommen ist, also über den Webserver normalerweise nicht angezeigt wird.
                Und dann ist es klar, daß nix mehr kommt.
                Ach ja übrigens, die Funktion hattest Du 'sendMail' genannt.
                So das mal fürs erste.
                Hinzu kommt, daß Du mit

                sub dbEintrag
                {
                read(STDIN,$query_string,$ENV{'CONTENT_LENGTH'});
                [...]

                probierst, die Parameter nochmals einzulesen. Das wird so nicht gehen, da spätestens bei read(STDIN...) nichts mehr kommen wird, da es ja schon durch die funktion sendMail() geschehen ist.
                Du mußt also eine gemeinsame Parameterverwaltung realisieren. Einfach nur zwei Unterprogramme machen alleine genügt nicht.
                Wie schon weiter oben gesagt, ist das Zusammenführen zweier scripts eine heikle Angelegenheit. Wenn Dir die Perlkenntnisse dazu fehlen, so hast Du nur zwei Chancen.

                1.)Du eignest sie Dir an,

                2.) Du suchst Dir jemanden, der das für Dich erledigt.
                Könnte allerdings auch Geld kosten.

                Aber, so wie es für mich aussieht, ist das ja sowieso ein kommerzielles Projekt, dak wirst Du, wenn nötig schon ein paar Mark abgeben können.

                Grüße
                  Klaus