Avatar billede Slettet bruger
04. april 2005 - 12:50 Der er 11 kommentarer og
1 løsning

While-løkke til tabelopstilling

Jeg er i gang med at funjustere noget php-kode, og jeg har brug for lidt hjælp.

Jeg har en tabel jeg henter spillere ud af, og opstiller dem i en tabelopstilling.

<tabel>
<tr>
  <td>Spiller1</td>
  <td>mellemrum</td>
  <td>Spiller2</td>
  <td>mellemrum</td>
  <td>Spiller3</td>
  <td>mellemrum</td>
  <td>Spiller4</td>
  </tr>
<tr>
  <td>Spiller5</td>
  <td>mellemrum</td>
  <td>Spiller6</td>
  <td>mellemrum</td>
  <td>Spiller7</td>
  <td>mellemrum</td>
  <td>Spiller8</td>
  </tr>
  .
  .
  .
</table>

Hvordan laver man sådan noget, så man ikke skal kode en million-milliard linjer, for at tage højde for at der selvfølgelig skal være samme antal felter i alle rækker, også selvom den sidste række måske kun indeholder ét billede?

Ved godt at der ikke er megameget kodning, når jeg kun skal have 4 billeder i hver række, men kan lige så godt få lært at lave det rigtigt, det kunne jo være jeg skulle have 10 billeder i en række næste gang ;o)

Pt. har jeg en while-løkke der henter alle spillere, og når løkken er færdig, checker jeg om der mangler nogle felter i en række, og så indsætter dem vha noget alá:

if tæller=1
  {
    indsæt 3 tomme billedefelter og et </tr> endtag
  }

if tæller=2
  {
    indsæt 2 tomme billedefelter og et </tr> endtag
  }

osv.
Avatar billede barklund Nybegynder
04. april 2005 - 12:55 #1
Lad os se, hvad du har nu - det er det nemmeste :)
Avatar billede Slettet bruger
04. april 2005 - 12:56 #2
Here goes:
        $i = 0;
        while ($row_medlemmer = mysql_fetch_assoc($query_medlemmer))
          {
            if ($i == 4)
              {
                $i = 0;
              }

            $spillernr[$i] = $row_medlemmer['spillernr'];
            $navn[$i]      = $row_medlemmer['navn'];

            if (file_exists("../grafik/spillerpics/".$spillernr[$i].".jpg"))
              {
                $billede[$i] = ("/grafik/spillerpics/".$spillernr[$i].".jpg");
              }
            else
              {
                $billede[$i] = ("/grafik/spillerpics/nopic.jpg");
              }

            if ($i == 0)
              {
                $indhold .= ("<tr>");
              }

            $indhold .= ("
              <td width=\"140\" height=\"155\" align=\"center\" valign=\"top\"><a class=\"link\" href=\"/sider/spillere.php?show=$spillernr[$i]\"><img alt=\"\" src=\"$billede[$i]\" width=\"100\" height=\"120\" vspace=\"2\" border=\"0\"><br>$navn[$i]</a></td>
            ");

            if ($i != 3)
              {
                $indhold .= ("<td width=\"25\" height=\"155\"></td>");
              }

            if ($i == 3)
              {
                $indhold .= ("</tr>");
              }

            $i++;
          }
Avatar billede barklund Nybegynder
04. april 2005 - 12:59 #3
Basicly skal du jo bare bruge 1 variabel ekstra:

        $i = 0;
        $rækker = 4;
        while ($row_medlemmer = mysql_fetch_assoc($query_medlemmer))
          {
            if ($i == $rækker)
              {
                $i = 0;
              }

            $spillernr[$i] = $row_medlemmer['spillernr'];
            $navn[$i]      = $row_medlemmer['navn'];

            if (file_exists("../grafik/spillerpics/".$spillernr[$i].".jpg"))
              {
                $billede[$i] = ("/grafik/spillerpics/".$spillernr[$i].".jpg");
              }
            else
              {
                $billede[$i] = ("/grafik/spillerpics/nopic.jpg");
              }

            if ($i == 0)
              {
                $indhold .= ("<tr>");
              }

            $indhold .= ("
              <td width=\"140\" height=\"155\" align=\"center\" valign=\"top\"><a class=\"link\" href=\"/sider/spillere.php?show=$spillernr[$i]\"><img alt=\"\" src=\"$billede[$i]\" width=\"100\" height=\"120\" vspace=\"2\" border=\"0\"><br>$navn[$i]</a></td>
            ");

            if ($i != $rækker-1)
              {
                $indhold .= ("<td width=\"25\" height=\"155\"></td>");
              }

            if ($i == $rækker-1)
              {
                $indhold .= ("</tr>");
              }

            $i++;
          }

Det kan dog laves meget pænere - men det er da en start :)

--
Morten Barklund
Avatar billede Slettet bruger
04. april 2005 - 13:02 #4
Problemet er hvis jeg f.eks. har 14 spillere.
Så når den ikke at sætte f.eks. </tr>
Avatar billede Slettet bruger
04. april 2005 - 13:02 #5
Det er lige netop (meget pænere), jeg er interesseret i.

Har stort set altid lavet den slag, på den her måde, men synes det virker bøvlet, efterhånden som jeg lærer at lave andre ting på en anden måde end jeg har været vant til *g*
Avatar billede barklund Nybegynder
04. april 2005 - 13:10 #6
Ah, du mener at afslutte den sidste række korrekt? Så det er blot den del, du vil have rettet til noget smartere?

Så laver du bare en løkke efter din while som:

while ($i++ < $rækker) {
  $indhold .= "<td width=\"140\" height=\"155\" align=\"center\" valign=\"top\"><a class=\"link\" href=\"/sider/spillere.php?show=$spillernr[$i]\"><img alt=\"\" src=\"$billede[$i]\" width=\"100\" height=\"120\" vspace=\"2\" border=\"0\"><br>$navn[$i]</a></td>";

  if ($i < $rækker) {
      $indhold .= "<td width=\"25\" height=\"155\"></td>";
  } else {
      $indhold .= "</tr>";
  }
}

Eller noget i den stil :)

--
Morten Barklund
Avatar billede Slettet bruger
04. april 2005 - 13:19 #7
Næsten... Det er jo ikke nok bare at afslutte en række. Der skal også være det korrekte antal felter, ellers bliver den ikke valideret som værende ok.
Avatar billede barklund Nybegynder
04. april 2005 - 13:42 #8
Men det gør while-løkken da også. Altså hvis $i er 2 og $rækker er 6, så laver den 4 tomme felter og slutter rækken. Ovenstående er en ekstra whileløkke du putter ind efter din egen while-løkke.
Avatar billede Slettet bruger
04. april 2005 - 13:56 #9
Hmmmmm....

Jeg kan nu ikke se nogle tomme felter.

<td width=\"25\" height=\"155\"></td> er ikke et tomt billedefelt. Det er et "mellemrum" mellem billederne.
Avatar billede barklund Nybegynder
04. april 2005 - 13:58 #10
Okay, det var også den øverste del - nu fjerner jeg lidt alt indholdet i td'en:

while ($i++ < $rækker) {
  $indhold .= "<td width=\"140\" height=\"155\" align=\"center\" valign=\"top\">&nbsp;</td>";

  if ($i < $rækker) {
      $indhold .= "<td width=\"25\" height=\"155\"></td>";
  } else {
      $indhold .= "</tr>";
  }
}
Avatar billede Slettet bruger
04. april 2005 - 14:30 #11
På den måde. Okay, så har jeg fanget tråden.

Tak for hjælpen :o)

... og læg et svar :o)
Avatar billede barklund Nybegynder
04. april 2005 - 14:32 #12
Helt i orden :)
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