Avatar billede netpimp Nybegynder
20. november 2011 - 02:42 Der er 6 kommentarer og
1 løsning

Opdele while løkke i 2 dele

På min side udskriver jeg 48 tilfældige billeder fra en database, disse billeder henter jeg lige nu ud med to while løkker som nedenstående:

<?php

$result = mysql_query("SELECT * from galleries order by rand() LIMIT 24") or die(mysql_error());

while($row = mysql_fetch_array( $result ))
{

echo '<div class="thumb"><a href="'.$row['link'].'"><img src="img/'.$row['image'].'" alt="'.$row['text'].'" width="320" height="240" /></a></div>' . "\n";

}
?>

Jeg er dog sikker på der findes en smartere måde at gøre dette på, da jeg med den nuværende metode risikere at det samme billede optræder i begge while løkker.

Min side er opbygget sådan at der først præsenteres 24 billeder, derefter er der noget andet indhold, og så kommer der 24 billeder igen.

Findes der en måde hvorpå jeg kan fortælle den ene while løkke at den skal hente de første 24 tilfældige rækker, og senere i en anden while løkke hente den sidste 24 rækker?
Avatar billede finb Ekspert
20. november 2011 - 10:02 #1
læser med...
Avatar billede showsource Seniormester
20. november 2011 - 11:58 #2
$result = mysql_query("SELECT * from galleries order by rand() LIMIT 48") or die(mysql_error());
NOTE: Vælg kun de felter i db du skal bruge !!!!!

for($i=0; $i < 24; $i++)
echo"Billede ".mysql_result($result, $i, "image")."<br />";
}

Mere her.........

for($i=24; $i < 48; $i++)
echo"Billede ".mysql_result($result, $i, "image")."<br />";
}
Avatar billede netpimp Nybegynder
21. november 2011 - 00:34 #3
Mange tak skal du have for hjælpen :)

Jeg vil huske i fremtiden kun at vælge den felter i databasen jeg skal bruge.

Der var dog en lille fejl i din kode, du have glemt et { før echo, så koden kommer til at se således ud:

for($i=0; $i < 24; $i++) {
echo"Billede ".mysql_result($result, $i, "image")."<br />";
}

og de sidste 24:

for($i=24; $i < 48; $i++) {
echo"Billede ".mysql_result($result, $i, "image")."<br />";
}

Hvis du lige ligger et svar, får du nogle point :)
Avatar billede Qobra Nybegynder
21. november 2011 - 20:21 #4
Du kan også bare gøre følgende:

<?
$result = mysql_query("SELECT * from galleries order by rand() LIMIT 48") or die(mysql_error());

for($i = 0; $i < 24 && $row = mysql_fetch_array( $result ); $i++) {
  // første 24
  print_r($row);
}

for($i = 0; $i < 24 && $row = mysql_fetch_array( $result ); $i++) {
  // næste 24
  print_r($row);
}
?>
Avatar billede Qobra Nybegynder
21. november 2011 - 20:30 #5
Og så kan du forresten også vælge at læse de 48 rækker ind i et array, og så læse fra det array, efterhånden som du får brug for rækkerne.
Avatar billede showsource Seniormester
22. november 2011 - 14:02 #6
Et svar.

Og der er vel ingen grund til at putte det i et array ?
Avatar billede Qobra Nybegynder
22. november 2011 - 14:49 #7
Nej, der er ikke nødvendigvis en grund til det, det var bare et forslag. Sådan plejer jeg dog selv at gøre. Min struktur er typisk: Forbind til database, hent data ind i variabler, luk forbindelse til databasen igen, og så til sidst flet html template med data variabler.
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