Avatar billede dd-man Nybegynder
28. august 2003 - 12:38 Der er 11 kommentarer og
1 løsning

3 cols per row, hvordan?

Jeg har en mysql database, med en masse billeder, som jeg udskriver via en:

while () {
  udskriver billeder her
}

og der kan jeg godt udskrive 2 billeder pr. række, ved at lave en if ($i%2) og så udskrive en afslutning af <tr> hvis det er m.m.


Men spørgsmålet går på:

Hvordan gør jeg så jeg kan udskrive 3 eller 4 billeder per række i sådan en while løkke?

På forhånd tak
Avatar billede dd-man Nybegynder
28. august 2003 - 12:41 #1
Hov, sætter lige point lidt op :)
Avatar billede tipsen Nybegynder
28. august 2003 - 12:43 #2
<?php
$kolonner  = 3;                                // antal billeder pr række
$tablewidth = 400;                              // pixelbredde på tabellen
$cellwidth  = (int) ($tablewidth / $kolonner);  //cellebredde

$mhost      = 'localhost';                      // mysql host
$muser      = 'user';                          // mysql bruger
$mpaswd    = 'paswd';                          // mysql password
$mdb        = 'db';                            // mysql database

$mquery    = 'SELECT image FROM gallery';      // mysql query'et

$DB = mysql_connect($mhost, $muser, $mpaswd)or die(mysql_error());
mysql_select_db($mdb, $DB)or die(mysql_error());
$query = mysql_query($mquery)or die(mysql_error());
$antalimgs = mysql_num_rows($query);
if(!$antalimgs) {
    echo 'Desværre ingen billeder!';
}
else {
    $tmp = "<table width=$tablewidth>\n\t<tr>\n";
    for($i=0; $i < $antalimgs; $i++){
        if(!($i%$kolonner) && $i>0 && $i<$antalimgs-1) { //problem med tom startrække og potentiel tom slutrække fikset
            $tmp .= "\t</tr>\n\t<tr>\n";
        }
        list($image) = mysql_fetch_row($query);
        $tmp .= "\t\t<td width=\"$cellwidth\">$image</td>\n";
    }
    for($i=0;$i<$kolonner-($antalimgs%$kolonner);$i++) {
        $tmp .= "\t\t<td width=\"$cellwidth\">&nbsp;</td>\n";
    }
    $tmp .= "\t</tr>\n</table>";
    echo $tmp;
}
?>
Avatar billede algizoft Nybegynder
28. august 2003 - 12:44 #3
Kan du ikke bare skrive
if( ($i%4) == 0) ????
Det ville jeg da tro hjalp
Avatar billede tipsen Nybegynder
28. august 2003 - 12:46 #4
Det kan man ikke bare, hvis der også skal genereres korrekt html-kode - dvs. tabellen skal have korrekt antal celler i hver række og alle tags skal afsluttes korrekt.
Avatar billede dd-man Nybegynder
28. august 2003 - 12:52 #5
tester lige tipsens
Avatar billede dd-man Nybegynder
28. august 2003 - 12:59 #6
Jeg bruger koden nu:

<?php
$kolonner  = 4;                                // antal billeder pr række
$tablewidth = 400;                              // pixelbredde på tabellen
$cellwidth  = (int) ($tablewidth / $kolonner);  //cellebredde

include ("inc/mysql.inc.php");

$query = mysql_query("SELECT * FROM foto_billeder ORDER BY billede ASC") or die(mysql_error());

$antalimgs = mysql_num_rows($query);
if(!$antalimgs) {
    echo 'Der er desværre ingen billeder i systemet endnu!';
}
else {
    $tmp = "<table width=$tablewidth>\n\t<tr>\n";
    for($i=0; $i < $antalimgs; $i++){
        if(!($i%$kolonner) && $i>0 && $i<$antalimgs-1) { //problem med tom startrække og potentiel tom slutrække fikset
            $tmp .= "\t</tr>\n\t<tr>\n";
        }
        list($image) = mysql_fetch_row($query);
        $tmp .= "\t\t<td width=\"$cellwidth\">$image</td>\n";
    }
    for($i=0;$i<$kolonner-($antalimgs%$kolonner);$i++) {
        $tmp .= "\t\t<td width=\"$cellwidth\">&nbsp;</td>\n";
    }
    $tmp .= "\t</tr>\n</table>";
    echo $tmp;
}
?>

Der kommer bare en masse tegn frem... i celler :)

Hvordan udskriver jeg det ligesom
$row = mysql_fetch_array($query);
echo "<img src=\"$row[billede]\">";

i hver celle?

Jeg har ikke leget så meget med list() som jeg kan se du har skrevet
Avatar billede tipsen Nybegynder
28. august 2003 - 13:03 #7
"SELECT billede FROM " i stedet for "SELECT * FROM "
Avatar billede tipsen Nybegynder
28. august 2003 - 13:04 #8
Ovenstående kode kan du forøvrigt bare placere øverst i dit script - den færdige tabel ligger til sidst i variablen $tmp og kan udskrives hvor du ønsker det med echo $tmp;
Avatar billede dd-man Nybegynder
28. august 2003 - 13:06 #9
Jeps, virker nu

Hvad så hvis jeg har:
(har nemlig 2 slags billeder i tabellen)
storbillede og billede

Sådan at jeg skal lave:
<a href="storbillede" target="_blank"><img src="billede"></a>
Avatar billede tipsen Nybegynder
28. august 2003 - 13:11 #10
Hvad hedder db-felterne?
Avatar billede tipsen Nybegynder
28. august 2003 - 13:14 #11
antager lillebillede og storbillede:

$query = mysql_query("SELECT lillebillede, storbillede FROM foto_billeder ORDER BY lillebillede ASC") or die(mysql_error());

$antalimgs = mysql_num_rows($query);
if(!$antalimgs) {
    echo 'Der er desværre ingen billeder i systemet endnu!';
}
else {
    $tmp = "<table width=$tablewidth>\n\t<tr>\n";
    for($i=0; $i < $antalimgs; $i++){
        if(!($i%$kolonner) && $i>0 && $i<$antalimgs-1) { //problem med tom startrække og potentiel tom slutrække fikset
            $tmp .= "\t</tr>\n\t<tr>\n";
        }
        list($smallimg, $bigimg) = mysql_fetch_row($query);
        $tmp .= "\t\t<td width=\"$cellwidth\"><a href=\"$bigimg\" target=\"_blank\" title=\"Se stort billede\"><img src=\"$smallimg\"></a></td>\n";
    }
    for($i=0;$i<$kolonner-($antalimgs%$kolonner);$i++) {
        $tmp .= "\t\t<td width=\"$cellwidth\">&nbsp;</td>\n";
    }
    $tmp .= "\t</tr>\n</table>";
    echo $tmp;
}
Avatar billede dd-man Nybegynder
28. august 2003 - 13:18 #12
Yes, det virker - mange tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester