| 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: 13 let
|
|||
0