Autor | Zpráva | ||
---|---|---|---|
peteo Profil |
#1 · Zasláno: 5. 2. 2013, 11:46:28
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 "; if ($od==1) echo "Začiatok | "; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=1\">Začátek</a> | "; if ($od<ROWS) echo "Předchozí | "; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od-ROWS)."\">Předchozí</a> | "; if ($od+ROWS>$celkem) echo "Následující | "; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od+ROWS)."\">Následující</a> | "; if ($od>$celkem-ROWS) echo "Konec <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 |
#2 · Zasláno: 5. 2. 2013, 11:55:35
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 |
#3 · Zasláno: 5. 2. 2013, 12:02:29
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 |
#4 · Zasláno: 5. 2. 2013, 12:08:47
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 |
#6 · Zasláno: 5. 2. 2013, 12:46:43
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á.
|
||
Časová prodleva: 12 let
|
0