Hur ser din kod ut innan dessa rader ?
Vet inte hur du ha gjort, men någon gång emellanåt ser man dom som kör ett extra mysql_fetch_array() före while-loopen (ger en effekt, ungefär som du beskriver).
Har du en sådan, tag då bort den.
6 svar · 470 visningar · startad av yaz
Jag försöker loopa fram nyheter från min news-tabell. Den innehåller 3st rader just nu men endast 2 visas på sajten. Beroende på vilken SORT BY jag använder så visas antingen de två sista eller de två första raderna.
Jag har sökt som en galning efter motsvarigheten till "do until rs.eof" (ASP-snubbe från början) och den kod jag funnit ger mig endast 2 rader.
Ser ungefär ut så här:
while ($rowNEWS = mysql_fetch_array($resultNEWS)) {
echo $rowNEWS['date']."__".$rowNEWS['time'];
echo $rowNEWS['new'];
}
adressen är https://www.ferrypin.net. Jag kämpar med "news" där till vänster..
Hur ser din kod ut innan dessa rader ?
Vet inte hur du ha gjort, men någon gång emellanåt ser man dom som kör ett extra mysql_fetch_array() före while-loopen (ger en effekt, ungefär som du beskriver).
Har du en sådan, tag då bort den.
Påverkas det där jag sätter $rowNEWS till mysql_fetch_array?
$db = mysql_connect('localhost', 'blä', 'blarhblarh');
mysql_select_db('ferrypin_net');
// hämtar NEWS och lägger i variabeln resultNEWS
// och sedan används rowNEWS för att loopa fram info från databasen
$resultNEWS = mysql_query("SELECT date, time, new FROM news") or die (mysql_error());
$rowNEWS = mysql_fetch_array($resultNEWS);
Jag har plockat ut koden som inte funkar i en separat fil, för att testa i ren miljö.
http://www.ferrypin.net/dbtest.php
Jag har nu 4st nyheter i tabellen men endast 3st visas.
jag använder
$num_rows = mysql_num_rows($resultNEWS);
echo "$num_rows News";
och där ser man att det verkligen finns 4st rader.
Här är HELA källkoden för filen dbtest.php:
<?php echo "<"."?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
<head>
<title>f e r r y p i n</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="ferrypin_default.css" rel="stylesheet" type="text/css" />
</head>
<body bgcolor="#C2C287" text="#000000" id="all" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10" link="#660000" vlink="#660000" alink="#660000">
<?php
// connecting to the base
$db = mysql_connect('localhost', 'blä', 'blarhblarh');
mysql_select_db('ferrypin_net');
// hämtar NEWS och lägger i variabeln resultNEWS
// och sedan används rowNEWS för att loopa fram info från databasen
$resultNEWS = mysql_query("SELECT id, date, time, new FROM news") or die (mysql_error());
$rowNEWS = mysql_fetch_array($resultNEWS);
while ($rowNEWS = mysql_fetch_array($resultNEWS))
{
print "<span class=\"newsDate\">".$rowNEWS['date']."__".$rowNEWS['time']."</span>";
print $rowNEWS['new'];
}
$num_rows = mysql_num_rows($resultNEWS);
echo "$num_rows News";
?>
</body>
Ja, det påverkas av att du läser ett resultat innan du hamnar i loopen. Så tipset att ta bort raden bör kunna hjälpa dig.
Började undra för mig själv om rewind fungerar på MySQL-resultat.
Följ Mattes råd!
$resultNEWS = mysql_query("SELECT id, date, time, new FROM news")
or die (mysql_error());
$rowNEWS = mysql_fetch_array($resultNEWS); //<- ta bort denna rad!!!
while ($rowNEWS = mysql_fetch_array($resultNEWS)) {
//....
Den nyhet som ligger först i ditt recordset kommer inte ut, eftersom du i whileslingan där utskrift sker OMEDELBART skriver över den med rad 2.
Om du tar bort raden, kommer alla rader att gås igenom i whileslingan däremot.
(Sedan hoppas jag att det inte visar mer än du hade tänkt dig i din connect-sats... dvs du har väl dummyvärden där? :o)
Ja, jag har preparerat connect-infon lite granna ;)
Tack för era tips, ska prova dem direkt!
EDIT: Men om jag tar bort den raden så "existerar" variablen $rowNEWS inte.. hur ska jag sedan kunna använda den..?
EDIT2: Yesh! Det funkar! NUU förstår jag vad som händer. while-slingan sätter variabeln varje gång så den behöver inte definieras innan. Tack till Matte som kom med svaret och till er andra som hjälpte till att förklara!