Autor Zpráva
peteo
Profil
Dobrý deň, večer, ráno,

riešim pre mňa nepochopiteľnú vec (hoci to funguje) a rád by som pochopil, prečo to tak je.

potrebujem stránkovať výpis z databázy, kde je dohromady sedem tabuliek, z toho je 6 riadených z jednej, v tých šiestich tabuľkách môže byť jeden, viac ako jeden alebo i žiaden záznam. Pre ilustráciu je v kóde načítanie iba z hlavnej (meno) a druhej tabuľky ($table="obsah";).
A čomu nerozumiem:

úplne dole mám vnorený cyklus (posledný cyklus while), ktorým vypisujem záznamy zo závislej tabuľky podľa id.
Po spustení skriptu sa mi nezobrazia nulté zápisy poľa.
Skúšal som to i pomocou cyklu for, ale tiež to neišlo.
nakoniec som to vyriešil vložením riadku (okomentovaného, takého istého, ako je v následnom cykle) pre výpis z poľa PRED cyklus while (nevypisuje v cykle, vypíše pred cyklom, hovorím si).
Nerozumiem, prečo to tak je, prečo nultý zápis poľa sa nevypisuje priamo v cykle while.
Vysvetlí mi niekto chybu v mojej úvahe?

Ďakujem.

zdrojový kód funkčného stránkovania (ak vyhodím okomentovaný riadok, skript nevypisuje nulté zápisy z tabuľky $table):

<?php
   define ("ROWS", 50);
include ("cotoje_conect.php");
if (!isset($_GET["celkem"])) 
  {
    $vysledek=mysql_query("select count(*) as pocet from meno");
    $zaznam=mysql_fetch_array($vysledek);
    $celkem=$zaznam["pocet"];
  }
  else
  {
      $celkem=$_GET["celkem"];
  }
  if ($celkem>ROWS)
  {
    if (!isset($_GET["od"])) $od=1; else $od=$_GET["od"];
    $vysledek=mysql_query("select * from meno"." limit ".($od-1).", ".ROWS);
      echo "Záznamov: ".$od."-";
    echo (($od+ROWS-1)<=$celkem)?($od+ROWS-1):$celkem;
    echo " z celkom $celkem&nbsp;&nbsp;&nbsp;";
       if ($od==1) echo "Začiatok&nbsp;|&nbsp;";
      else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=1\">Začátek</a>&nbsp;|&nbsp;";
       if ($od<ROWS) echo "Předchozí&nbsp;|&nbsp;";
      else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od-ROWS)."\">Předchozí</a>&nbsp;|&nbsp;";
       if ($od+ROWS>$celkem) echo "Následující&nbsp;|&nbsp;";
      else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od+ROWS)."\">Následující</a>&nbsp;|&nbsp;";
       if ($od>$celkem-ROWS) echo "Konec&nbsp;<BR>";
      else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($celkem-$celkem%ROWS+1)."\">Konec</a><BR>";
  }
$plus=$od;
 while ($zaznam=@MySQL_Fetch_Array($vysledek)) {
   echo "<hr>".$zaznam["meno"]."<BR>";
      $table="obsah";
      $vysledek1=mysql_query("SELECT * FROM ".$table." WHERE id=".$plus);
      $zaznam1=mysql_fetch_array($vysledek1);
      echo "●".$zaznam1[$table];  // toto je te riadok, ktorý neviem prečo nie je zobrazovaný v cykle o riadok nižšie 
      while ($zaznam1=@MySQL_Fetch_Array($vysledek1)) {echo "●".$zaznam1[$table];}
      $plus++;
}
?>


výstup (správny):
quaeritur
● o to ide.
quaestio
● onis, hľadanie, vyšetrovanie (súdne), otázka, úvaha.
quai
● nábrežie (nesklonné, francúzsky).
● nástupište, napr. na železničnej stanici.
Quai d'Orsay
● Francúzsko
nábrežie v Paríži, sídlo ministerstva zahraničných vecí.
● prenesene toto ministerstvo.

výstup bez inkriminovaného riadku:
quaeritur
quaestio
quai
● nástupište, napr. na železničnej stanici.
Quai d'Orsay
● prenesene toto ministerstvo.
Joker
Profil
peteo:
Bez řádku 36 se ten záznam v cyklu nezobrazí, protože na řádku 35 se volá funkce mysql_fetch_array, která ten záznam „spotřebuje“ (resp. automaticky se posune na další záznam).
Není mi jasné, proč tam vůbec je.
peteo
Profil
Joker:
teraz nerozumiem: Není mi jasné, proč tam vůbec je.

potrebujem zobraziť i ten nultý záznam (viď porovnanie výstupov).
vnorený cyklus tam je pre výpis ďalších záznamov z tabuľky $table patriacich k id z tabuľky meno.
juriad
Profil
Výsledek mysql dotazu je stavový, stejně jako je stavové čtení ze souboru: jamile jednou řádek přečteš, tak ho už nepřečteš znovu - prostě se posuneš na další.
Ty jsi tedy přečetl jeden řádek a pak se divíš, že kdyš čteš znovu - z toho samého výsledku - tak už nedostaneš již přečtený řádek.
peteo
Profil
juriad:
nerozumieme si.
keď tam ten riadok nie je, tak v poslednom cykle while začína vypisovať z poľa $zaznam1 až od záznamu 1 a nie od záznamu 0.

ten vložený riadok 36 echo "●".$zaznam1[$table]; je tam práve pre výpis toho záznamu 0, bez neho je výpis ako [#1] výstup bez inkriminovaného riadku:

a neviem prečo, resp ako to nastaviť, aby vypisoval od záznamu 0 bez toho riadku 36 v kóde.
Joker
Profil
peteo:
potrebujem zobraziť i ten nultý záznam (viď porovnanie výstupov).
Ano. A právě řádek 35 zařídí to, že se ten záznam v cyklu nevypíše.
Smazání řádků 35 a 36 by mělo dát výsledek, který chcete.
peteo
Profil
Joker:
jasné, už som to pochopil.
v riadku 35 som načítal záznam 0 a ukazovateľ sa automaticky posunul o 1.
To som potreboval, ďakujem.
Uniklo mi, že $zaznam1 deklarujem v cykle a predchádzajúca deklarácia ie je potrebná.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: