Perl Skript aufrufen
Theo
- perl
-1 Struppi0 agapanthus0 Theo0 agapanthus0 agapanthus0 Theo
Hallo,
bislang vergeblich versuche ich aus einer sensitiven Grafik so etwas wie eine anklickbare Sitzplatzreservierung zu realisieren.
z.B.
<script type="text/javascript">
function Select (Seat) {
alert("Das war Sitz Nr. " + Seat);
}
</script>
<area shape="rect" coords="220,290,235,306" href="#" onclick="Select(11)" title="11"></area>
<area shape="rect" coords="236,290,251,306" href="#" onclick="Select(12)" title="12"></area>
<area shape="rect" coords="252,290,267,306" href="#" onclick="Select(13)" title="13"></area>
<area shape="rect" coords="268,290,283,306" href="#" onclick="Select(14)" title="14"></area>
Doch wie speichere die (mehreren) angeklickten Nummern?
Urpsrünglich wollte ich ein Perl-Skript ansprechen,
z.B.
<area shape="rect" coords="220,290,235,306" href="Sitzplan.pl" title="11"></area>
Dabei soll ein Zähler hochgezählt, etc. werden.
Doch mir ist es nicht gelungen, es lokal von .html aus aufzurufen,
http://de.selfhtml.org/servercgi/cgi/cgihtml.htm#cgi_aufrufe
obwohl ich es unter Windows lokal direkt mit Doppelklick laufen lassen kann.
Woran liegts?
Danke für Hinweise.
obwohl ich es unter Windows lokal direkt mit Doppelklick laufen lassen kann.
Woran liegts?
Du brauchst einen Server.
Struppi.
Moin.
Du brauchst einen Server.
Die Antwort ist absolut korrekt. Aber vielleicht etwas kurz.
Wer nicht unbedingt zu Hause einen Apache installieren will, der kann (unter Windows) zu tinyweb greifen, ein sehr einfacher Webserver ohne Installation (einfach die exe mit ein paar Parametern starten), auf Wunsch auch mit SSL.
Gruß Frank
tinyweb greifen, ein sehr einfacher Webserver ohne Installation (einfach die exe mit ein paar Parametern starten), auf Wunsch auch mit SSL.
Gut, vielen Dank für den Hinweis! TINY.exe ist installiert.
Nun wurde im Firefox zunächst nur der .pl Quellcode angezeigt anstatt des Ergebnisses.
Nachdem ich Einstellungen beim Firewall (ZoneAlarm) geändert hatte, sagt er mir jetzt "forbidden".
Welche Einstellungen sind bei ZoneAlarm nötig?
Muss ich noch irgendwelche CHMOD 755 einstellen?
Danke für Details!
Moin.
Gut, vielen Dank für den Hinweis! TINY.exe ist installiert.
Nun wurde im Firefox zunächst nur der .pl Quellcode angezeigt anstatt des Ergebnisses.
Der Webserver läuft, nur wird der Perlinterpreter nicht gestartet. Du mußt Windows überreden, Perl-Dateien mit dem Interpreter zu öffnen:
Außerdem sollte der Pfad zum Perlinterpreter gesetzt sein.
Nachdem ich Einstellungen beim Firewall (ZoneAlarm) geändert hatte, sagt er mir jetzt "forbidden".
Hm, das solltest Du zurück ändern. Das Verhalten oben war ok.
Muss ich noch irgendwelche CHMOD 755 einstellen?
Nicht unter Windows, das ist nur unter Linux nötig.
Gruß Frank
Moin.
Nun wurde im Firefox zunächst nur der .pl Quellcode angezeigt anstatt des Ergebnisses.
Das kann auch noch einen anderen Grund haben: hast Du Dein Perlscript in ein Verzeichnis cgi-bin unterhalb Deines root-Dirs gelegt? Das ist eine Einschränkung bei dem Webserver, er verlangt diese Verzeichnisstruktur.
Gruß Frank
Danke Frank!
Ja, PERL, Path, etc. das war alles schon OK.
Die Zeile mit der es jetzt funktioniert heisst:
<area shape="rect" coords="220,290,235,306" href="http://localhost/cgi-bin/Test.pl" title="11" ></area>
"localhost" war der Haken.
Warum kann man den nicht weglassen z.B. href="/cgi-bin/Test.pl", wenn TinyWeb doch wissen sollte, was das Root-Verzeichnis ist?
Funktioniert das mit dem localhost hoffentlich dann auch auf dem öffentlichen Server, ich möchte ja schliesslich nicht alle meine HMTL Dateien wieder editieren?
Aber nun ergibt sich eine noch weitere Frage:
Wie schaffe ich es, dass dieses PERL Skript NICHT dazu führt, dass eine neue blanke Seite aufgerufen wird?
Ich möchte lediglich, dass das PERL Skript im Hintergrund etwas liest oder schreibt und nicht die aktuelle HTML Seite verändert oder nochmals neu geladen wird. Wie erreicht man das? ...target=???
Moin.
Ja, PERL, Path, etc. das war alles schon OK.
Ja, wenn ich geich richtig gelesen hätte ;-)
Warum kann man den nicht weglassen z.B. href="/cgi-bin/Test.pl", wenn TinyWeb doch wissen sollte, was das Root-Verzeichnis ist?
Das weiß TinyWeb auch, ich vermute, Du hast entweder Deine HTML-Seite nicht mit http://localhost/... aufgerufen, sondern als File im Browser geöffnet oder eine Adressbasis in Deiner Seite festgelegt, die eben woanders "hinzeigt". Es muß so gehen, die Du es oben geschrieben hast.
Funktioniert das mit dem localhost hoffentlich dann auch auf dem öffentlichen Server, ich möchte ja schliesslich nicht alle meine HMTL Dateien wieder editieren?
Natürlich nicht... localhost gibt es auf dem öffentlichen Server auch, nur "zeigt" es nicht auf Dein Web-root. Außerdem: hast Du schon Webspace mit Perl? Wie sind dort die Pfade, ist cgi-bin auch das cgi-Verzeichnis? Wenn nicht, mußt Du sowieso ändern... Aber so, wie Du es ursprünglich gemacht hast (relative Angaben), ist es besser, es erspart auch bei einem Serverumzug viel Arbeit.
Es gibt übrigens einen Trick, die zukünftige Webadresse "auf Deinen Rechner zu legen" (weiß nicht, wie ich es sonst nennen soll).
Im Windowsverzeichnis liegt unter system32\drivers\etc\ die Datei hosts. Das ist so etwas wie ein "lokaler DNS"
Trage hier z.B. folgendes ein (nur die Domain, nicht irgendwelch Pfade):
127.0.0.1 www.meinedomain.de
Dann kannst Du im Browser http://www.meinedomain.de/ eintippen und Du landest auf Deinem lokalen Webserver, der ja an localhost, also 127.0.0.1 lauscht. Aber beachte: URLs, die dort eingetragen sind, erreichst du nicht mehr im Internet. Wenn Du also Deine zukünftige Domain schon kennst, trage sie dort ein. Und vergiß nicht, sie rechtzeitig wieder zu löschen ;-)
Aber nun ergibt sich eine noch weitere Frage:
Wie schaffe ich es, dass dieses PERL Skript NICHT dazu führt, dass eine neue blanke Seite aufgerufen wird?
Ich möchte lediglich, dass das PERL Skript im Hintergrund etwas liest oder schreibt und nicht die aktuelle HTML Seite verändert oder nochmals neu geladen wird. Wie erreicht man das? ...target=???
Dein Script muß einen passenden Status Code zurückgeben, dafür gibt es den Status Code "204 No Content". Bisher macht Dein Script so etwas: print "Content-type: text/html\n\n"; Der Browser erwartet Inhalte, es kommt nix, also bleibt die Seite leer. Dort sollte das stehen: print "HTTP/1.0 204 No Content\n\n";
Aber: Der Surfer klickt auf den Link und wundert sich, daß nichts passiert. Also klickt er nochmal. Und nochmal. Willst Du das?
Also dann doch vielleicht eine Seite ausgeben, mit dem Hinweis, das er geklickt hat. Das kannst Du z.B. mit einem redirect machen, Dein Script kann abhängg vom Ergebnis auf unterschiedliche Seiten lenken:
print "Status: 302 Found\n";
print "Location: $location\n";
Wobei $location die URL der Seite enthält.
Gruß Frank