Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]194[/thread]

Ergebnisse einer DB-Abfrage strukturieren: nicht alle auf einer Seite ausgeben



<< >> 10 Einträge, 1 Seite
learner
 2004-03-05 09:59
#1539 #1539
User since
2004-03-04
15 Artikel
BenutzerIn
[default_avatar]
Hallo,

bin Anfänger und kann nirgendwo entsprechenden Code für Standardvorgehen finden.

Aufgabe: die erhaltenen Ergebnisse einer mySQL-Abfrage nicht auf einer Seite ausgeben, sondern -wie allgemein üblich- z.B. die ersten 10 und dann unten auf der Seite weitere Links in der Form [1] [2] [3] ......

Ein Code-Ausschnitt einer solchen Seite sieht z.B. so aus:
Code: (dl )
1
2
3
4
5
6
<TD align=right colSpan=2>
<P class=txtr><B>[1]</B> <A class=blue
href="http://www.files.de/Windows/Windows_XP/Programmierung/Programmierung/Active_X_DLL/seite_2.html">[2]</A>
<A class=blue
href="http://www.files.de/Windows/Windows_XP/Programmierung/Programmierung/Active_X_DLL/seite_3.html">[3]</A>
<A class=blue


Mein bisheriger Code
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$sel = "select ..........."
my $sth = $dbh->prepare($sel);
$sth->execute();
.....
if ($sort1 eq "dat")
{
while (my ($hindat, $backdat, $gpreis) = $sth->fetchrow_array())
{
my $fhindat = substr($hindat,8,2).".".substr($hindat,5,2).".".substr($hindat,0,4);
my $fbackdat = substr($backdat,8,2).".".substr($backdat,5,2).".".substr($backdat,0,4);
my $fgpreis = $gpreis." EUR";
"<table class='blind' cellspacing='10'><tr>",
"<td>$fhindat</td><td>$fbackdat</td><td>$fgpreis</td><td></td>",
"</tr></table>",
}
}
....


gibt natürlich alle Ergebnisse auf einer Seite aus.

Wie muss ich vorgehen, dass wie oben die Ergebnisse auf mehreren Seiten (zwischen)gespeichert werden

seite_2.html, seite_3.html,.....

Danke für Eure Hilfe
Gruß "learner"
renee
 2004-03-05 10:40
#1540 #1540
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Willst Du die weiteren Ergebnisse als seite_2.html ... speichern?? Oder willst Du das ganze dynamisch halten??

Ich würde das dynamisch machen, und im Link zu den weiteren Ergebnissen eine seiten_id mitgeben, damit man weiß, welche Ergebnisse ausgegeben werden sollen. Im Select-Statement kannst Du ja über das where angeben, welche Ergebnisse Du haben willst. z.b. [sql]... WHERE ID >= $startwert AND <=$endwert;[/sql]
Dein Startwert = ((seiten_id-1) * 10) +1; und
Dein Endwert = (seiten_id * 10);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
learner
 2004-03-05 10:51
#1541 #1541
User since
2004-03-04
15 Artikel
BenutzerIn
[default_avatar]
[quote=renee,05.03.2004, 09:40]Willst Du die weiteren Ergebnisse als seite_2.html ...  speichern?? Oder willst Du das ganze dynamisch halten??

Ich würde das dynamisch machen, und im Link zu den weiteren Ergebnissen eine seiten_id mitgeben, damit man weiß, welche Ergebnisse ausgegeben werden sollen. Im Select-Statement kannst Du ja über das where angeben, welche Ergebnisse Du haben willst. z.b. [sql]... WHERE ID >= $startwert AND <=$endwert;[/sql]
Dein Startwert = ((seiten_id-1) * 10) +1; und
Dein Endwert = (seiten_id * 10);[/quote]
Ich habe es erst versucht dynamisch zu machen (ersteinmal mit Button: nächste Ergebnisse)

Da ich für das SELECT etliche Parameter benötige, habe ich die mir als Proxies gespeichert (oder wäre es die bessere Lösung die Ergebnisse als form auszugeben mit hidden-fields, die die Parameter enthalten). Das funktioniert aber nur solange, als nicht der Back-Button des Browsers betätigt wird.

Dann werden Start- und Endwert weiter hochgezählt.

Gibt es eine Möglichkeit abzufragen, ob der Back-Button betätigt wurde ?

Gruß
learner
ptk
 2004-03-05 12:39
#1542 #1542
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nicht direkt. Man koennte aber eine Session mit sich fuehren und in diese eintragen, welche Seiten ein Benutzer bereits besucht hat (ich nenne sowas "pagestack"). Wenn der Benutzer nun eine Seite besucht, die bereits im Pagestack enthalten ist, dann hat er wahrscheinlich die Back-Taste verwendet oder hat einen direkten Link zu dieser Seite verwendet.

Uebrigens kennt (zumindest) MySQL LIMIT start,howmany, welches etwas eleganter als die zusaetzliche WHERE-Bedinung ist.
learner
 2004-03-05 12:52
#1543 #1543
User since
2004-03-04
15 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte meine Frage nochmal grundsätzlicher formulieren.

Wie wird standardmässig realisiert (wie ich es auf vielen Webseiten sehe), dass man innerhalb einer größeren Anzahl von erhaltenen Datensätzen beliebig navigieren kann (d.h. seitenweise blättern und auch springen) und auch die Betätigung des Back-Buttons korrekt funktioniert?

Danke für Eure Hilfe.

Gruß
learner
renee
 2004-03-05 13:12
#1544 #1544
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da wird der Link meistens so aufgebaut, dass die Parameter da drin stecken...

z.B. http:/ /www.dieDomain.tld/cgi-bin/skript.cgi?site=2&ord=asc&key=value usw...

So mache ich das auch und es funktioniert auch mit dem Back-Button...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
learner
 2004-03-05 13:56
#1545 #1545
User since
2004-03-04
15 Artikel
BenutzerIn
[default_avatar]
[quote=renee,05.03.2004, 12:12]Da wird der Link meistens so aufgebaut, dass die Parameter da drin stecken...

z.B. http:/ /www.dieDomain.tld/cgi-bin/skript.cgi?site=2&ord=asc&key=value usw...

So mache ich das auch und es funktioniert auch mit dem Back-Button...[/quote]
Danke !!

so funktionierts ganz einfach, auch ohne Cookies

Gruß
learner
Strat
 2004-03-05 22:39
#1546 #1546
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wie gefaellt euch
[sql]SELECT * FROM xyz LIMIT $startwert, $startwert +10
[/sql]
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
learner
 2004-03-05 23:16
#1547 #1547
User since
2004-03-04
15 Artikel
BenutzerIn
[default_avatar]
[quote=Strat,05.03.2004, 21:39]wie gefaellt euch
[sql]SELECT * FROM xyz LIMIT $startwert, $startwert +10
[/sql][/quote]
Das war nicht das Problem. Ich nutze
"...LIMIT wert1, wert2"

Das Problem war beim Navigieren (z.B. mit dem Back-Button des Browsers), die jeweils korrekte Übergabe des Startwertes
und das geht jetzt mit der URL.

Im übrigen habe ich LIMIT auch so verstanden, dass wert1 den Startwert angibt und wert2 den Endwert und war dann baff erstaunt, dass beim jeden "Aufruf: die nächsten 10 Sätze" immer mehr Sätze angezeigt wurden.

Erst mit "LIMIT startwert, anzahl funktionierts.

Also startwert gemäß anzahl hochzählen und anzahl konstant lassen (etwa 10 oder 20)
LIMIT 1, 20
LIMIT 21, 20
LIMIT 41, 20

Gruß
learner
Strat
 2004-03-05 23:59
#1548 #1548
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich setze da den link meistens mit: ?start=$startWertPlus10 oder so, und mache dann $cgi->param('start') zum neuen $startWert; dabei muss man nur darauf aufpassen, dass man nicht ueber irgendwelche grenzen hinausschiesst
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 10 Einträge, 1 Seite



View all threads created 2004-03-05 09:59.