perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




11.02.2012 / 23:40

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDRINGEND: Perl Variablen über mehrere Reloads erhalten.....
Seitenanfang
Hallo.
Ich habe folgendes Problem:

Ich habe eine Webseite auf der eine Tabelle angezeigt wird, die mittels Perl aus einer Datenbank (MySQL) erzeugt.

Eine der Spalten der Tabelle sollen nun Links sein. Soweit kein Problem.

Wenn nun aber einer dieser Links geklickt wird soll Perl irgendwie eine Variable beschreiben, zu welcher Zeile der geklickte Link gehört. Dann soll dieselbe Seite neu geladen werden und direkt unter der Zeile, die eben geklickt wurde soll nun eine eingeschobene Tabelle erscheinen in der Details zur geklickten Zeile stehen (also eine verschachtelte Tabelle).

Das Problem ist nun, dass in dem momentanen Zustand (Tabelle mit Tabelle drin...) wieder eine andere Zeile angeklickt werden können soll und sich dann das ganze Wiederholt, so daß nun eine Tabelle zu sehen ist, in der an zwei Stellen eine weitere Tabelle eingeschachtelt ist. Wenn auf eine Zeile geklickt wird, deren Details schon da sind, dann soll diese Detailtabelle wieder weg!

Das Problem lässt sich reduzieren auf folgendes:
Ich benötige eine Art und Weise, wie ich beliebig viele Variablen speichern kann und diese Variablen über mehrer Reloads der Seite verfügbar bleiben. In JavaServlets gibts die Möglichkeit in die Session Attribute zu schreiben...sowas wäre ideal.....

Irgendwelche Ideen? Alles kapiert?

Danke für eure Antworten.

Benni

Datum: 19.07.2005-13:40

Beitragre: DRINGEND: Perl Variablen über mehrere Reloads erhalten.....
Seitenanfang
Hi,

zum Thema 'Tabelle in Tabelle' fiele mir DHTML in Verbindung mit JavaScript ein, dann braucht man die Seite nicht neu laden, wenn auf den Link geklickt wurde. Es gibt immer noch Leude, die ein Modem oder ISDN haben. ;-)

Eine verschachtelte Tabelle wäre mir übrigens viel zu viel Arbeit. Denn eines ist klar, Du hast dann genau so viele if-Abfragen, wie Deine Tabelle Zeilen hat! Dann lieber einen selbst Programmierten Tooltip bei einem onClick. ;-)

Und zum Thema 'Variablen' fiele mir eine Temporär- Tabelle in der Datenbank ein, die ungefähr so aussehen könnte:


CREATE TABLE tmp_vars (
index serial,
sessionID varchar(32) PRIMARY KEY,
value varchar(1024)
);
INSERT INTO tmp_value VALUES (
1,
's0ce456mhhsw40jg',
'var1=x&var2=y&var3=z'
);

Eine andere Möglichkeit wäre mit temporären Dateien zu arbeiten, wobei die SQL Datenbank natürlich wesentlich schneller ist.

-uw

Datum: 19.07.2005-17:30

Beitragre: DRINGEND: Perl Variablen über mehrere Reloads erhalten.....
Seitenanfang
Wenn schon Javascript, koennte man anstelle der verschachtelten Tabellen bei einem kompletten Seiten-Reload auch eine andere Loesung verwenden:

Unter jeder Linkzeile der Tabelle wird eine weitere Zeile eingefuegt, die erst mal ausgeblendet ist. In dieser Tabellenzeile ist ein IFRAME ohne SRC-Attribut eingebettet. Bei einem Klick wird die darunter befindliche Zeile sichtbar gemacht und der IFRAME bekommt ein SRC zugewiesen, das dann nachgeladen wird. Bei diesem Request kann Perl dann die verschachtelte Tabelle ausgeben. Bei einem weiteren Klick wird dann die Zeile drunter wieder ausgeblendet.

Geht schneller als die ganze Seite neu zu laden und ist weniger Verwaltungsaufwand welche Zeilen der Tabelle ausgeklappt sind.

In Vollendung und zum Pluendern ist das von mir geschilderte System z.B. bei der Liste der Suchergebnisse auf isohunt.com zu bewundern.

Datum: 19.07.2005-21:23

Beitragre: DRINGEND: Perl Variablen über mehrere Reloads erhalten.....
Seitenanfang

du hast scheinbar keine Sessionverwaltung in deinem Script.
such mal unter http://search.cpan.org/ nach "Session"

Ein Session-Modul stellt dir eine "magische" Hashreferenz zur Verfügung, in der du Variablen ablegen kannst

Empfehlung: Apache::Session
wenn du unter mod_perl arbeitest, unter CGI das folgende Modul:


package MySession;

use Apache::Session::File;
use CGI;

our @EXPORT=qw(initSession);

BEGIN {
mkdir '/tmp/sessions';
mkdir '/tmp/sessionLock';
}

sub initSession {
my $Session = shift;
warn "initSession starts\n";
my $cookie;
if ($id = CGI::cookie('SessionID')) { # schon gesendet
eval {
warn "tie($id) in $$\n";
tie %$Session, 'Apache::Session::File', $id, {
Directory => '/tmp/sessions',
LockDirectory => '/tmp/sessionLock',
};
warn "tie($id) done in $$\n";
};
if ($@) {
warn "Oops: $@\n";
tie %$Session, 'Apache::Session::File', undef, {
Directory => '/tmp/sessions',
LockDirectory => '/tmp/sessionLock',
};
$cookie = CGI::cookie(
-name=>'SessionID',
-value=> $Session->{_session_id},
-expires=>'+12M',
);
return $cookie;
}

} else { # erster kontakt
warn "first tie(undef) in $$\n";
tie %$Session, 'Apache::Session::File', undef, {
Directory => '/tmp/sessions',
LockDirectory => '/tmp/sessionLock',
};
warn "first tie($Session->{_session_id}) done in $$\n";
$cookie = CGI::cookie(
-name=>'SessionID',
-value=> $Session->{_session_id},
-expires=>'+12M',
);
return $cookie;
}
return undef;
}

1;

-----------------------------------------------
im CGI-script dann:

my %Session;

my $cookie = initSession(\%Session);

...

if ($cookie) {
print $q->header(-type => 'text/html',
-content_length => length($txt),
-cookie => $cookie,
);
} else {
print $q->header(-type => 'text/html',
-content_length => length($txt),
);
}

Datum: 20.07.2005-22:19

-






-
-