webForumDet fria alternativet

Rad som inte skrivs ut... (från MySQL db)

PHP

6 svar · 274 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Frågan#1

Det här är inte min dag... Vad är det jag inte ser?

   $pos = 1;
   echo "<table><tr><th class=\"gold\">No</th>
         <th class=\"gold\">Member</th>
         <th class=\"gold\">Result</th>
         <th class=\"gold\">Date</th></tr>";
   while($rowHigh = mysql_fetch_array($q) && $pos < 11) {
      if ($_SESSION["X"] == $rowHigh["0"])
         $td = "<td class=\"blueC\">";
      else $td = "<td>";
      echo "<tr> $td $pos</td>$td".$rowHigh["0"]."</td>$td".$rowHigh["1"]."</td>$td".$rowHigh["2"]."</td></tr>";
      $pos++;
   }
   echo "</table><BR><BR>";

Skriver ut en tabell med följande utseende:

No   Member   Result   Date
1

Hur i ... x( kan 1 skrivas ut när inte resten gör det??? :q
Tabellen ska innehålla en rad, och något måste den ju innehålla annars skulle inte 1:an heller skrivas ut! Så var är felet? :x

Medlem sedan juni 20006 031 inlägg
#2

Inget verkar hämtas från databasen.
Att 1 skrivs ut är ju inte så konstigt, det har du ju gett med variabeln $pos = 1;
Förmodligen har du något fel vid din sql sats.

Medlem sedan mars 20034 471 inlägg
#3

Re: Rad som inte skrivs ut... (från MySQL db)

??? Pedda, vad menar du?

   while($rowHigh = mysql_fetch_array($q) && $pos < 11) {

Förutsättningen för att while-satsen ska köras är att villkoret är uppfyllt. Eftersom villkoret är &&-at, måste båda villkoren vara uppfyllda. Om $q är tom så lämnar väl mysql_fetch_array($q) tillbaka FALSE? Det gör den ju i alla andra sammanhang när det inte finns mer att hämta. Menar du att den hanterar en tom mängd annorlunda??? :q

Medlem sedan juni 20034 013 inlägg
#4

Prova att ta bort citationstecknena från $rowHigh[]. Jag vet inte om det är det, men de ska i alla fall inte vara där.

$rowHigh[0]
$rowHigh[1]

osv...

Medlem sedan mars 20034 471 inlägg
#5

Fixat, tack. :) Men felet kvarstår...

Dock har jag felsökt även på annat sätt och därför vet jag att tabellen innehåller en rad med följande info, (hämtad med mysql_fetch_array):
0 => Tester, 1 => 1, 2 => 2004-09-15, 3 => 10, 4 => <mitt ip>

Av detta borde (Tester, 10, 2004-09-15) komma ut med min SQL-fråga. Förutsatt att minst ett av de två tips jag fick i SQL-forumet om hur man jämför datum stämmer. Jag börjar tro att det är där skon klämmer... Eller kanske snarast i min tillämpning av tipsen. Dock förklarar det fortfarande inte hur jag hamnar i while-slingan om den inte hittar raden.... :(

Följande fungerar inte:

$fiveDaysAgo = date("Y-m-d", time() - 60 * 60 * 24 * 5);
$query = "SELECT * FROM tabell
WHERE A ='".$_SESSION["sessID"]."' AND
B=".$_POST["B"]." AND Datum < $fiveDaysAgo";

Men inte heller detta verkar funka...

 $query = "SELECT * FROM FROM tabell
WHERE A ='".$_SESSION["sessID"]."' AND
B=".$_POST["B"]."  AND Datum < DATE_SUB( CURDATE( ) , INTERVAL 5 DAY )";

En testkod som använder endera varianten och sedan:

 $res = mysql_query($query) or die("main save: ".mysql_error());
 while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
 foreach ($row as $ix => $val)
  echo "$ix =>  $val, ";
  echo "<BR>";
 }

skriver inte ut någonting alls??? :q :x

Medlem sedan juni 20034 013 inlägg
#6

Fixat!

Det har att göra med operatorsprioriteringen...

Felet är här:
while($rowHigh = mysql_fetch_array($q) && $pos < 11) {

&& har högre prioritet än = så Php tolkar detta som:

while(
$rowHigh =
(mysql_fetch_array($q) && $pos < 11)
) {

Du måste därför använda parenteser och skriva så här:
while(($rowHigh = mysql_fetch_array($q)) && $pos < 11) {

Medlem sedan mars 20034 471 inlägg
#7

ÅÅH! Gudars skymning vilket korkat fel!!! Tusen tack, tydal! :birp :D

254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)