spalte formatieren mit perl
nadim
- perl
tag,
habe folgendes problem
hab eine tabelle mit 2zeilen und 3spalten
jetzt möchte ich gern ich jede zeile einen Datensatz einfügen.
soweit kein problem:
bsp.
<tr>
<td><div align="center">$result[1]</div></td>
<td><div align="center">$result[1]</div></td>
<td><div align="center">$result[1]</div></td>
</tr>
<tr>
<td><div align="center">$result[1]</div></td>
<td><div align="center">$result[1]</div></td>
<td><div align="center">$result[1]</div></td>
</tr>
mein problem liegt darin: wie ich eshinkriege, die spalten mit einer for schleife jeweils zu formatieren.
also dass sozusagen in jeder spalte ein anderer datensatz steht.
wäre über hilfe wirklich dankbar.
schönen tag noch
die datensätze krige ich über eine while schleife rausgefischt:
while (my @result = $sth->fetchrow_array) {
prine qq { etc};
}
while (my @result = $sth->fetchrow_array) { prine qq { etc};
das etc wäre ganz hilfreich
Hallo nadim
tag,
habe folgendes problem
hab eine tabelle mit 2zeilen und 3spalten
jetzt möchte ich gern ich jede zeile einen Datensatz einfügen.
soweit kein problem:
bsp.<tr>
<td><div align="center">$result[1]</div></td>
<td><div align="center">$result[1]</div></td>
<td><div align="center">$result[1]</div></td>
</tr>
<tr>
<td><div align="center">$result[1]</div></td>
<td><div align="center">$result[1]</div></td>
<td><div align="center">$result[1]</div></td>
</tr>
wozu die DIVs?
td
{
text-align:center;
}
reicht dafür.
also dass sozusagen in jeder spalte ein anderer datensatz steht.
horizontal?
Du meinst so?
while (my @result = $sth->fetchrow_array) {
print '<td>'. (join '<br>', @result) . '</td>';
}
Struppi.
use Mosche;
also dass sozusagen in jeder spalte ein anderer datensatz steht.
while (my @result = $sth->fetchrow_array) {
print '<td>'. (join '<br>', @result) . '</td>';
}
Es müsste tatsächlich auch anders gehen.
Er holt sich den gesamten zweidimensionalen Array aus der Datenbank. (fetchall_arrayref, jetzt als $array bekannt).
Dann nimmt er $array->[0], und iteriert über dessen Indize.
my @a = @{$array->[0]};
for (my $i=0; $i<@a; ++$i) {
for (my $j=0; $j<@$array; ++$j) {
print '<td>', $array->[$j]->{$i], "</td>\n";
}
}
So in etwa jedenfalls. Idee dahinter ist ja, dass man "normalerweise" (wenn man Datensätze in einer Zeile ausgibt) zuerst über den ersten Array iteriert, hier ist es halt genau anders herum.
use Tschoe qw(Matti);
also nochmal genauer erklärt:
danke erstmals
also nochmal.
habe eine tabelle mit
<table width="90%" height="186" border="2" cellpadding="0" cellspacing="0"><tr> <td><div align="center">1</div></td><td><div align="center">2</div></td><td><div align="center">3</div></td></tr><tr> <td><div align="center">4</div></td><td><div align="center">5</div></td><td><div align="center">6</div></td></tr></table>
so jetzt mache ich eine sql query mir random() -
und hol mir die datensätze.
mit einer while schleife
while (my @result = $sth->fetchrow_array) { print qq { <tr> <td><div align="center">$result[1]</div></td> <td><div align="center">$result[1]</div></td> <td><div align="center">$result[1]</div></td> </tr> <tr> <td><div align="center">$result[1]</div></td> <td><div align="center">$result[1]</div></td> <td><div align="center">$result[1]</div></td> </tr> };}
das problem nun ist- das z.b datensatz 1 jeweils 3x in der selben spalte angezeigt wird.
ich möchte aber das jeweils in einer spalte der nächste datensatz steht.
habe eine tabelle mit
<table width="90%" height="186" border="2" cellpadding="0" cellspacing="0"><tr> <td><div align="center">1</div></td><td><div align="center">2</div></td><td><div align="center">3</div></td></tr><tr> <td><div align="center">4</div></td><td><div align="center">5</div></td><td><div align="center">6</div></td></tr></table>
Wozu die div's?
CSS:
td
{
text-align:center;
}
spart alle deine DIV's.
Sinnvoll ist hier auch die Verwendung des CGI Moduls.
use CGI;
print CGI::table( CGI::Tr(
CGI::td( [1..6])
));
wobei ich aber vermute das das eine Überschrift einer komplette Tabelle sein soll, also eher so:
print CGI::table(),
CGI::Tr(
CGI::th( [1..6])
);
mit einer while schleife
while (my @result = $sth->fetchrow_array) { print qq { <tr> <td><div align="center">$result[1]</div></td> <td><div align="center">$result[1]</div></td> <td><div align="center">$result[1]</div></td> </tr> <tr> <td><div align="center">$result[1]</div></td> <td><div align="center">$result[1]</div></td> <td><div align="center">$result[1]</div></td> </tr> };}
das problem nun ist- das z.b datensatz 1 jeweils 3x in der selben spalte angezeigt wird.
Was meinst du mit Spalte?
Willst du das:
while (my @result = $sth->fetchrow_array) {
print CGI::Tr( CGI::tr( @result ));
}
print CGI::end_table();
ich möchte aber das jeweils in einer spalte der nächste datensatz steht.
D1 # D2 # D3
D4 # D5 # D6
Das versteh ich nicht.
Struppi.
tag struppi,
dein vorschlag ist soweit ok.
jetzt würde ich gern aber dass nach 3 spalten
darunter die nächsten 3 spalten angezeigt werden
wäre über hilfe dankbar.
schönen tag noch
Du meinst so?
while (my @result = $sth->fetchrow_array) {
print '<td>'. (join '<br>', @result) . '</td>';
}
Struppi.
Hallo nadim
tag struppi,
dein vorschlag ist soweit ok.
jetzt würde ich gern aber dass nach 3 spalten
darunter die nächsten 3 spalten angezeigt werden
Für sowas würd ich DIV's nehmen und diese mit float:left versehen, dann passen immer soviele Datensätze nebeneinander wie im Browserfenster Platz ist.
Also so:
while (my @result = $sth->fetchrow_array) {
print '<div style="float:left;">'. (join '<br>', @result) . '</div>';
}
print '<div style="clear:both"></div>';
Struppi.
tag nadim,
Die einzelnen Einträge der Liste @result bekommst Du mit
$result[0]
$result[1]
$result[2]
...
usw.
im Script sieht das dann so aus:
while (my @result = $sth->fetchrow_array()){
print qq|
<TR><TD>$result[0]</TD><TD>$result[1]</TD><TD>$result[2]</TD>... usw.</TR>
|;
}
Gruß Sabine