Avatar billede koch Nybegynder
18. marts 2005 - 16:13 Der er 15 kommentarer og
1 løsning

Det samme element vises fra database

Jeg har følgende
$numb er i dette tilfælde=1.

for ($i=(1+($numb-1)*15); $i<=$numb*15; $i++)
{
while ($row = @mysql_fetch_array($query))
{
    $car_mark = $row["mark"];
    $car_year = $row["year"];
    $car_km=$row["km"];
    $car_notice=$row["notice"];
    $car_price=$row["price"];
    $car_id=$row["id"];
                                        $km_conv = number_format($car_km, 0, ',', '.');
$price_conv = number_format($car_price, 0, ',', '.');
}
echo ("<tr> ");
echo ("<td><a href=\"price.php?bil=$car_id\">$car_mark</a></td>");
echo ("<td>$car_year</td>");
echo ("<td>$km_conv</td>");
echo ("<td>$car_notice</td>");
echo ("<td>kr. $price_conv</td>");
echo ("</tr>");
}

Som der skulle vise de første femten elementer som der er hentet fra databasen på siden, men det er samme element som vises 15 gange! Det er element nr. 13! Er der en der kan lure fejlen?
Avatar billede basicq Nybegynder
18. marts 2005 - 16:19 #1
Hvor mange rækker har du i din base.
Avatar billede coderdk Praktikant
18. marts 2005 - 16:20 #2
Hvorfor ikke bruge SQL? SELECT * FROM dintabel LIMIT 15 og så bare hive alt hvad du får ud, og vise det - Resultatet bliver det samme og bedre, smartere og sikrere ;)

Lad mig gætte du har kun 13 elementer i din database... Du laver en løkke der løber 15 gange, i den hiver du ALT ud fra databasen og derefter viser du det sidste der er blevet hevet ud... ;)
Avatar billede koch Nybegynder
18. marts 2005 - 16:23 #3
Der er 15 elementer i databasen! Der vil efterhånden komme flere elementer i databasen, så jeg har bare brug for at liste dem 15 af gangen, derfor ikke LIMIT 15...
Avatar billede coderdk Praktikant
18. marts 2005 - 16:26 #4
Læs om SQL's LIMIT; den tager også et offset - LIMIT 30,15 tager 15 fra position 30 i resultatsættet ;) Tro mig, det er måden at gøre det på :)

http://dev.mysql.com/doc/mysql/en/select.html
http://www.w3schools.com/sql/default.asp
Avatar billede coderdk Praktikant
18. marts 2005 - 16:26 #5
Hvis du fjerner @ ved mysql_fetch_array kan du se fejlene ;)
Avatar billede basicq Nybegynder
18. marts 2005 - 16:28 #6
jamen du looper igennem i while loopet og den tager den sidste derfor.
Avatar billede koch Nybegynder
18. marts 2005 - 16:37 #7
Jeg har forsøgt at fjerne @, men jeg kan ikke se fejlene! Hvad er forskellen på om @ er der eller ej?
Jeg er ikke helt med på det med limit, for hvis siden skal være dynamisk, så er det vel ikke optimalt... Jeg skal nok læse om det... ;)

Er det mit loop der ikke er optimalt? For jeg kan ikke se fejlen i det!
Avatar billede coderdk Praktikant
18. marts 2005 - 16:46 #8
LIMIT er løsningen, du sætter bare nogle dynamiske variable ind i din SQL, ligesom:

$sql = "SELECT * FROM dintabel LIMIT $start, $antal";

Du har simpelthen et loop for meget, du skal ikke have et for() loop, din while()-løkke er nok hvis du bruger LIMIT.
Avatar billede koch Nybegynder
18. marts 2005 - 17:08 #9
Men er det muligt at lave det noget i retning af det jeg har gjort? For de værdier jeg har brugt, bruges også længere nede på siden, så det letteste ville være hvis jeg kunne få det til at virke...
Avatar billede koch Nybegynder
18. marts 2005 - 17:53 #10
kunne jeg evt bare sætte $start=(1+($numb-1)*15), $antal=$numb*15;
Avatar billede koch Nybegynder
18. marts 2005 - 18:06 #11
Løsningen blev:

while ($row = @mysql_fetch_array($query))
{
for ($i=(1+($numb-1)*15); $i<=$numb*15; $i++)
{
    $car_mark = $row["mark"];
    $car_year = $row["year"];
    $car_km=$row["km"];
    $car_notice=$row["notice"];
    $car_price=$row["price"];
    $car_id=$row["id"];
                                        $km_conv = number_format($car_km, 0, ',', '.');
$price_conv = number_format($car_price, 0, ',', '.');
}
echo ("<tr> ");
echo ("<td><a href=\"price.php?bil=$car_id\">$car_mark</a></td>");
echo ("<td>$car_year</td>");
echo ("<td>$km_conv</td>");
echo ("<td>$car_notice</td>");
echo ("<td>kr. $price_conv</td>");
echo ("</tr>");
}
Avatar billede coderdk Praktikant
18. marts 2005 - 18:19 #12
Det giver ingen mening. Det er det samme som at skrive:

while ($row = @mysql_fetch_array($query))
{
    $car_mark = $row["mark"];
    $car_year = $row["year"];
    $car_km=$row["km"];
    $car_notice=$row["notice"];
    $car_price=$row["price"];
    $car_id=$row["id"];
                                        $km_conv = number_format($car_km, 0, ',', '.');
$price_conv = number_format($car_price, 0, ',', '.');
echo ("<tr> ");
echo ("<td><a href=\"price.php?bil=$car_id\">$car_mark</a></td>");
echo ("<td>$car_year</td>");
echo ("<td>$km_conv</td>");
echo ("<td>$car_notice</td>");
echo ("<td>kr. $price_conv</td>");
echo ("</tr>");
}

Bortset fra at dét der er hurtigere...
Avatar billede coderdk Praktikant
18. marts 2005 - 18:19 #13
Fordi du sparer dit for()-loop som ikke lavede andet end at sætte dine $car_* variable til det samme x gange...
Avatar billede coderdk Praktikant
18. marts 2005 - 18:23 #14
Forøvrigt glemte jeg at svare på dit andet spørgsmål: @ undertrykker fejlmeddelelser...
Et eksempel er denne:

// Denne vil komme med en fejl
if ( $fp = fopen( "jegfindesikke", "r" ) )
{
  echo "Det lykkedes faktisk at åbne filen...";
  fclose( $fp );
}

// Det vil denne ikke
if ( $fp = @fopen( "jegfindesikke", "r" ) )
{
  echo "Det lykkedes faktisk at åbne filen...";
  fclose( $fp );
}
Avatar billede koch Nybegynder
21. marts 2005 - 17:15 #15
Tak for svaret. Det giver mening, for jeg tager $numb fra adresselinien. Jeg kan godt se din pointe, men det giver mening i dette tilfælde.

Tak for den sidste besvarelse også.
Avatar billede koch Nybegynder
21. marts 2005 - 17:16 #16
I øvrigt, kan du måske hjælpe med at kigge på denne http://www.eksperten.dk/spm/602034
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