Vinnaren i pepparkakshustävlingen!
2012-01-22, 15:47
  #1
Medlem
Frabbes avatar
Hej!

Jag vill hämta från en databas, och skriva ut tex.
Filmer

Böcker

Spel

I ett table (html).

Problemet är att om jag nu har tex 5 Filmer, så blir det

Filmer
Film1
Filmer
Film2
Filmer
Film3

När jag vill skriva ut:

FIlmer
Film1
Film2
Film3

Hur ska jag göra?

Koden är:
Kod:
<?php
<?php
$query 
mysql_query("
SELECT *
FROM aa_mycollection INNER JOIN
aa_collection_items 
ON aa_mycollection.article_nr=aa_collection_items.article_nr
WHERE aa_mycollection.username = '
$username
ORDER BY format"
);
if(!
$query
echo 
mysql_error();
while(
$r mysql_fetch_array($query))
{
if(
$r['picture_link'] != ""
{
$picture "Ja";
}
else
{
$picture "Nej";
}
?>
<p><?php echo $r['format']; ?></p>
        <tr>
          <td width="319" height="36"><?php echo $r['title']; ?></td>
          <td width="130"><?php echo $r['article_nr']; ?></td>
          <td width="50"><?php echo $r['antal_samlare']; ?></td>
          <td width="41"><?php echo $picture?></td>
          <td width="52"><?php echo $r['country']; }?></td>
        </tr>
       
    </tr>

Kod:
Men det kommer ut som

$Format 
(exempelFilm)
$title
$article_nr
osv
$Format 

igen
fast jag vill ha
$Format
$title
$article_nr
$title
$article_nr 
__________________
Senast redigerad av Frabbe 2012-01-22 kl. 15:55.
Citera
2012-01-22, 16:48
  #2
Medlem
GlennGBGs avatar
Nu kan jag inte php vidare bra, men jag hade nog försökt få ut det i en lista med arrayer, där varje array dels innehåller "format" som en sorts gruppering. Sedan, i C# t.ex., så är det bara att genom en foreach-loopplocka ut varje array för sig som är av rätt format.

Men, någon som är bättre på php får väl ge dig ett mer passande svar.
Citera
2012-01-22, 16:59
  #3
Medlem
Lagra format i en variabel utanför while loopen och skriv bara ut formatet om värdet från databasen skiljer sig mot det som du har sparat i variabeln, dvs du är på ett nytt format.

Ex:

// initiera form-variabel

// loppa filmer
// om värde från databasen inte är samma som $form, så skriv ut det
// skriv ut filmens namn och annan info
// sparar format i form-variabeln.
Citera
2012-01-22, 17:23
  #4
Medlem
Frabbes avatar
Citat:
Ursprungligen postat av _Användarnamn
Lagra format i en variabel utanför while loopen och skriv bara ut formatet om värdet från databasen skiljer sig mot det som du har sparat i variabeln, dvs du är på ett nytt format.

Ex:

// initiera form-variabel

// loppa filmer
// om värde från databasen inte är samma som $form, så skriv ut det
// skriv ut filmens namn och annan info
// sparar format i form-variabeln.

Kan du visa i php?
Citera
2012-01-22, 17:50
  #5
Medlem
Kod:
foreach($ansl->query("select * from aa_mycollection") as $filmrad){
            echo 
"<tr>";
            echo 
"<td>".$filmrad['artikelnr']."</td>";            
            echo 
"<td>".$filmrad['filmnamn']."</td>";            
            echo 
"<td>".$filmrad['längd']."</td>";
            echo 
"</tr>";


http://wallmander.net/1108-pdo-mysql...ionerna-php-5/
Citera
2012-01-22, 19:42
  #6
Medlem
Kod:
$temp = "";

while(){
 if($temp != $r["format"]){
  print $r["format"];
  $temp = $r["format"];
 }
 
 print $r['title'];

}


Alltså, för varje varv i loopen så skrivs format ut som det skiljer sig från förra varvet i loopen. Är det samma så skrivs det inte ut.
Citera
2012-01-22, 22:10
  #7
Medlem
Frabbes avatar
Citat:
Ursprungligen postat av _Användarnamn
Kod:
$temp = "";

while(){
 if($temp != $r["format"]){
  print $r["format"];
  $temp = $r["format"];
 }
 
 print $r['title'];

}


Alltså, för varje varv i loopen så skrivs format ut som det skiljer sig från förra varvet i loopen. Är det samma så skrivs det inte ut.

Kan inte testa nu, men alltså kommer det skrivas ut såhär?:
Filmer
(Om nuvarande radens Format = Filmer)
Film1
Film2
Film3
(Nu blir Format = Spel)
Spel
Spel1
Citera
2012-01-22, 23:06
  #8
Medlem
Citat:
Ursprungligen postat av Frabbe
Kan inte testa nu, men alltså kommer det skrivas ut såhär?:
Filmer
(Om nuvarande radens Format = Filmer)
Film1
Film2
Film3
(Nu blir Format = Spel)
Spel
Spel1

Jepp, du lagrar värdet för format temporärt i en variabel som då talar om vad förra varvet i loopen hade för format.
Citera
2012-01-23, 14:56
  #9
Medlem
Frabbes avatar
Citat:
Ursprungligen postat av _Användarnamn
Jepp, du lagrar värdet för format temporärt i en variabel som då talar om vad förra varvet i loopen hade för format.

Såhär ser det ut:
Kod:
$temp = "";
while($r = mysql_fetch_array($query))
{
if($r['picture_link'] != "") 
{
$picture = "Ja";
}
else
{
$picture = "Nej";
}
?>
<table width="626" border="0">
        <tr>
          <td width="319" height="23"><span class="style1 style1">Objekt</span></td>
          <td width="130"><span class="style1">nr</span></td>
          <td width="50"><span class="style1">samlare</span></td>
          <td width="41"><span class="style1">Bild</span></td>
          <td width="52"><span class="style1">Land</span></td>
        </tr>
        <?php
        
if($temp != $r["format"]){
  echo 
"<p>";
  echo 
$r['format'];
  echo 
"<p>";
  
$temp $r["format"];
 }
?>
        <tr>
          <td width="319" height="36"><a href=""><?php echo $r['title']; ?></a></td>
          <td width="130"><?php echo $r['article_nr']; ?></td>
          <td width="50"><?php echo $r['antal_samlare']; ?></td>
          <td width="41"><?php echo $picture?></td>
          <td width="52"><?php echo $r['country']; ?></td>
        </tr>
       
    </tr>
  </table>

Det fungerar, förutom att
Kod:
<table width="626" border="0">
        <
tr>
          <
td width="319" height="23"><span class="style1 style1">Objekt</span></td>
          <
td width="130"><span class="style1">Artikelnr</span></td>
          <
td width="50"><span class="style1">Antal samlare</span></td>
          <
td width="41"><span class="style1">Bild</span></td>
          <
td width="52"><span class="style1">Land</span></td>
        </
tr
skrivs
skrivs ut två gånger fast det är samma format.


Alltså, om nästa rad i databasen är samma format som föregående, då vill jag inte göra ett nytt table, utan endast lägga till en ny row i table.

Så, jag vill inte skriva ut table koden ovan om det är samma format. Hur gör jag?
__________________
Senast redigerad av Frabbe 2012-01-23 kl. 15:17.
Citera
2012-01-23, 16:17
  #10
Medlem
Är du med på hur det funkar med att ha föregående format i temp-variabeln?

När du sittar på dess värde och skriver utformat så kan du skriva ut <table>

Kod:
$temp = "";
$i=0; // räknar antalet tabeller

while(){
 if($["format"] != $temp){
  $temp = $["format"];
   if($i++ > 0){
    print "</table>"; // avsluta föregående tabell
   }

  print "<table><tr><td>rubrik</td></tr>";
 }

 print "<tr><td>...</td></tr>";

}

if($i > 0){
 print "</table>"; // avsluta föregående tabell
}

Dvs, du skriver ut table-taggen när format ändras och om det inte är den första tabellen skriver du först ut </table> för att avsluta föregående tabell. Detta måste du göra en gång till på slutet.
Citera
2012-01-24, 21:16
  #11
Medlem
Frabbes avatar
Citat:
Ursprungligen postat av _Användarnamn
Är du med på hur det funkar med att ha föregående format i temp-variabeln?

När du sittar på dess värde och skriver utformat så kan du skriva ut <table>

Kod:
$temp = "";
$i=0; // räknar antalet tabeller

while(){
 if($["format"] != $temp){
  $temp = $["format"];
   if($i++ > 0){
    print "</table>"; // avsluta föregående tabell
   }

  print "<table><tr><td>rubrik</td></tr>";
 }

 print "<tr><td>...</td></tr>";

}

if($i > 0){
 print "</table>"; // avsluta föregående tabell
}

Dvs, du skriver ut table-taggen när format ändras och om det inte är den första tabellen skriver du först ut </table> för att avsluta föregående tabell. Detta måste du göra en gång till på slutet.

Förstår inte hur du menar, varför $i och $temp?
Kan du visa med koden jag använt?
Citera
2012-01-24, 23:56
  #12
Medlem
Citat:
Ursprungligen postat av Frabbe
Förstår inte hur du menar, varför $i och $temp?
Kan du visa med koden jag använt?

Står ju förklarat i koden
$i=0; // räknar antalet tabeller

Har du inte koll på while, $, ++, if så år det bara att googla och läsa lite om det så begriper du säkert!
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