Zurück

Zurück

am 16.04.2006 14:05:02 von Heiko Rompel

Frohe Ostern.


Das ich mittels "redirect" zu einer bestimmten URL springen kann weiß ich
mittelweile, aber wie sorge ich ohne JavaScript dafür , das der Browser
"eine Seite zurück" geht?

Im Netz und in "Perldoc cgi" habe ich nichts gefunden.

Geht obiges nicht oder suche ich nur nach den flaschen Beriffen?

MfG
Heiko

Re: Zurück

am 16.04.2006 14:38:47 von Thomas Wittek

> Das ich mittels "redirect" zu einer bestimmten URL springen kann weiß=
ich
> mittelweile, aber wie sorge ich ohne JavaScript dafür , das der Brows=
er
> "eine Seite zurück" geht?

Kannst höchstens einen weiteren Redirect zur letzten Seite machen. Die
musst du dann "irgendwo" (Cookie, Session, ..) speichern.

Den "Back-Button" kann man sonst nur mittels JavaScript ansprechen.

-Thomas

Re: Zurück

am 16.04.2006 18:25:57 von Michael Perle

Heiko Rompel wrote:
> Frohe Ostern.
>
>
> Das ich mittels "redirect" zu einer bestimmten URL springen kann weiß ich
> mittelweile, aber wie sorge ich ohne JavaScript dafür , das der Browser
> "eine Seite zurück" geht?
>
> Im Netz und in "Perldoc cgi" habe ich nichts gefunden.
>
> Geht obiges nicht oder suche ich nur nach den flaschen Beriffen?

Hallo und auch frohe Ostern.
Habe einen neuen Alias vom Osterhasen gekriegt! :-)

Zurückspringen:
Du willst wissen, was der URL von der vorherigen
Seite war. Die Browser schicken im allgemeinen diese
Information mit; wenn man von ein paar speziellen
Fällen (Crawler, Eigenbaut, wget-Aufrufe) absieht.

Im CGI wird auf der Basis dieser Information
die Umgebungsvariable HTTP_REFERER gesetzt.

Wenn Du Deinen Redirect nach $ENV{'HTTP_REFERER'}
machst, dann wird er eine Seite zurückspringen.

Man beachte übrigens den Rechtschreibefehler, der in
der Tat so in die CGI-Spezifikation übernommen wurde.
(Referrer sollte eigentlich zwei 'r' haben.)

M.

Re: Zurück

am 17.04.2006 08:31:23 von Heiko Rompel

Moin,

"Michael Perle" schrieb:

> Im CGI wird auf der Basis dieser Information
> die Umgebungsvariable HTTP_REFERER gesetzt.

Ich wußte doch das man irgendwie an die Info kommen muß.

> Wenn Du Deinen Redirect nach $ENV{'HTTP_REFERER'}
> machst, dann wird er eine Seite zurückspringen.

Mache ich das so : print $q->redirect($ENV{'HTTP_REFERER'});
erhalte ich auf der Aufrufenden Seite nur ein "302 ...."
auf dem Schirm, ohne das ich zurück springe.

Mache ich das so:


Springe ich zwar auf die vorherige Seite, aber alle Eingaben die
dort gemacht wurden sind gelöscht.

Ich möchte aber zurückspringen ohne das die Eingaben
(unter Umständen viel Text) gelöscht werden.

Setze ich method auf "get" oder lasse sie ganz weg, dann lade ich
auf der falschen Seite.

> Man beachte übrigens den Rechtschreibefehler, der in
> der Tat so in die CGI-Spezifikation übernommen wurde.
> (Referrer sollte eigentlich zwei 'r' haben.)

Auch Fehler haben das Recht zu sein. :-)

MfG
Heiko

Re: Zurück

am 17.04.2006 10:58:46 von Christian Garbs

Mahlzeit!

Heiko Rompel wrote:

> Mache ich das so:
>
> Springe ich zwar auf die vorherige Seite, aber alle Eingaben die
> dort gemacht wurden sind gelöscht.
>
> Ich möchte aber zurückspringen ohne das die Eingaben
> (unter Umständen viel Text) gelöscht werden.

Ist die vorangehende Seite von Dir?
Dann musst Du die gemachten Eingaben zwischenspeichern und in der
vorangegangenen Seite wieder laden und als Vorbelegung ausgeben.

Ist die vorangegangene Seite nicht unter Deiner Obhut?
Dann hast Du verloren. Hier würde Dir lediglich das JavaScript-Zurück
helfen können. Das Web funktioniert nun mal so.

Gruß,
Christian
--
sub _{print"\n"}_;for(;$s<9;++$s){$_='1E2018201E00001E2018201E00001E2018201'
..'E002020001C2222221400005CA2A2A27C02001C2222221C20003E0402 02201F2422221C00'
..'242A2A2A12002020001C2222221F20001C2A2A2A0C';while(s;(..); ;){printf'%c',hex
$1&1<<$s?40:32}_}$_=':::Christian Garbs:',y;:;\t;;print;_;_

Re: Zurück

am 17.04.2006 12:02:53 von Heiko Rompel

Hallo,

"Christian Garbs" schrieb:

> Ist die vorangehende Seite von Dir?

Ja.

> Dann musst Du die gemachten Eingaben zwischenspeichern und in der
> vorangegangenen Seite wieder laden und als Vorbelegung ausgeben.

Warum muss das alles so umständlich sein?!
Trotzdem Danke für die Info.

MfG
Heiko

Re: Zurück

am 17.04.2006 15:40:22 von Christian Garbs

Mahlzeit!

Heiko Rompel wrote:
> "Christian Garbs" schrieb:

>> Dann musst Du die gemachten Eingaben zwischenspeichern und in der
>> vorangegangenen Seite wieder laden und als Vorbelegung ausgeben.
>
> Warum muss das alles so umständlich sein?!

Den Teil hast Du nicht mitzitiert: "Das Web funktioniert nun mal so."
HTTP ist zustandslos.

Gruß,
Christian
--
sub _{print"\n"}_;for(;$s<9;++$s){$_='1E2018201E00001E2018201E00001E2018201'
..'E002020001C2222221400005CA2A2A27C02001C2222221C20003E0402 02201F2422221C00'
..'242A2A2A12002020001C2222221F20001C2A2A2A0C';while(s;(..); ;){printf'%c',hex
$1&1<<$s?40:32}_}$_=':::Christian Garbs:',y;:;\t;;print;_;_

Re: Zurück

am 17.04.2006 19:06:48 von Michael Perle

Heiko Rompel wrote:
> Moin,
>
> "Michael Perle" schrieb:
>
>> Im CGI wird auf der Basis dieser Information
>> die Umgebungsvariable HTTP_REFERER gesetzt.
>
>
> Ich wußte doch das man irgendwie an die Info kommen muß.
>
>> Wenn Du Deinen Redirect nach $ENV{'HTTP_REFERER'}
>> machst, dann wird er eine Seite zurückspringen.
>
>
> Mache ich das so : print $q->redirect($ENV{'HTTP_REFERER'});
> erhalte ich auf der Aufrufenden Seite nur ein "302 ...."
> auf dem Schirm, ohne das ich zurück springe.

Alternative:
print "Location: ${ENV{'HTTP_REFERER'}}\n\n";

Eventuell wäre das auf Standard-Konformintät zu überprüfen.

> Mache ich das so:
> > method="post">
> Springe ich zwar auf die vorherige Seite, aber alle Eingaben die
> dort gemacht wurden sind gelöscht.
>
> Ich möchte aber zurückspringen ohne das die Eingaben
> (unter Umständen viel Text) gelöscht werden.

Wie schon jemand erklärt hat, ist HTTP nun mal stateless.
Die Seite weiß nicht mehr, dass der Besucher schon dort
war.

Vielleicht willst Du ja gar nicht auf die vorherige
Seite zurückspringen. Wenn jemand vor dem Posten
noch was ändern will (ich nehme an, darum geht es),
dann kannst Du ihm oder ihr doch das Post-Formular
einfach mit den bisher bereits gesendeten Daten
anbieten.

Das scheint mir ohnehin die sauberste Lösung:
Du gibtst Dein Formular von Anfang an mit Perl (CGI)
aus. Wenn der Benutzer das erste Mal darauf kommt, dann
sind alle Werte im Ursprungszustand.
Soll er nochmal dorthin "zurück" kommen, kriegt er eben
genau dieses Formular nochmal neu aufgebaut, aber mit
den zuvor eingeschickten Daten.

Keine allzugroße Herausforderung, würde ich sagen.

Mipe

Re: Zurück

am 17.04.2006 23:55:53 von Wolf Behrenhoff

Heiko Rompel schrieb:
> Moin,
>
> "Michael Perle" schrieb:
>
>> Im CGI wird auf der Basis dieser Information
>> die Umgebungsvariable HTTP_REFERER gesetzt.
>
> Ich wußte doch das man irgendwie an die Info kommen muß.

Du kommst so aber nicht an die Info. Du kommst so an die Info, die der
Browser des Benutzers dir mitliefert. Das kann zwar richtig sein, aber
niemand garantiert es dir. Ich habe Referrer-logging zum Beispiel bei
meinem Browser in der Regel ausgeschaltet.

Wolf

Re: Zurück

am 18.04.2006 18:59:47 von Heiko Rompel

Hallo,

"Michael Perle" schrieb:

> Wie schon jemand erklärt hat, ist HTTP nun mal stateless.
> Die Seite weiß nicht mehr, dass der Besucher schon dort
> war.

Nein aber der Browser in seinem Cache.

> Vielleicht willst Du ja gar nicht auf die vorherige
> Seite zurückspringen.

Doch.

> Wenn jemand vor dem Posten
> noch was ändern will (ich nehme an, darum geht es),

Nein.
Es geht darum, das das Formular abgeschickt wurde und
das Script dann festgestellt hat, das der Benutzer
an einer Stelle Blödsinn eingetragen hat.
Damit er aber nicht alles löschen muß,
wollte ich einfach zurück gehen.

> dann kannst Du ihm oder ihr doch das Post-Formular
> einfach mit den bisher bereits gesendeten Daten
> anbieten.

Das bedeutet aber, das das Formular so
aufgebaut sein muß, das es Werte vorgeben kann.

> Das scheint mir ohnehin die sauberste Lösung:
> Du gibtst Dein Formular von Anfang an mit Perl (CGI)
> aus. Wenn der Benutzer das erste Mal darauf kommt, dann
> sind alle Werte im Ursprungszustand.
> Soll er nochmal dorthin "zurück" kommen, kriegt er eben
> genau dieses Formular nochmal neu aufgebaut, aber mit
> den zuvor eingeschickten Daten.
> Keine allzugroße Herausforderung, würde ich sagen.

Wir mir wohl nichts anderes übrigbleiben.

MfG
Heiko

Re: Zurück

am 18.04.2006 19:36:50 von hjp-usenet2

Heiko Rompel wrote:
> "Michael Perle" schrieb:
>> Wie schon jemand erklärt hat, ist HTTP nun mal stateless.
>> Die Seite weiß nicht mehr, dass der Besucher schon dort
>> war.
>
> Nein aber der Browser in seinem Cache.

Aber auf den der Server (aus gutem Grund!) keinen Zugriff.


>> Vielleicht willst Du ja gar nicht auf die vorherige
>> Seite zurückspringen.
>
> Doch.

Nach Deiner Beschreibung: Nein, das willst Du nicht. Oder zumindest
Deine Benutzer wollen nicht, dass Du das tust.


>> Wenn jemand vor dem Posten
>> noch was ändern will (ich nehme an, darum geht es),
>
> Nein.
> Es geht darum, das das Formular abgeschickt wurde und
> das Script dann festgestellt hat, das der Benutzer
> an einer Stelle Blödsinn eingetragen hat.

Dann zeigst Du einfach das Formular noch einmal an und färbelst die
Felder rot ein, wo der User Blödsinn eingetragen hat. Dazu musst Du
nicht zurückgehen, das wäre sogar kontraproduktiv, weil der User dann
nicht weiß, was er falsch gemacht hat.


> Damit er aber nicht alles löschen muß,
> wollte ich einfach zurück gehen.

Meistens hat man beim Ausfüllen eines Formulars nicht alles falsch
gemacht, sondern nur in einem Feld einen Fehler gemacht. Da das ganze
Formular zu löschen und ihn zwei Dutzend Felder noch einmal eingeben zu
lassen, nur weil er in der Telefonnummer die Klappe mit einem
Schrägstrich statt einem Bindestrich abgetrennt hat, ist extrem
benutzerunfreundlich.

>> dann kannst Du ihm oder ihr doch das Post-Formular
>> einfach mit den bisher bereits gesendeten Daten
>> anbieten.
>
> Das bedeutet aber, das das Formular so
> aufgebaut sein muß, das es Werte vorgeben kann.

Das kann jedes HTML-Formular. Und in einem Perl-Script ist es auch kaum
mehr Aufwand ein vorausgefülltes statt einem leeren Formular zu
produzieren. Die Daten hast Du ja.

hp

--
_ | Peter J. Holzer | Man könnte sich [die Diskussion] auch
|_|_) | Sysadmin WSR/LUGA | sparen, wenn man sie sich einfach sparen
| | | hjp@hjp.at | würde.
__/ | http://www.hjp.at/ | -- Ralph Angenendt in dang 2006-04-15

Re: Zurück

am 19.04.2006 14:38:41 von struebig

Heiko Rompel wrote:
> Es geht darum, das das Formular abgeschickt wurde und
> das Script dann festgestellt hat, das der Benutzer
> an einer Stelle Blödsinn eingetragen hat.
> Damit er aber nicht alles löschen muß,
> wollte ich einfach zurück gehen.

Genau das passiert, wenn du das Formular mit dem CGI Modul erzeugen läßt
völlig automatisch. D.h. wenn du einfach das Fomrular nochmal ausgibst
(mit dem CGI Modul) dann sind alle Felder wieder ausgefüllt, wie zuvor.

Struppi.