webForumDet fria alternativet

loopa fram tabellinnehåll - en rad för lite..

PHP

6 svar · 470 visningar · startad av yaz

Medlem sedan maj 20021 028 inlägg
Frågan#1

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..

Medlem sedan aug. 20002 975 inlägg
#2

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.

Medlem sedan maj 20021 028 inlägg
#3

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);
Medlem sedan maj 20021 028 inlägg
#4

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>
Medlem sedan nov. 200227 inlägg
#5

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.

Medlem sedan mars 20034 471 inlägg
#6

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)

Medlem sedan maj 20021 028 inlägg
#7

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!

351 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
186 ms — ändringar (db)