PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : webseite in frame ändern



tennessee
03.11.2006, 15:26
hallo zusammen,

ich möchte über eine select box webseiten zur Verfügung stellen,
welche dann mittels knopfdruck nach Auswahl in rechten Framefenster zur verfügung gestellt werden.

(linke frame)
Der Teil der die Liste in die selectbox schreibt ist bereits vorhanden und der button zum laden auch. Wenn ich in der action der Form einen link mit target zu einer html seite angebe wird dieser auch per Knopfdruck geladen.

Ich müsste jetzt aus meiner Sicht eigentlich nur den ausgewählten Wert der select box anstelle der htmlseite angebe und schon wäre die Anforderung erfüllt. (siehe fett markierter bereich im code) leider geht das aber so nicht:

rot geht nicht grün geht ?(

habt Ihr eine idee?


print "<form name=form method=post action=/new/$webseite target=rechts>";


#!/usr/bin/perl -w
use strict;
use warnings;
use CGI qw(:all);
print "Content-type: text/html\n\n";
`./getlist.sh`;
my @liste=`cat list.txt` ;
print "<form name=form method=post action=/new/webseite.html target=rechts>";
print "<select name=web>";
foreach my $webseite (@liste) {
chomp $webseite;
print "<option value='$webseite'>$webseite</option>";
}
print "</select>";
print "<br>";
print "<br>";
print "<input type=submit value=laden onclick=load()></input>";

lordlamer
03.11.2006, 16:40
Hi,

1. ein wenig an den HTML-Standard halten! Das heisst <form action="...">
Also die attribute alle in tüddelchen setzen!!!

2. Was gibt den die Variable $website aus? Was sagt der generierte Quellcode den dazu?

Frank

Jabo
03.11.2006, 17:46
Hallo,

ich frage mich gerade, wie an der Stelle in $webseite was stehen soll? Das Script printet direkt, also steht das im Frame links von "rechts", oder?

Beim Start des Scriptes ist $webseite doch leer. Solange dem Script nicht ein Inhalt für $webseite neu übergeben wird, bleibt das doch so... bloß durch die Auswahl eines Formularfeldes passiert das nicht.

[edit]
und unten steht ein "onClick"-Event... dann mach das doch gleich über Javascript.... Perl kennt serverseitig die Links, JS reagiert auf "onSelect". Wäre das nicht besser?

Jehova1
03.11.2006, 19:22
Es ist bisher leider noch nicht so recht klar geworden, was du willst.
Wenn du nur eine Seite wechseln willst, warum brauchst du dann eine select und nicht einfach einen Link mit target=""?
Des Weiteren empfehle ich dir, dir das Arbeiten mit Frames komplett abzugewöhnen, die sind dreckig und böse.

tennessee
04.11.2006, 14:24
die select box wird mit werten aus einem verzeichnis listing betankt.
Das heisst wenn in einem bestimmten verzeichnis dateien (html seiten) werden diese in der select box eingeblendet.

bei click sollte dann die ausgewählte Seite im rechten frame erscheinen.

nun dachte ich mir das ich den wert aus der select box an die action des formulares übergebe.

<form name="form" action="/neue_webseiten/$wertausselect">
<select name=wertausselect>
<option value=Liste>Liste</option>
<input type=submit value=load>
das geht so aber nicht (der action teil) vermutlich syntax problem
mit php würde das so gehen, leider habe ich das nicht zur Verfügung (Richtlinien) Muss es also mit perl machen

das wiederum geht

<form name="form" action="/neue_webseiten/webseite.html">
so lädt er die seite in die rechte frame.

wenn ich nun also statt der webseite.html den value der select box plaziere
wäre meine Anforderung erfüllt.

tennessee
04.11.2006, 14:28
@lordlamer danke für den Hinweis, leider ist das mit den attributen ist leider nicht so ganz einfach wenn man die seite mit perl generiert.

print "<form name="form">";

das haut nicht hin. Und das so zu maskieren das es vielleicht das machen würde ist dann im code net so schön. Und so gehts ja auch.

In einer native html Umgebung setze ich die " natürlich schon :)

tennessee
04.11.2006, 14:51
<script language=JavaScript>
function load () {

document.location.href=document.form.web.value; <-- geht nicht

document.write(document.form.web.value)

}

</script>

onclick=load();

defcon
04.11.2006, 15:04
/*Tip geb*/
Vermeide mal Folgepostings... dafür gibts die Editierfunktion ;-)

Xanti
04.11.2006, 15:26
@lordlamer danke für den Hinweis, leider ist das mit den attributen ist leider nicht so ganz einfach wenn man die seite mit perl generiert.

print "<form name="form">";

das haut nicht hin. Und das so zu maskieren das es vielleicht das machen würde ist dann im code net so schön. Und so gehts ja auch.

In einer native html Umgebung setze ich die " natürlich schon :)

Dann nimm halt single quotation marks, das ist ebenfalls zulässig. Desweiteren lass Dir mal $wertausselect ausdrucken.

Gruss, Xanti

Jabo
04.11.2006, 16:32
Hallo,

ich glaube ich sehe dein Mißverständnis... weil du PHP erwähnt hast.

Wie du die <select>-Elemente füllst, ist deutlich und schön sichtbar. Aber:

In PHP sind Formular-Elemente mit "Name" gleich als Variable $Name verfügbar, in Perl ist das nicht so! In Perl mußt du die Inhalte aus dem Datenstromm raus fummeln! Du erzeugst aber gar keinen, die Variable wird deklariert und steht dann leer in der Gegend.

Aber auch in PHP: In dem Moment, wo die Variable erscheint, ist sie leer. Auch da müßtest du über URL ("http://......../$PHP_SELF?Name=$Name") oder über ein Hidden-Fromularfeld dafür sorgen, daß der Inhalt von <select> da auch ankommt. Einfach nur selecten und abschicken füllt die Variable nicht, vor allem wenn der Frame, in dem das Script steht, gar nicht neu geladen wird.

Sowas kann glaube ich nur Javascript event-gesteuert - dann gleich "onSelect" oder mit "<button.... onClick>" oder sowas.

Zu den Anführungszeichen: Wie Xanti sagt print "<form name='form'>"; (print '<form name="form">'; könnte auch gehen) oder mit Escape-Sequenz: print "<form name=\"form\">"; - das könnte auch klappen.

Ansonsten startest du mit print "<form name="form">"; einen String, der bei dem grünen Anführungszeichen beginnt und am roten endet; danach kommt dann Zeug, daß Perl nicht mehr einordnen kann: form>"; ist kein sinnvoller Befehl, steht außerhalb des Strings aber jetzt als solcher da.

Aber das ist in PHP auch nicht anders...