Vinnaren i pepparkakshustävlingen!
2021-02-07, 13:00
  #1
Medlem
Jag får allt att se ut som jag vill när jag ska ladda in alla poster från en SQL-tabell med tillhörande bilder men allt blir bara på en lång tabellrad tills antalet poster tar slut. Hur får jag ett radbryt i tabellen så att exempelvis det visas fyra bilder/poster per rad?

Så här ser koden ut just nu:
--------------------------------------------------------------------------------------------
Kod:
$sql "SELECT * FROM forfattare ORDER BY FORFATTARE_TEXT ASC";
$result $conn->query($sql);

 echo 
"<table border=1>";
 echo 
"<tr>";
          {
 while(
$row mysqli_fetch_array($result))
          echo 
"<td><center>" "<img src=\"img_forfattare/{$row["FORFATTARE_BILD"]}.jpg\">\n" .  "<br>" $row['FORFATTARE_TEXT'] . "</center></td>";
          }
 echo 
"</tr>";
 echo 
"</table>"
--------------------------------------------------------------------------------------------
__________________
Senast redigerad av Proton 2021-02-07 kl. 20:27.
Citera
2021-02-07, 13:05
  #2
Medlem
if röv större än 4 insert byt the rad?
Citera
2021-02-07, 13:28
  #3
Medlem
hasenfrasens avatar
if röv % 4 == 0 nyrad
röv++
Citera
2021-02-08, 13:59
  #4
Medlem
Citat:
Ursprungligen postat av lena-kf
Jag får allt att se ut som jag vill när jag ska ladda in alla poster från en SQL-tabell med tillhörande bilder men allt blir bara på en lång tabellrad tills antalet poster tar slut. Hur får jag ett radbryt i tabellen så att exempelvis det visas fyra bilder/poster per rad?
Har du funderat på hur HTML-koden för en tabell(<table>) fungerar? Vad gör <td>- och <tr>-element?

<td> Innehållet i en TD (<td>innehåll</td>) fyller en "data-ruta" i tabellen.

<tr> Innehållet i en TR bildar en rad i tabellen.

..och eftersom du skapar ett <tr></tr>-par i din kod så får du just..en rad. Inte raketforskning egentligen, va ?

Så du får hålla koll på hur många TD du skrivit ut i koden, och när du skrivit ut så många som du vill ha på en rad så får du avsluta den raden i HTML-koden, dvs genom att skriva ut </tr>. Sen får du börja på nästa rad direkt efteråt genom att skriva ut en ny <tr>. Den sista tabell-raden avslutas genom din echo-sats utanför while-loopen.
Citera
2021-02-08, 18:56
  #5
Medlem
Jag kanske missförstår dig men problemet är att jag inte kan bygga hela tabellen eftersom jag inte kan förutbestämma hur många celler/poster som kommer listas från SQL-databasen. Den ska ju bara matas på tills posterna i select är slut.

Jag är helt med på hur man bygger en tabell på en klassisk HTML-sida men här blir det lite mer komplext känner jag...
Citera
2021-02-08, 21:05
  #6
Medlem
BidragsTurkens avatar
tr-taggen omsluter loopen. tr-taggen bör omsluta varje genererat element i loopen.
Citera
2021-02-09, 08:24
  #7
Medlem
Om jag flyttar in tr-taggarna så får jag istället en cell per rad så allt matas på nedåt istället. Det måste ju gå att styra så det blir fyra celler och sen ny rad? Upprepar jag cellen flera gånger i samma rad så blir det ju flera kolumner av exakt samma innehåll

Kod:
$sql "SELECT * FROM forfattare ORDER BY FORFATTARE_TEXT ASC";
$result $conn->query($sql);

 echo 
"<table border=1>";
          {
 while(
$row mysqli_fetch_array($result))
     echo 
"<tr><td><center>" "<img src=\"img_forfattare/{$row["FORFATTARE_BILD"]}.jpg\">\n" .  "<br>" $row['FORFATTARE_TEXT'] . "</center></td></tr>";
          }
 echo 
"</table>"
Citera
2021-02-09, 11:51
  #8
Medlem
Citat:
Ursprungligen postat av lena-kf
Jag kanske missförstår dig men problemet är att jag inte kan bygga hela tabellen eftersom jag inte kan förutbestämma hur många celler/poster som kommer listas från SQL-databasen. Den ska ju bara matas på tills posterna i select är slut.

Jag är helt med på hur man bygger en tabell på en klassisk HTML-sida men här blir det lite mer komplext känner jag...
Citat:
Ursprungligen postat av lena-kf
Jag får allt att se ut som jag vill när jag ska ladda in alla poster från en SQL-tabell med tillhörande bilder men allt blir bara på en lång tabellrad tills antalet poster tar slut. Hur får jag ett radbryt i tabellen så att exempelvis det visas fyra bilder/poster per rad?
Du behöver inte veta hur många celler som kommer att skrivas ut sammanlagt - även om det går att ta reda på. Du behöver bara hålla reda på hur många celler som skrivits ut sen du senast påbörjade en rad, dvs skrev ut <tr>. Lägg till kod som räknar upp en variabel varje gång du skriver ut en cell, och en koll av om du har nått antal celler som du vill ha per rad. Om antalet har nåtts så avslutar du raden och börjar på en ny. Om du skriver ut HTML för en rad, <tr>...</tr>, varje gång du skriver ut en cell så får du givetvis också en rad per cell. Du kan inte skriva ut <tr> och <td> på samma ställe sådär om du vill ha flexibilitet i antal celler per rad.

Och som BidragsTurken skrev, renskriv din kod och indentera rätt. Det blir bättre då.
__________________
Senast redigerad av Koenigsegg 2021-02-09 kl. 11:56.
Citera
2021-02-09, 14:13
  #9
Medlem
Citat:
Ursprungligen postat av lena-kf
Om jag flyttar in tr-taggarna så får jag istället en cell per rad så allt matas på nedåt istället. Det måste ju gå att styra så det blir fyra celler och sen ny rad? Upprepar jag cellen flera gånger i samma rad så blir det ju flera kolumner av exakt samma innehåll
Du upprepar HTML-koden för en cell, dvs <td>...</td>, så många gånger per rad som du vill ha kolumner. Som din kod ser ut så skriver den ut varje rad i databasen som en cell, så om några celler har exakt samma innehåll så beror det på att du har likadana rader i databasen.
Om du inte skulle upprepa <td>...</td> så skulle du ju bara få en cell (dvs kolumn) per rad..

Men för tydlighets skull: Med "rad" så menar du tabell-rad, va? Inte kodrad eller nåt sånt? Och vad exakt menar du med "upprepa"? Om du upprepar echo-satsen i while-loopen där du skriver ut data från $row så får du förstås flera kolumner med exakt samma innehåll, eftersom $row inte ändras mellan dem. Du behöver upprepa <td>...</td>-par flera gånger inom varje <tr>...</tr> för att få flera kolumner. Men en gång per uppdatering av $row..
Citera
2023-01-02, 19:07
  #10
Medlem
BradSs avatar
Använd <table> för tabelldata, att visa tumnaglar så här så ska du använda grid eller flex:

Kod:
$sql "SELECT * FROM forfattare ORDER BY FORFATTARE_TEXT ASC";
$result $conn->query($sql);
$out = [];

 while(
$row mysqli_fetch_array($result))
     
$out[] = '<div class="thumb"><img src="img_forfattare/' $row["FORFATTARE_BILD"] . '.jpg"><br>' $row['FORFATTARE_TEXT'] . '</div>';
}
print 
"<div id='thumbs'>" join($out) . "</div>"

Sedan:

HTML-kod:
<style type='text/css'>
#thumbs {
    display: flex;
    flex-flow: row wrap;
}
#thumbs .thumb {
    flex: 1 1 25%;
    text-align: center;
}
</style>
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback