Autor | Zpráva | ||
---|---|---|---|
ŠEBESTA Profil |
#1 · Zasláno: 21. 9. 2015, 17:10:38
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> 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> " . ${'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 |
#2 · Zasláno: 21. 9. 2015, 19:23:30
Za řádek
$i = 0; před cyklem s fwrite zkuste dát:
mysql_data_seek($zbozi, 0); 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 |
#3 · Zasláno: 22. 9. 2015, 12:00:33
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 |
#4 · Zasláno: 22. 9. 2015, 12:19:20
Š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.
|
||
Časová prodleva: 10 let
|
0