hilfdirselbst.ch
Facebook Twitter gamper-media

"Geht nicht" ist keine gültige Fehlermeldung!


Forenindex » Programmierung/Entwicklung » Perl und CGI » while-Schleife: Ausgabe unterteilen

 



trueprojects p
Beiträge: 52

12. Jan 2006, 23:42

Beitrag #1 von 7
Bewertung:

(8369 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

while-Schleife: Ausgabe unterteilen


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
it seem to be true


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

oesi50  A  S
Beiträge: 2280

13. Jan 2006, 10:08

Beitrag #2 von 7
Beitrag ID: #204705

Bewertung:

(8361 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

while-Schleife: Ausgabe unterteilen


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";
}



Grüße Oesi
Ich weiß, dass ich nicht weiß... (Sokrates)

als Antwort auf: [#204650] Top

trueprojects p
Beiträge: 52

14. Jan 2006, 18:27

Beitrag #3 von 7
Beitrag ID: #204917

Bewertung:

(8344 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

while-Schleife: Ausgabe unterteilen


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>
it seem to be true

als Antwort auf: [#204705] Top

trueprojects p
Beiträge: 52

14. Jan 2006, 19:15

Beitrag #4 von 7
Beitrag ID: #204924

Bewertung:

(8341 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

while-Schleife: Ausgabe unterteilen


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";
}
}


it seem to be true

als Antwort auf: [#204917] Top

SabineP  M 
Beiträge: 7586

15. Jan 2006, 14:47

Beitrag #5 von 7
Beitrag ID: #204969

Bewertung:

(8316 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

while-Schleife: Ausgabe unterteilen


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)
Top

trueprojects p
Beiträge: 52

16. Jan 2006, 00:09

Beitrag #6 von 7
Beitrag ID: #205011

Bewertung:

(8301 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

while-Schleife: Ausgabe unterteilen


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ü
it seem to be true

als Antwort auf: [#204969] Top

SabineP  M 
Beiträge: 7586

16. Jan 2006, 00:20

Beitrag #7 von 7
Beitrag ID: #205012

Bewertung:

(8298 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

while-Schleife: Ausgabe unterteilen


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] Top


Forenindex » Programmierung/Entwicklung » Perl und CGI » while-Schleife: Ausgabe unterteilen


^