hjälp med dynamisk html-tabell i php

Permalänk
Medlem

hjälp med dynamisk html-tabell i php

Hej allihopa! Sitter och programmerar en hemsida där jag vill att datorn skall dynamiskt fylla på med artiklar så att jag slipper manuellt byta ut allt när det behöver uppdateras. Jag verkar få ut tabellen på rätt ställe eftersom att jag har satt border till 1 och då ser jag en stor fyrkant. Men jag får inget innehåll, satt uppe till halv tre på natten och gruvade mig i det, men nu har jag fått nog. Hoppas att någon vänlig själ kan hjälpa mig och jag tackar på förhand för svar! hur som helst, här är min kod:

<?php
// Felrapportering
error_reporting(E_ALL);
ini_set('display_errors', '1');
?>

<?php
// Detta block tar hela listan med produkter och skriver in dem i variabler
include "Scripts/connect-mysql.php";
$bilder = "bilder";
$annonser= "annonser";
$product_print="";
$sql = mysql_query("SELECT * FROM produkter WHERE kategori='NES' ORDER BY datum DESC");
$productCount = mysql_num_rows($sql); // räkna antalet annonser
if ($productCount > 0) {
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
$picture = "<img src='$bilder/$annonser/$id.jpg' height='150' width='150'/>";
$product_name = $row["produkt_namn"];
$price = $row["pris"];
$date_added = strftime("%b %d, %Y", strtotime($row["datum"]));
$product_list = "<a href='produkt.php'>$picture<br>$product_name </a>";
}

} else {
$product_list = "Det finns dessvärre inga produkter att visa ännu";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="css/center-style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div class="center">
<?php include_once("meny_template.php");?> //printar in mina menyer

<div class="flash">
<?php
$limit = 4;
$count = 0;

echo "<table width='854' height='700' border='1'>"; //och här är det tänkt att jag ska rita ut en tabell

while($row = mysql_fetch_array($sql)) //men här verkar det gå snett
{

if($count < $limit)
{
if($count == 0)
{
echo "<tr><th scope='row'><a href='produkt.php'>$picture<br>$product_name </a></th>";
}
echo "<td><a href='produkt.php'>$picture<br>$product_name </a></td>";
}
else
{
$count = 0;
echo "</tr><tr><th scope='row'><a href='produkt.php'>$picture<br>$product_name </a></th>";
}
$count++;
}
echo "</tr></table>";
?>
</div>

</div>
</body>
</html>

Permalänk
Medlem
Skrivet av Zyntax91:

Hej allihopa! Sitter och programmerar en hemsida där jag vill att datorn skall dynamiskt fylla på med artiklar så att jag slipper manuellt byta ut allt när det behöver uppdateras. Jag verkar få ut tabellen på rätt ställe eftersom att jag har satt border till 1 och då ser jag en stor fyrkant. Men jag får inget innehåll, satt uppe till halv tre på natten och gruvade mig i det, men nu har jag fått nog. Hoppas att någon vänlig själ kan hjälpa mig och jag tackar på förhand för svar! hur som helst, här är min kod:

Text....

Du har en del fel.
Först ett tips: Använda CODE och PHP taggarna på forumet så kan vi läsa din kod lättare.

Fel nr1: Du hämtar datan från databasen men skriver den i variabler som skrivs över varje gång.

while($row = mysql_fetch_array($sql)){ $id = $row["id"]; $picture = "<img src='$bilder/$annonser/$id.jpg' height='150' width='150'/>"; $product_name = $row["produkt_namn"]; $price = $row["pris"]; $date_added = strftime("%b %d, %Y", strtotime($row["datum"])); $product_list = "<a href='produkt.php'>$picture<br>$product_name </a>"; }

T.ex. $picture blir ju ett nytt värde varje gång en rad loopas igenom. Gör om alla variablar till arrayer för att de ska kunna ha mer data i sig.
Jag hade lagt utskriften av raderna i samband med skapandet av tabellen. Lättare och du slipper lagra datan för att skriva ut den senare.
Kan dock bli lite rörigare kod. Är en smaksak.

Något i den här stilen: (Viktigt: Koden är inte helt korrekt. Försökte bara visa hur jag tänker)

echo "<table width='854' height='700' border='1'>"; //och här är det tänkt att jag ska rita ut en tabell $sql = mysql_query("SELECT * FROM produkter WHERE kategori='NES' ORDER BY datum DESC"); while($row = mysql_fetch_array($sql)) //men här verkar det gå snett { if($count < $limit) { if($count == 0) { echo "<tr><th scope='row'><a href='produkt.php'>$picture<br>$row['produkt_namn']</a></th>"; } echo "<td><a href='produkt.php'>$picture<br>$row['produkt_namn'] </a></td>"; } else { $count = 0; echo "</tr><tr><th scope='row'><a href='produkt.php'>$picture<br>$row['produkt_namn'] </a></th>"; } $count++; } echo "</tr></table>";

Hoppas det hjälper lite till att börja med.

Permalänk
Medlem

okej ursäkta felet, jag är ny på forumet så jag tänkte inte på det, och vet heller inte hur jag gör.

Jag förstår inte varför det skulle vara smidigare att skriva ut arrayer istället för variabler. Det blir väl ändå samma slut-värde ändå? För jag vill ju att variablerna ska skrivas över varje gång jag gör en ny cell i tabellen så att jag kan ha unika värden i alla celler. Men jag kanske bara missar poängen i det du menar.

För hur gör jag annars om jag ska sätta in alla bilderna i en array?

Permalänk
Medlem
Skrivet av Zyntax91:

okej ursäkta felet, jag är ny på forumet så jag tänkte inte på det, och vet heller inte hur jag gör.

Jag förstår inte varför det skulle vara smidigare att skriva ut arrayer istället för variabler. Det blir väl ändå samma slut-värde ändå? För jag vill ju att variablerna ska skrivas över varje gång jag gör en ny cell i tabellen så att jag kan ha unika värden i alla celler. Men jag kanske bara missar poängen i det du menar.

För hur gör jag annars om jag ska sätta in alla bilderna i en array?

Felet är att en variabel har ett värde.

Första gången du loopar igenom:
$picture = första raden
När nästa rad läses in:
$picture = andra raden

Så $picture kommer endast att ha det sista värdet som anges till den. Använde bara $picture som exempel. Detta gäller alla variabler i din loop.
Eftersom du inte skriver ut $picture direkt i din loop så kommer värdet att skrivas över.

Använder du en array kan du göra
array_push($picture, aktuell rad);

När du skriver ut sen skriver du bara:
$picture[0] för första raden
$picture[1] för andra raden

Permalänk
Medlem

Nu fick jag till det, hade krånglat till det hela rejält. Du hade helt rätt när du sa att php-scriptet skulle befinna sig nere mellan body-taggarna, sedan med hjälp av lite div-taggar blev det precis som det skulle! Tack så hemskt mycket för att du pekade mig i rätt riktning!