Avatar billede tompoulsen Nybegynder
06. februar 2009 - 11:30 Der er 9 kommentarer

tables og løkker i PHP

Jeg er ved at lave et CMS, hvor jeg (blandt andet) vil give "læserne" muulighed for at se et antal billeder, som knytter sig til en tekst.

Der kan være et vilkårligt antal billeder til teksten og der kan være et vilkårligt antal kolonner med billeder.
Således skal der f.eks. kunne vises en tabel med 3 * 4 celler med ialt 12 billeder.

Jeg har styr på koden til at hente billederne ind i et array men kan slet ikke finde ud af at lave koden til at vises tabellen.

Jeg arbejder som sagt i PHP med en MySQL database.

Kunne du tænke at give et bud på en kode som opfylder mit behov?

På forhånd tak
Avatar billede bitkid Nybegynder
06. februar 2009 - 11:45 #1
$i=0;
foreach ($img as $imgArray) {
        if ($i%3 == 0) {
                echo "<tr>";
        }
        echo "<td><img src=\"".$img["src"]."\" /></td>";
        if ($i%3 == 0) {
                echo "</tr>";
        }
      $i++;
}

Noget i den der retning. Skrevet lige ud af hovedet, så det kan godt være det skal rettes lidt til :-)
Avatar billede bitkid Nybegynder
06. februar 2009 - 11:46 #2
lol, det er jo selvfølgelig omvendt i den der foreach :-)

foreach ($imgArray as $img) {
Avatar billede tompoulsen Nybegynder
06. februar 2009 - 12:09 #3
Jeg var ikke helt skarp i formulering af spørgsmålet, idet der til hver enkelt billede kan være tilknyttet en kommentar.

Derfor starter jeg med hente billednavn og evt. kommentar op i et array:

    // Opbyg et 2 dimentionelt array med billed oplysninger
    $billedindeks = 1;
    $dataindeks = 1;
    while($row = mysql_fetch_array($datasaet))
        {
            $genstand[$billedindeks][$dataindeks] = $row['pic_name'];
            $genstand[$billedindeks][$dataindeks+1] = $row['pic_text'];
            $billedindeks++;           
        }

Jeg har prøvet at flette ovenstående sammen med din kode, men det virker ikke. Kan du gøre et forsøg. Det er forøvrigt ikke noget der haster. Jeg har forsøgt på at få det til at virker de sidste par uger, så jeg har ingen hastværk.
Avatar billede bitkid Nybegynder
06. februar 2009 - 12:20 #4
Jeg ville lave min while lidt om.

while ($row = mysql_fetch_array($datasaet)) {
        $genstand[] = array("pic_name" => $row["pic_name"], "pic_text" => $row["pic_text"]);
}

Nu kan vi nemlig tilgå billederne via det associative array vi har lagt i $genstand. Hver gang while løkkens køres vil $genstand[] oprette et nyt element i $genstand.

Skift nu foreach ud med:
foreach ($genstand as $img) {

og echo linien ud med:
echo "<td><img src=\"".$img["pic_name"]."\" alt=\"".$img["pic_text"]."\" /></td>";

Noget i den retning :-)
Avatar billede usse Nybegynder
06. februar 2009 - 13:18 #5
Ikke for at sige noget negativt, men synes ikke at man via fremvisnings-siderne skal tilgå data direkte fra DBen, synes hellere du skulle have en eller anden klasse model som tager sig af dette. Og i stedet for et array måske hive dataerne ud i et PDO objekt..
Avatar billede tompoulsen Nybegynder
06. februar 2009 - 19:25 #6
Det er da ikke negativt, at komme med en anden indgangsvinkel til en opgave. Jeg har ikke været dybt nok nede i PHP / MySQL til at have stødt på PDO, men vil bestemt kigge nærmere på det. Tak for inputtet.
Avatar billede tompoulsen Nybegynder
07. februar 2009 - 21:01 #7
Hej Bitkid

Jeg har prøvet at skrive din koden sammen, som derved blev til følgende:

    while ($row = mysql_fetch_array($datasaet)) {
        $genstand[] = array("pic_name" => $row["pic_name"], "pic_text" => $row["pic_text"]);
    }
    $i=0;
    echo "<table border = 1>";
    foreach ($genstand as $img) {
        if ($i%3 == 0) {
            echo "<tr>";
        }
        //echo "<td><img src=\"".$img["pic_name"]."\" alt=\"".$img["pic_text"]."\" /></td>";
        echo "<td>a".$i."</td>";
        if ($i%3 == 0) {
            echo "</tr>";
        }
      $i++;
    }
    echo "</table border = 1>";

Det giver følgende resultat:
X
XX
X
XX
X

hvilket passer med at der er 7 poster i datasættet.
Men det var meningen, at det skulle ud som følger:

XXX
XXX
X

(jeg ved godt at koden ikke tager højde for det 8 og 9 felt, som mangler data i datasættet, men det må jo komme bagefter).

Håber du (eller andre) kan hjælpe. Jeg kan ikke selv se skoven for bare træer.
Avatar billede bitkid Nybegynder
10. februar 2009 - 10:48 #8
Hej igen

Ja, jeg kan godt se der var en tosset fejl :-)

Du skal ændre til det her:

    $i=0;
    echo "<table border = 1>";
    foreach ($genstand as $img) {
        if ($i%3 == 0 && $i != 0) {
            echo "</tr>";
        }
        if ($i%3 == 0) {
            echo "<tr>";
        }
        //echo "<td><img src=\"".$img["pic_name"]."\" alt=\"".$img["pic_text"]."\" /></td>";
        echo "<td>a".$i."</td>";
      $i++;
    }
    for ($j = 0; $j < $i%3; $j++) {
        echo "<td></td>";
        $i++;
    }
    echo "</tr></table border = 1>";

Prøv det og se om ikke det er bedre :-) Jeg har prøvet at tage højde for det 8. og 9. felt også.
Avatar billede bitkid Nybegynder
12. februar 2009 - 10:28 #9
hovsa... der er da en fejl... den $i++; der er til sidst skal ikke være der.
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
Kurser inden for grundlæggende programmering

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