Avatar billede Slettet bruger
19. juli 2004 - 18:01 Der er 10 kommentarer og
1 løsning

Hente data i DB og liste i tabelopstilling

Jeg har en database med medlemmer i, og vil gerne have disse listet i en tabel.

Disse medlemmer vil jeg gerne have listet på følgende måde:
1 2 3 4
5 6 7 8
9 osv.

Jeg bruger følgende kode til at hente medlemmerne fra tabellen:
        $i = 0;
        while ($row_medlemmer = mysql_fetch_assoc($query_medlemmer))
          {
            $spillernr[$i] = $row_medlemmer[spillernr];
            $navn[$i]      = $row_medlemmer[navn];

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

            $i++;
          }

Jeg har brugt følgende kode til at få medlemmerne stoppet i tabellen:
          $i = 0;

          while($i < $antal_medlemmer)
            {
            $a1 = $i+0;
            $a2 = $i+1;
            $a3 = $i+2;
            $a4 = $i+3;
            $midtside = ($midtside."
              <table width=\"475\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"Broedtekst\">
                <tr>
                  <td width=\"100\" height=\"155\" align=\"center\" valign=\"middle\"><img src=\"$billede[$a1]\" width=\"100\" height=\"120\" vspace=\"2\"><br>$navn[$a1]</td>
                  <td width=\"25\" height=\"155\"></td>
                  <td width=\"100\" height=\"155\" align=\"center\" valign=\"middle\"><img src=\"$billede[$a2]\" width=\"100\" height=\"120\" vspace=\"2\"><br>$navn[$a2]</td>
                  <td width=\"25\" height=\"155\"></td>
                  <td width=\"100\" height=\"155\" align=\"center\" valign=\"middle\"><img src=\"$billede[$a3]\" width=\"100\" height=\"120\" vspace=\"2\"><br>$navn[$a3]</td>
                  <td width=\"25\" height=\"155\"></td>
                  <td width=\"100\" height=\"155\" align=\"center\" valign=\"middle\"><img src=\"$billede[$a4]\" width=\"100\" height=\"120\" vspace=\"2\"><br>$navn[$a4]</td>
                </tr>
              </table>
            ");

Ved godt at den sidste del af kodningen er total rod, men jeg lavede det hurtigt for at se hvordan det ser ud på hjemmesiden.

Jeg har prøvet at få det hele kogt lidt ned, men ved ikke lige hvordan.

while($row_medlemmer.... Hele det stykke må kunne indeholde tabelopstillingen, jeg ved bare ikke lige hvordan (så jeg slipper for at bruge tæller endnu en gang).
Avatar billede detox Nybegynder
19. juli 2004 - 18:18 #1
Du kan gøre det på denne måde (tilføj selv det med billedet, samt selvfølgelig formateringen). Håber du kan se meningen:

while ($row_medlemmer = mysql_fetch_assoc($query_medlemmer)) {
  if ($i%4 == 0) echo "<tr>";
    echo "$row_medlemmer[navn]</td>";
    $i++;
  if ($i%4 == 0) echo "</tr>";
}
if ($i%4 != 0 echo "</tr>";
Avatar billede detox Nybegynder
19. juli 2004 - 18:19 #2
echo "$row_medlemmer[navn]</td>";

skal selvfølgelig være:

echo "<td>$row_medlemmer[navn]</td>";
Avatar billede detox Nybegynder
19. juli 2004 - 18:24 #3
if ($i%4 != 0 echo "</tr>";

mangler osse lige en parentes:

if ($i%4 != 0) echo "</tr>";
Avatar billede detox Nybegynder
19. juli 2004 - 18:27 #4
Se dette eksempel:

<?php
$i = 0;
echo "<table>\n";
foreach (range(1, 15) as $bog) {
  if ($i%4 == 0) echo "<tr>\n";
    echo "<td style='width: 15; color:red;'>$bog</td>\n";
    $i++;
  if ($i%4 == 0) echo "</tr>\n";
}
if ($i%4 != 0) echo "</tr>\n";
echo "</table>\n";
?>
Avatar billede Slettet bruger
19. juli 2004 - 19:00 #5
Fattede hat af hvad du skrev... sådan cirka ;o)

Men det jeg fattede hjalp mig på vej til en løsning:

        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.".jpg"))
              {
                $billede[$i] = ("/grafik/spillerpics/".$spillernr.".jpg");
              }
            else
              {
                $billede[$i] = ("/grafik/spillerpics/nopic.jpg");
              }

            if ($i == 0)
              {
                $midtside = ($midtside."
                  <table width=\"475\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"Broedtekst\">
                    <tr>
                      <td width=\"100\" height=\"155\" align=\"center\" valign=\"top\"><img src=\"$billede[$i]\" width=\"100\" height=\"120\" vspace=\"2\" border=\"0\"><br>$navn[$i]</td>
                      <td width=\"25\" height=\"155\"></td>
                ");
              }

            if (($i == 1) || ($i == 2))
              {
                $midtside = ($midtside."
                      <td width=\"100\" height=\"155\" align=\"center\" valign=\"top\"><img src=\"$billede[$i]\" width=\"100\" height=\"120\" vspace=\"2\" border=\"0\"><br>$navn[$i]</td>
                      <td width=\"25\" height=\"155\"></td>
                ");
              }

            if ($i == 3)
              {
                $midtside = ($midtside."
                      <td width=\"100\" height=\"155\" align=\"center\" valign=\"top\"><img src=\"$billede[$i]\" width=\"100\" height=\"120\" vspace=\"2\" border=\"0\"><br>$navn[$i]</td>
                    </tr>
                  </table>
                ");
              }

            $i++;
          }

Kan det forenkles yderligere?
Avatar billede detox Nybegynder
19. juli 2004 - 21:30 #6
Det kan koges ned til:


    $i = 0;
    $midtside = "<table width='475' border='0' cellpadding='0' cellspacing='0' class='Broedtekst'>";
        while ($row_medlemmer = mysql_fetch_assoc($query_medlemmer))
          {

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

            $billede = file_exists("../grafik/spillerpics/".$spillernr.".jpg") ?
                "/grafik/spillerpics/".$spillernr.".jpg" :
                "/grafik/spillerpics/nopic.jpg";

            if ($i%4 == 0) $midtside .= "<tr>";
            $midtside .= "<td width='100' height='155' align='center' valign='top'>
            <img src='$billede' width='100' height='120' vspace='2' border='0'>
            <br>$navn</td>
            <td width='25' height='155'></td>";
            $i++;
            if ($i%4 == 0) $midtside .= "</tr>";
          }
          if ($i%4 != 0) $midtside .= "</tr>";
          $midtside .= "</table>";
Avatar billede detox Nybegynder
19. juli 2004 - 21:33 #7
Hvilket giver samme resultat, men er meget kortere og mere overskueligt ;O)
Avatar billede Slettet bruger
20. juli 2004 - 08:16 #8
Hvis $i%4 skal forståes som $i divideret med 4, vil den sætning vel kun være sandt en enkelt gang, nemlig når $i=0?

Er enig i at det er kortere, men tror dog jeg vælger kun at korte noget af det. Synes ikke alle dele af koden er lige overskuelige *g*

Læg et svar og pointene er dine :o)
Avatar billede Slettet bruger
20. juli 2004 - 08:17 #9
*Dooh* Havde ikke lige set at du allerede havde lagt et svar ;o)
Avatar billede detox Nybegynder
20. juli 2004 - 19:54 #10
$i%4 finder resten efter division med 4 og den er 0 hver 4 gang (kaldes modular division). Den er rar at bruge når man skal udføre en handling med et bestemt interval.
Anyway tak for point's :O)
Avatar billede Slettet bruger
23. juli 2004 - 09:45 #11
Dvs. at hvis $i er lig med 10 så vil værdier af $val = ($i%4) være lig med 2??
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