Schrift
[thread]855[/thread]

cgi Anfänerfrage: Listendarstellung mit MySQL



<< >> 7 Einträge, 1 Seite
rk-ger
 2006-12-09 22:23
#9320 #9320
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich, als CGI Neuling, muss Datenbank Abfragen auf einer Website anzeigen. Aber ich finde keinen Einstieg in die Millionen von Perl und CGI Tutorials dieser Welt. Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht.

Dieser Code (Auszug) muss 'in CGI' umgebaut werden:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my $select1 = "select distinct b.carrier, b.boxno, b.listno, b.shipno, b.custno
from data1 b
where b.custno = 160
order by b.listno ";

my $sth = $dbhandle1->prepare($select1);
$sth->execute();
print "carrier,boxno,listno,shipno,custno\n";
while (my $hash_ref = $sth->fetchrow_hashref) {
print "$hash_ref->{carrier},";
print "$hash_ref->{boxno},";
print "$hash_ref->{listno},";
print "$hash_ref->{shipno},";
print "$hash_ref->{custno}\n";
}


Code: (dl )
use CGI qw(:all);

habe ich schon allein hinbekommen. :cool: Mit

Code: (dl )
1
2
3
print header(),
start_html("Ergebnisse"),
h1( "Folgende Daten gefunden:" );


habe ich auch eine Überschrift hinbekommen. Wie bekomme ich jetzt die Ergebnisse der obigen Abfrage sauber als Tabelle dargestellt? Erschwerend kommt hinzu, dass sich die Tabellenzeilen farblich abwechseln sollen (hellgrau, dunkelgrau).

Und da ich mit Datenbankabfragen auch noch nicht so sattelfest bin, gleich noch eine Perl-Frage:
Wie greife ich auf eine Spalte der Ergebnisliste zu um hinterher
eine Schleife für weitere Abfragen programmieren zu können?

So in der Art
Code: (dl )
1
2
3
4
foreach $boxno ( "liste-alles-boxno's der vorherigen abfrage" ) {
"select blah from db-x where xyz = $boxno"
"zeige Ergebnis der Abfrage acuh wieder als Tabelle"
}

Hilfe oder Hinweise auf eine zu dem Thema vernünftige Doku wären sehr nett.
ptk
 2006-12-09 22:59
#9321 #9321
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wenn du es sehr einfach haben möchtest, könntest du CPAN:DBIx::XHTML_Table versuchen.
PerlProfi
 2006-12-09 23:01
#9322 #9322
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Mit der Tabelle kann ich dir weiterhelfen.
Daraus:
Code: (dl )
1
2
3
4
5
6
7
8
print "carrier,boxno,listno,shipno,custno\n";
while (my $hash_ref = $sth->fetchrow_hashref) {
print "$hash_ref->{carrier},";
print "$hash_ref->{boxno},";
print "$hash_ref->{listno},";
print "$hash_ref->{shipno},";
print "$hash_ref->{custno}\n";
}


machst du einfach:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
print "<table border=1>\n".
" <th>carrier</th>\n".
" <th>boxno</th>\n".
" <th>listno</th>\n".
" <th>shipno</th>\n".
" <th>custno</th>\n";

while (my$hash_ref = $sth->fetchrow_hashref) {
print " <tr>\n";
print " <td>$hash_ref->{carrier}</td>\n";
print " <td>$hash_ref->{boxno}</td>\n";
print " <td>$hash_ref->{listno}</td>\n";
print " <td>$hash_ref->{shipno}</td>\n";
print " <td>$hash_ref->{custno}</td>\n";
print " </tr>\n";
}

print "</table>";


MfG PerlProfi

//EDIT: ptk's beitrag war noch nicht da als ich meinen geschrieben habe.\n\n

<!--EDIT|PerlProfi|1165698178-->
renee
 2006-12-09 23:24
#9323 #9323
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und das könnte man auch noch kürzer schreiben:

Code: (dl )
1
2
3
4
5
my @names = $sth->{NAMES};
print "<table border=1>\n".join("",map{'<th>'.$_.'<th>'}@names);
while(my @row = $sth->fetchrow_array()){
print "<tr>".join("",map{'<td>'.$_.'</td>'}@row)."</tr>";
}
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/
rk-ger
 2006-12-10 00:57
#9324 #9324
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
Danke für die Tipps.

Ich schwanke noch zwischen der Benutzung von XHTML_Table und dem Tipp von PerlProfi.

XHTML_Table ist zwar schöner, allerdings müsste ich unter ein paar Felder auch Links legen können. Und ich habe in der Beschreibung nichts gefunden was darauf hin deutet, dass sowas geht. Bei der anderen Variante kann ich ja problemlos einen Link einfügen.

Code: (dl )
print "    <td><a target='_blank' href='gui1.pl?level=get_by_custno;custno=$hash_ref->{custno}'>$hash_ref->{custno}</a></td>\n";


Hat vielleicht noch jemand eine Antwort auf meine zweite Frage? Da ging es darum, wie man alle Werte einer Spalte in ein weiteres Array schiebt um damit eine Schleife laufen zu lassen.
PerlProfi
 2006-12-10 09:48
#9325 #9325
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Du könntest innerhalb der while Schleife die Arrays @boxno, @shipno, @custno, usw... mit den jeweiligen Werten pushen.

Dann kannst du sie einfach durchlaufen.

Aber ich kann mir auch gut vorstellen, dass es da etwas in der Datenbank API gibt.
Leider kenne ich mich da überhaupt nicht aus.

MfG PerlProfi
renee
 2006-12-10 17:47
#9326 #9326
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da empfiehlt es sich eher mit Hash of Arrays zu arbeiten... Und den Feldnamen als Schlüssel zu nehmen, also z.B.
Code: (dl )
1
2
3
4
5
6
7
8
my @names = @{$sth->{NAMES}};
print "<table border=1>\n".join("",map{'<th>'.$_.'<th>'}@names);
while(my $row = $sth->fetchrow_hashref()){
print "<tr>".join("",map{'<td>'.$_.'</td>'}@{$row}{@names})."</tr>";
for my $name(@names){
push @{$hash{$name}},$row->{$name};
}
}


Mehr zu Referenzen: perlreftut
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/
<< >> 7 Einträge, 1 Seite



View all threads created 2006-12-09 22:23.