Avatar billede clausberg Nybegynder
29. juli 2005 - 15:39 Der er 25 kommentarer og
1 løsning

Visning af talrække

Hej
Jeg har oprettet en DB (Minbolig) i Mysql over boliginventar, og under det feltnavn der hedder stue, har jeg indskrevet mit inventar, men jeg vil gerne have dem oplistet således

1) 1 stk Grøn sofa
2) Bord fra 1920´erne med løvefødder
3) Antik skammel
4) Tv - 20 tommer
osv...

Men lige nu er alt inventaret skrevet i en lang sætning, så hvordan laver man udtræk på dem og får sql/php til at opliste dem nydeligt under hvert sit talpunkt???

Er det nødvendigt at jeg skal lave en kolonne/feltnavn til hvert stykke inventar?
:-)
Avatar billede kdjweb Nybegynder
29. juli 2005 - 16:43 #1
du laver et tal der tæller op hele tiden :)
Avatar billede kdjweb Nybegynder
29. juli 2005 - 16:45 #2
over while skriver du
$tal = 1;
i inde i while hvor den udskriver skriver du
echo $tal++;
Avatar billede kdjweb Nybegynder
29. juli 2005 - 16:46 #3
$tal = 1;
while{
  echo $tal;
  $tal++;
}
Avatar billede clausberg Nybegynder
29. juli 2005 - 17:11 #4
While??? jeg har ikke umiddelbart noget sted i min .php fil hvor der står while
Avatar billede nielle Nybegynder
29. juli 2005 - 17:42 #5
Prøv lige at post den kode du bruger til at udskrive med nu.
Avatar billede clausberg Nybegynder
29. juli 2005 - 17:59 #6
Jeg bruger lige en anden DB (en DB hvor jeg lagrer mine madopskrifter) - jeg synes den var mere overskuelig. Jeg ønsker blot at mine ingredienser skal blive oplistet som:
1) et eller andet
2) et eller andet
3) et eller andet
4) et eller andet
osv...

Dette script bruger jeg til at udskrive med:

<?php
$conn = mysql_connect("localhost", "XXX", "XXX") or die(mysql_error());
mysql_select_db("XXX") or die(mysql_error());
?>
<table border="1">
<tr>
<th>titel</th>
<th>kategori</th>
<th>ingredienser</th>
<th>fremgangsmåde</th>
<th>kuverter</th>
</tr>
<?php
$titel = $_GET["titel"];
$rs = mysql_query("SELECT * FROM opskrifter WHERE titel='$titel'") or die(mysql_error());
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) {
    print "<tr>\n";
    print "<td>" . $row["titel"] . "</td>\n";
    print "<td>" . $row["kategori"] . "</td>\n";
    print "<td>" . $row["ingredienser"] . "</td>\n";
    print "<td>" . $row["fremgangsmåde"] . "</td>\n";
    print "<td>" . $row["kuverter"] . "</td>\n";
    print "</tr>\n";
}
mysql_free_result($rs);
?>
</table>
<?php
mysql_close($conn);
?>

Hvordan er det nu jeg lige laver den ønskede funktion, når mine ingredienser er skrevet sammen i en sætning under det samme feltnavn?
Avatar billede nielle Nybegynder
29. juli 2005 - 18:20 #7
Prøv at vise et typisk eksempel på hvordan data i feltet $row["ingredienser"] kunne se ud.
Avatar billede clausberg Nybegynder
29. juli 2005 - 18:29 #8
dataen kan bestå af: løg, laksefilet, æg, spinat osv...

Jeg vil gerne have listet dem op således:

Til retten skal du bruge:
1) 2 laksefilet a 250 g
2) 2 rødløg
3) 1 citron
4) salt og peber

Men for at dette er muligt skal jeg vel lave en række til hver af de forskellige ingredienser, således at man bare kan gøre sådan:
    print "<td>" . $row["ingredienser1"] . "</td>\n";
    print "<td>" . $row["ingredienser2"] . "</td>\n";
    print "<td>" . $row["ingredienser3"] . "</td>\n";
    print "<td>" . $row["ingredienser4"] . "</td>\n";

eller hvad? :)
Avatar billede nielle Nybegynder
29. juli 2005 - 18:35 #9
$ingredienser = explode(",", $row["ingredienser"]);

$ingrediensNr = 0;
foreach ($ingredienser as $ingrediens)
{
    $ingrediensNr++;
    echo $ingrediensNr . ") " . $ingrediens . "<br>";
}
Avatar billede nielle Nybegynder
29. juli 2005 - 18:38 #10
Da antallet af ingredienser, pr. ret, kan varierer meget er det ikke nogen god ide at lave felter ingredienser1, ingredienser2, ingredienser3, osv.

I stedet lægger du dem i samme felt (som nu) og så har du et tegn som du kan adsklille dem med (dit komma). Hvis der kan indgå et komma i selve ingrediensen vil det være bedre at adskille med noget andet en komma - f.eks. med ";" eller "|".
Avatar billede clausberg Nybegynder
29. juli 2005 - 19:26 #11
Du har ret vedrørende at antallet af ingredienser kan variere ganske betragteligt pr ret - derfor er den metode du foreslår noget bedre :-D

De ingredienser jeg oplister er rigtigt nok adskilt af et komma - men mener du at jeg skal udskifte mine kommer med ";" eller "|". Hvad vil det ændre???

Kunne du sætte nogle ord på det forslag du kom med kl 18.35.12 - hvor skal det stå og hvordan :)
Avatar billede nielle Nybegynder
29. juli 2005 - 19:46 #12
Der er ingen grund til at udskifte kommaet med f.eks. ";" med mindre at du rent faktisk får problemer med kommaet.

Koden kan f.eks. indsættes sådan her:

<?php
$conn = mysql_connect("localhost", "XXX", "XXX") or die(mysql_error());
mysql_select_db("XXX") or die(mysql_error());
?>
<table border="1">
<tr>
<th>titel</th>
<th>kategori</th>
<th>ingredienser</th>
<th>fremgangsmåde</th>
<th>kuverter</th>
</tr>
<?php
$titel = $_GET["titel"];
$rs = mysql_query("SELECT * FROM opskrifter WHERE titel='$titel'") or die(mysql_error());
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC))
{
    print "<tr>\n";
    print "<td>" . $row["titel"] . "</td>\n";
    print "<td>" . $row["kategori"] . "</td>\n";
    print "<td>" . $row["kuverter"] . "</td>\n";
    print "</tr>\n";

    print "<tr>\n";
    print "<td colspan='3'>";
    print "Til retten skal du bruge:<br><br>"
    print "<ol>";
    $ingredienser = explode(",", $row["ingredienser"]);
    foreach ($ingredienser as $ingrediens)
    {
        echo "<li>" . trin($ingrediens) . "</li>";
    }   
    print "</ol>";
    print "</td>\n";
    print "</tr>\n";

    print "<tr>\n";
    print "<td colspan='3'>" . $row["fremgangsmåde"] . "</td>\n";
    print "</tr>\n";
}
mysql_free_result($rs);
?>
</table>
<?php
mysql_close($conn);
?>

Her har jeg - til forskel fra det tidligere eksempel - valgt at bruge en Ordered List (<ol>) til at klaere nummereringen.
Avatar billede nielle Nybegynder
29. juli 2005 - 19:47 #13
Finktionen som fkerner blanktegn før og efter hedder "trim" - ikke "trin" - ret til denne linje:

echo "<li>" . trim($ingrediens) . "</li>";
Avatar billede nielle Nybegynder
29. juli 2005 - 20:18 #14
Så længe bare koden er korrekt - kan resten være nok så ulæseligt ;^)
Avatar billede clausberg Nybegynder
29. juli 2005 - 20:28 #15
Virker desværre ikke :(
Jeg får en fejlmelding.
Hvad er grunden til at du laver ingredienser om til "ingrediens"????
Avatar billede nielle Nybegynder
29. juli 2005 - 20:34 #16
Hvilken fejlmelding?
Avatar billede nielle Nybegynder
29. juli 2005 - 20:34 #17
En forklaring til kodestumpen:

$ingredienser = explode(",", $row["ingredienser"]);
foreach ($ingredienser as $ingrediens)
{
    echo "<li>" . trim($ingrediens) . "</li>";
}

Efter den første linke indeholder $ingredienser et array med dine ingredienser (delt op der hvor kommaere var).

Foreach-løkken løber så igennem dette array. Undervejs er der brug for at finde det enkelte element i listen (altså de enkelte ingredienser) og det er netop det:

$ingredienser as $ingrediens

- gør. Altså:

1) $ingredienser er listen af ingredienser.
2) $ingrediens er den enkelte ingrediens undervejs i forach-løkken.
Avatar billede clausberg Nybegynder
29. juli 2005 - 20:38 #18
Fejlmeldingen er:

Parse error: parse error, unexpected T_PRINT in /customers/opskriftbasen.dk/opskriftbasen.dk/httpd.www/showone.php on line 27
Avatar billede nielle Nybegynder
29. juli 2005 - 20:47 #19
Der manglede rent faktisk også et semikolon i afslutningen af linje 27.

Sådan:

<?php
$conn = mysql_connect("localhost", "XXX", "XXX") or die(mysql_error());
mysql_select_db("XXX") or die(mysql_error());
?>
<table border="1">
<tr>
<th>titel</th>
<th>kategori</th>
<th>ingredienser</th>
<th>fremgangsmåde</th>
<th>kuverter</th>
</tr>
<?php
$titel = $_GET["titel"];
$rs = mysql_query("SELECT * FROM opskrifter WHERE titel='$titel'") or die(mysql_error());
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC))
{
    print "<tr>\n";
    print "<td>" . $row["titel"] . "</td>\n";
    print "<td>" . $row["kategori"] . "</td>\n";
    print "<td>" . $row["kuverter"] . "</td>\n";
    print "</tr>\n";

    print "<tr>\n";
    print "<td colspan='3'>";
    print "Til retten skal du bruge:<br><br>";
    print "<ol>";
    $ingredienser = explode(",", $row["ingredienser"]);
    foreach ($ingredienser as $ingrediens)
    {
        echo "<li>" . trim($ingrediens) . "</li>";
    }   
    print "</ol>";
    print "</td>\n";
    print "</tr>\n";

    print "<tr>\n";
    print "<td colspan='3'>" . $row["fremgangsmåde"] . "</td>\n";
    print "</tr>\n";
}
mysql_free_result($rs);
?>
</table>
<?php
mysql_close($conn);
?>
Avatar billede clausberg Nybegynder
29. juli 2005 - 21:14 #20
Ondt!!! Det virker... men der er lidt rod i tabellerne... nu kommer de forskellige data frem i de forkerte tabeller... kan du umiddelbart se problemet???
Avatar billede nielle Nybegynder
29. juli 2005 - 21:17 #21
Nu er jeg jo likke klar over hvad du mener med "de forkerte tabeller" - jeg aner ikke engang hvad de rigtige tabeller er for nogen ;^)

Men jeg kan da påpege at jeg tillod mig at lave lidt om på designet sådan at det var bedre egnet til at kunne stå der i bredden.
Avatar billede clausberg Nybegynder
29. juli 2005 - 21:25 #22
Ahhh :D
ja du har ret med hensyn til bredden - god ide :)
Men under ingredienser står der nu antal kuverter.
Fremgangsmåde og kuverter står tomme tilbage - dog er indholdet rykket længere ned på siden.

Kan det have noget at gøre med colspan skal være =5 fx????
Og at TABLE ikke er sat rigtig op?????

men ellers fungerer det super godt :)
Avatar billede nielle Nybegynder
29. juli 2005 - 21:33 #23
colspan skal ikke være 5 - den er sat til 3 fordi at der nu er 3 celler i bredden i den første række.

Nej, problemet bestod simpelthen i at jeg havde overset dine table-headers. Det er ordnet med denne version:

<?php
$conn = mysql_connect("localhost", "XXX", "XXX") or die(mysql_error());
mysql_select_db("XXX") or die(mysql_error());
?>
<table border="1">
<tr>
<th>Titel</th>
<th>Kategori</th>
<th>Kuverter</th>
</tr>
<?php
$titel = $_GET["titel"];
$rs = mysql_query("SELECT * FROM opskrifter WHERE titel='$titel'") or die(mysql_error());
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC))
{
    print "<tr>\n";
    print "<td>" . $row["titel"] . "</td>\n";
    print "<td>" . $row["kategori"] . "</td>\n";
    print "<td>" . $row["kuverter"] . "</td>\n";
    print "</tr>\n";

    print "<tr>\n";
    print "<td colspan='3'>";
    print "<strong>Ingredienser<strong><br>";
    print "Til retten skal du bruge:<br><br>";
    print "<ol>";
    $ingredienser = explode(",", $row["ingredienser"]);
    foreach ($ingredienser as $ingrediens)
    {
        echo "<li>" . trim($ingrediens) . "</li>";
    }
    print "</ol>";
    print "</td>\n";
    print "</tr>\n";

    print "<tr>\n";
    print "<td colspan='3'>";
    print "<strong>Fremgangsmåde</strong><br>";
    print $row["fremgangsmåde"];
    print "</td>\n";
    print "</tr>\n";
}
mysql_free_result($rs);
?>
</table>
<?php
mysql_close($conn);
?>
Avatar billede clausberg Nybegynder
29. juli 2005 - 21:37 #24
Jeg er rystet :-D Det virker til perfektion!!!!!!!!!!!!

Vildt :)
Jamen, så er der jo styr på alt - er der mere der kan gøres bedre????
Avatar billede nielle Nybegynder
29. juli 2005 - 21:42 #25
Det er vel svært at overgå "Det virker til perfektion!!!!!!!!!!!!" ;^)

Om noget kan gøres "bedre" afhænger imidlertid meget af hvad man finder mest æstetisk. Så der er der jo 1000 meninger om.

... du får et svar :^)
Avatar billede clausberg Nybegynder
29. juli 2005 - 21:43 #26
Takker for en kanon god hjælp - hav en fortsat god aften :-)
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