Gå til innhold

$result fra db i tabell? [LØST]


Anbefalte innlegg

Hvis jeg lager følgende script så får jeg opp det som står i databasen under hverandre, men ønsker å få de lagt inn i en tabell med syv kolonner. Når jeg har over syv "poster" i tabellen vil jeg at det skal fylles ut på rad 2 osv.

 

do {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"], $myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));

 

noen forslag?

Endret av stclem
Lenke til kommentar
Videoannonse
Annonse

Tror jeg mener hva du forstår...

 

Skal prøve å forklare dette, uten å gi deg koden for det direkte.

 

Før løkken, så må du jo opprette en tabell (<table><tr>) som avsluttes etter løkken (</tr></table>)

Ved utskrift av hver post, må du sette inn en celle ("<td>det som skal i cellen</td>"). Dette regner jeg med er greit.

Etter hver 7. post, så vil du sette inn "</tr><tr>"

For å vite når du har 7 poster, kan du dele en teller med 7, og se hva du får i rest.

For å finne ut hva som er i rest når du deler, bruker du modulus operatøren (%). Da får du resten som svar. Eksempel:

0 % 7 = 0
1 % 7 = 1
2 % 7 = 2
3 % 7 = 3
4 % 7 = 4
5 % 7 = 5
6 % 7 = 6
7 % 7 = 0
8 % 7 = 1
9 % 7 = 2
...
14 % 7 = 0

Så du kan da teste på når $teller%7==0, så skal du sette inn "</tr><tr>"

verdien av $teller må settes før løkken, økes med 1 på slutten av løkken.

 

Håper du skjønte litt av det. Var ikke så lett å forklare, fant jeg ut.

Lenke til kommentar
Tror jeg mener hva du forstår...

 

Skal prøve å forklare dette, uten å gi deg koden for det direkte.

 

Før løkken, så må du jo opprette en tabell (<table><tr>) som avsluttes etter løkken (</tr></table>)

Ved utskrift av hver post, må du sette inn en celle ("<td>det som skal i cellen</td>"). Dette regner jeg med er greit.

Etter hver 7. post, så vil du sette inn "</tr><tr>"

 

alt frem til hit er riktig. Men det under skjønte jeg ikke akkurat. Begynner å lure på om dette er for vanskelig for meg. Holder på å lære, og trudde dette skulle være en smal sak....

 

For å vite når du har 7 poster, kan du dele en teller med 7, og se hva du får i rest.

For å finne ut hva som er i rest når du deler, bruker du modulus operatøren (%). Da får du resten som svar. Eksempel:

0 % 7 = 0
1 % 7 = 1
2 % 7 = 2
3 % 7 = 3
4 % 7 = 4
5 % 7 = 5
6 % 7 = 6
7 % 7 = 0
8 % 7 = 1
9 % 7 = 2
...
14 % 7 = 0

Så du kan da teste på når $teller%7==0, så skal du sette inn "</tr><tr>"

verdien av $teller må settes før løkken, økes med 1 på slutten av løkken.

 

Håper du skjønte litt av det. Var ikke så lett å forklare, fant jeg ut.

9386048[/snapback]

Lenke til kommentar

Du legger inn en if så det blir noe slikt

PHP
<?php

// inn i løkken

 

if ($teller%7==0) echo '</tr><tr>';

++$teller;

?>

 

Som du ser av listen over så vil if'en kun være sann for hver 7. forekomst, altså ved verdi 0, 7, 14, 21 ... så da vil det avsluttes og startes en ny rad for hver 7. forekomst/post.

 

Hvis du vil ha kun 5 kolonner, så bruker du if ($teller%5==0) osv.

Lenke til kommentar

Se den lille koden til crowly, så ser du det greit.

pseudo:

<table>
<tr>
sett verdien av $teller til 1
løkke {
   <td>innhold i celle</td>
   Hvis resten av $teller delt på 7 er lik 0 { ( if($teller%7==0) )
       </tr><tr>
   }
   Øk $teller med 1
}
</tr>
</table>

Det bør vøre en grei oppgave å overføre denne pseudo koden til php.

Hvis du skjønte det bedre. Selv foretrekker jeg å bruke modulus.

 

EDIT: Brukte modulus i pseudo istedet, kom på at det kanskje bare vil forvirre å komme med et annet kode eksempel nå

Endret av kakkle
Lenke til kommentar

Så langt har jeg kommet, men som dere ser så er noe klart feil.

 

$result = mysql_query("SELECT * FROM employees ",$db);

$teller==1;
echo "<table border=\"1\"><tr>";

do {
printf("<td>%s %s<td>\n", $myrow["first"], $myrow["last"]);
if ($teller%4==0) echo '</tr><tr>';
} while ($myrow = mysql_fetch_array($result));
echo "</tr></table>";

Lenke til kommentar

Du må huske å øke $teller med 1 inni løkken, etter if setningen

 

EDIT: Grunnen til at den kom med </tr><tr> etter hver post, var nok at du satte $teller==1; Da er ikke $teller satt til noenting, mao ingenting, Svaret blir da 0. Siden du ikke økte telleren, så var den 0 hver gang...

Endret av kakkle
Lenke til kommentar

funket faktisk når man økte teller ja, glemte den.

 

Eneste problemet, som ikke er noe problem for meg, er at første "rute" i tabellen blir tom, siden det kommer </tr><tr> forran 0 også.

 

Men siden jeg skal ha de tre første tom så er det ikke noe problem for meg, bare en post mindre og sette inn som blank.

Lenke til kommentar

PHP

<?php

$result mysql_query("SELECT * FROM employees ",$db);

 

$teller==1;

echo "<table border="1"><tr>";

 

while ($myrow mysql_fetch_array($result)) {

printf("<td>%s %s<td>"$myrow["first"], $myrow["last"]);

if ($teller%4==0) echo '</tr><tr>';

} ;

echo "</tr></table>"

?>

 

Ei do-while løkke utfører koden først ein gang og så evaluerer den koden i while(..) dermed er ikkje $myrow satt før andre runde. While er løkka du er ute etter.

Lenke til kommentar

Takk for all hjelp. Endte opp med følgende kode til slutt, og det funker glimrende.

 

$result = mysql_query("SELECT * FROM employees ",$db);
$teller=1;

echo "<center><table border=\"1\" cellspacing=\"0\" cellpadding=\"0\"><tr>";

while ($myrow = mysql_fetch_array($result)) {
printf("<td align=\"center\" valign=\"top\" width=\"100\">%s %s</td> ", $myrow["first"], $myrow["last"]);
if ($teller%7==0) echo '</tr><tr>';
++$teller;
} 
echo "</tr></table>";
?>

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...