[GastForen Archiv Perl und CGI while-Schleife: Ausgabe unterteilen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Archiv - Archivierte Foren
Themen
Beiträge
Moderatoren
Letzter Beitrag

while-Schleife: Ausgabe unterteilen

trueprojects
Beiträge gesamt:

12. Jan 2006, 23:42
Beitrag # 1 von 7
Bewertung:
(29151 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich möchte die Ergebniss einer Datenbankabfrage, die mit einer while-Schleife ausgegeben werden, für eine bessere Lesbarkeit in Blöcke unterteilen (mit <p> oder <br>). Wie stelle ich das an?

Bsp.: so ähnlich hätte ich die Ausgabe gerne:

<p>Datensatz | 1<br>
Datensatz | 2<br>
Datensatz | 3</p>

<p>Datensatz | 4<br>
Datensatz | 5<br>
Datensatz | 6</p>

Das Script funktioniert momentan noch nach diesem Prinzip:
Code
my $Abfrage = $db->prepare("select * FROM tb_name WHERE ..."); 
print $db->errstr; #Errorstring
$Abfrage->execute ();

while(my @Ergebnis = $Abfrage->fetchrow_array){
# ---> Sonderzeichen escapen
@Ergebnis = map CGI::escapeHTML($_), @Ergebnis;
print "$Ergebnis[0]&nbsp;|&nbsp;$Ergebnis[1]<br />\n";
}


Viele liebe Grüße

(Dieser Beitrag wurde von trueprojects am 12. Jan 2006, 23:44 geändert)
X

while-Schleife: Ausgabe unterteilen

oesi50
  
Beiträge gesamt: 2315

13. Jan 2006, 10:08
Beitrag # 2 von 7
Beitrag ID: #204705
Bewertung:
(29111 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi hanü,

verwende einfach einen Zähler. Dann kannst du abhängig vom Zählerstand verschiedene Ausgaben durchführen.

Code
my $zz = 0; 
print "<p>\n";
while( ..... ){
print "Datensatz";
if(++$zz % 3 ){
print "<br>\n";
}
else{
print "</p>\n<p>\n";
}
}
if($zz % 3){
print "</p>\n";
}



als Antwort auf: [#204650]

while-Schleife: Ausgabe unterteilen

trueprojects
Beiträge gesamt:

14. Jan 2006, 18:27
Beitrag # 3 von 7
Beitrag ID: #204917
Bewertung:
(29094 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke. Das funktioniert! Allerdings schreibt es mir ein <p> zuviel in den Quelltext, wenn die Anzahl der Datenbankeinträge einem Vielfachen der Zeilenanzahl in einem Block entspricht.

Habe ich z.B. 6 Einträge, sieht die HTML-Ausgabe so aus:
<p>Eintrag1<br>
Eintrag2<br>
Eintrag3</p>
<p>Eintrag4<br>
Eintrag5<br>
Eintrag6</p>
<p>


als Antwort auf: [#204705]

while-Schleife: Ausgabe unterteilen

trueprojects
Beiträge gesamt:

14. Jan 2006, 19:15
Beitrag # 4 von 7
Beitrag ID: #204924
Bewertung:
(29091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wie kann ich "keine Einträge vorhanden" mit der while-Schleife anzeigen? Ich habe jetzt schon mehrere Kombinationen ausprobiert, aber nichts hat gefruchtet. Hier mein letzter Versuch dazu:
Code
my $zz = 0; 

print "Content-type: text/html\n\n";
print "<p>\n";

my $query2 = $db->prepare("select * FROM tabelle WHERE...");
print $db->errstr; #Errorstring
$query2->execute ();

if ($query2->fetchrow_array == 0) {
print "· Keine Einträge vorhanden.<br />&nbsp\;\n";
print "</p>\n";
}
else {

while(my @aktuell = $query2->fetchrow_array){

# ---> Sonderzeichen escapen
@aktuell = map CGI::escapeHTML($_), @aktuell;

print "$aktuell[0] $aktuell[1]";
if(++$zz %4){
print "<br />\n";
}
else{
print "</p>\n<p>\n";
}
}
if($zz % 4){
print "<br />&nbsp\;</p>\n";
}
}




als Antwort auf: [#204917]

while-Schleife: Ausgabe unterteilen

SabineP
Beiträge gesamt: 7586

15. Jan 2006, 14:47
Beitrag # 5 von 7
Beitrag ID: #204969
Bewertung:
(29066 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

Du hast doch einen Zählerstand.
Wenn der Zähler auf 0 steht,
dann gib den Text "keine Einträge vorhanden" aus.

An Hand des Zählerstandes kannst Du auch die <br> und <p> ermitteln,
die benötigt werden für die Formatierung.

Die schließenden </p> kannst Du weglassen, dadurch wird´s einfacher.
Ein Beispiel:

#!/usr/bin/perl

my $zz = 0;
while( $x++ < 11 ){
print "\n<p>\n" if (!($zz++ % 3));
print "Datensatz: $x <br>\n";
}

print qq|nix gefunden| if (!$zz);

Gruß Sabine


als Antwort auf: [#204924]
(Dieser Beitrag wurde von SabineP am 15. Jan 2006, 15:04 geändert)

while-Schleife: Ausgabe unterteilen

trueprojects
Beiträge gesamt:

16. Jan 2006, 00:09
Beitrag # 6 von 7
Beitrag ID: #205011
Bewertung:
(29051 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Sabine,
danke für deine rasche Antwort. Aber wenn <p> nicht geschlossen wird ist der Code doch nicht valide ?! Was hälst du davon:

Code
#!/usr/bin/perl 
[..]
my $zz = 0;
my $query = $db->prepare("select * FROM td WHERE...");
print $db->errstr; #Errorstring
$query->execute ();

while(my @datensatz = $query->fetchrow_array){
print "<p>\n" if (!($zz++ % 3));
print "$datensatz[0] $datensatz[1] ...";
if($zz %3){
print "<br />\n";
}
else{
print "</p>\n";
}
}
print "</p>\n" if ($zz % 3);
print "<p>Nix eingetragen</p>\n" if (!$zz);


So kann es zwar noch vorkommen, dass ein Absatz direkt nach einem Umbruch geschlossen wird (<br></p>), aber dafür wird meines Wissens jeder Absatz geschlossen?!

Danke nochmal, viele Grüße, Hanü


als Antwort auf: [#204969]

while-Schleife: Ausgabe unterteilen

SabineP
Beiträge gesamt: 7586

16. Jan 2006, 00:20
Beitrag # 7 von 7
Beitrag ID: #205012
Bewertung:
(29048 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

die Absätze müssen nicht geschlossen werden mit </p>, das ist valide ohne </p>

http://www.w3.org/...uct/text.html#edef-P

Start tag: required, End tag: optional

Gruß Sabine


als Antwort auf: [#205011]
X