Autor Zpráva
ŠEBESTA
Profil
Zdravím, kdo mi vysvětlí tuto hádanku?
Při zobrazení obsahu databáze echem na monitor - počet položek v pořádku.
Při zápisu Fwitem do .txt chybí nultá položka databáze.
Zde: sáčky papírové
Viz výpis zdroje.

$i = 0;
echo "<table>";
echo "<tr><td>&nbsp;katal. č. / název položky</td><td>počet ks / cena za kus</td><td>cena celková</td></tr>";
while (${'zaznam'.$i} = Mysql_Fetch_Row($vybrano)):
$celkem = ${'zaznam'.$i}[6] * ${'zaznam'.$i}[7];
echo "<br >";
if (${'zaznam'.$i}[4] != ""):
echo "<tr><td>" . ${'zaznam'.$i}[4] . " / " . ${'zaznam'.$i}[5] . "</td>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" . ${'zaznam'.$i}[6] . "ks / " . ${'zaznam'.$i}[7] . ".-Kč</td>
<td>" . $celkem . ".-Kč</td></tr>";
endif;
$i += 1;
endwhile;

STRÁNKA NA MONITORU
******************************************
*VÁŠ OBJEDNACÍ LIST
*
*(Pouze informační sdělení)
* Rozpis položek :
*
*
*
* katal. č. / název položky počet ks / cena za kus cena celková
*101013 / Sáčky papírové 1ks / 130.-Kč 130.-Kč
*101012 / Sáčky papírové 1ks / 133.-Kč 133.-Kč
*101385 / Sáčky papírové 1ks / 149.-Kč 149.-Kč
*
*
*
* Adresa doručení : a a a a
* Emailová pošta : VV.VVVVVV@centrum.cz
* Cena objednávky včetně dopravného 0.-Kč, obnáší : 412.-Kč.
*
* Vaše objednávka byla úspěšně odeslána.
*
* Děkujeme.
***************************************

$i = 0;
while (${'zaznam'.$i} = Mysql_Fetch_Row($zbozi)):
if (${'zaznam'.$i}[4] != ""):
$celkem = ${'zaznam'.$i}[6] * ${'zaznam'.$i}[7];
FWrite($soubor,${'zaznam'.$i}[4] . " : " . ${'zaznam'.$i}[5] . " : " . ${'zaznam'.$i}[6] . "ks : " . ${'zaznam'.$i}[7] . ".-Kč : Suma = " . $celkem . ".-Kč " . $pocetdruhu);
FWrite($soubor,"\n");
endif;
$i += 1;
endwhile;

OBSAH EMAILU
*********************************************
*Toto je automaticky generované poštovní sdělení - neodpovídejte.
*
* Slouží pouze k Vaší informaci.
*
* ČÍSLO VAŠÍ OBJEDNÁVKY: 13ns8597bo43tapiel9usg8jm5/opto3-xxx
*
* DATUM OBJEDNÁNÍ: 15:40:11 : 09:21:15 poč.ř.:4
*
* MÍSTO DORUČENÍ: a a : a a : VV.VVVVVV@centrum.cz
*
*101012 : Sáčky papírové : 1ks : 133.-Kč : Suma = 133.-Kč
*101385 : Sáčky papírové : 1ks : 149.-Kč : Suma = 149.-Kč
*
* Cena objednaného zboží: 412.-Kč
* Cena a způsob dopravy : 0.-Kč. Osobní odběr v prodejně.
****************************************

*
nightfish
Profil
Za řádek $i = 0; před cyklem s fwrite zkuste dát:
mysql_data_seek($zbozi, 0);
To zajistí, že volání mysql_fetch_row ve while cyklu začne prvním řádkem výsledku SQL dotazu.

Pár poznámek ke zbytku kódu:
- je zbytečné vytvářet v cyklu proměnné s názvem $zaznam0, $zaznam1, $zaznam2 - pokud s nimi chcete pracovat mimo cyklus, je lepší je uložit do pole; pokud s nimi pracovat nepotřebujete, použijte while ($zaznam = mysql_fetch_row($zbozi)) (a uvnitř cyklu si výskyty ${'zaznam'.$i} přepište na $zaznam)
- příjde mi vhodnější používat funkci mysql_fetch_assoc a k hodnotám ve sloupcích místo číselného indexu přistupovat názvem sloupce. Tak zjistíte, že když se změní dotaz (třeba si z nějakého důvodu prohodíte dva sloupce), nebude cyklus vypisovat nesmysly.
- funkce mysql_* jsou od PHP 5.5 považovány za zavržené (deprecated) a od PHP 7.0 budou odstraněny, doporučuje se použít mysqli nebo PDO
ŠEBESTA
Profil
Zdravím,
za radu díky, pracuje to správně.
Jen jsem zapoměl dopsat v otázce, proč ve stejném souboru reaguje stejně i mysql_fetch_array.
A jak v tomto případě to řešit? mysql_data_seek je v seznamu funkcí přiřazeno jen k Mysql_Fetch_Row.
Jinak stránky jsou asi 8roků staré (nechce se mi je předělávat do objektů) a po drobné změně se vyskytla tato chyba.
Ale asi mi nezbude, než to překopat na objekty.
nightfish
Profil
ŠEBESTA:
Jen jsem zapoměl dopsat v otázce, proč ve stejném souboru reaguje stejně i mysql_fetch_array.
A jak v tomto případě to řešit? mysql_data_seek je v seznamu funkcí přiřazeno jen k Mysql_Fetch_Row.
mysql_data_seek pracuje stejně se všemi mysql_fetch_* funkcemi.
Jinak pokud moje řešení pomohlo, tak je pravděpodobné, že se někde mezi mysql_query a while cyklem nachází volání funkce mysql_fetch_*, která "požere" první řádek výsledku. Bez kompletního kódu těžko odhadnout víc.

Ale asi mi nezbude, než to překopat na objekty.
mysqli nabízí i procedurální styl, nic do objektů překopávat nemusíte.

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:

0