
Zkušenosti s se zápisem a vyhledáním v DB při zpracování FEEDu |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
Zdravím všechny pokročilé,
řeším importní modul XML FEEDu do ZC. Zjistil jsem zvláštní situaci a nevím jak z ní ven. Vytvářím strukturu kategorií a na vstupu zjišťuji, zda kategorie se (jménem) již existuje. SELCLT categories_id FROM categories_description WHERE categories_name = "název". SQL je zjednodušený. Při prvním průchodu samozřejmě nic neexistuje, tak se mi vrátí výsledek např. takto: $v = $db->Execute($sql); echo $v->RecordCount(); // vrati 0 Nechám kategorii zavést a ověřím zavedení načtením ID aktuálního záznamu: $ID_kategorie = $db->insert_ID(); // vrátí při prvním průchodu 1 Když ale proběhne kód v dalším kroku a výrobek má uvedenou stejnou kategorii, tak mi RecordCount vrátí opět nulu. Stejné je to s testováním $v->EOF. EOF stále hlásí 1. Testuji na prvních 10 položkách z XML a stále se mi vrací nula v počtu vybraných záznamů a 1 jako potvrzení konce záznamu EOF. Když script skončí a já se podívám do tabulky, tak tam ale vidím, že jsou kategorie zavedené a pro každou se stejným jménem je vytvořen nový záznam. Plyne mi z toho, jako by po odeslání SQL dotazu došlo ke zpracování, ale při načtení dalšího dotazu, jako zůstávala nějaká Cache, která podhazuje původní hodnotu místo aktuální. Dá se to někde nasimulovat nebo ověřit? díky Borek
Zasláno: 19:16 21.6.2021
|
|
_________________
Borek |
||
![]() |
Re: Problém s vyhledáváním záznamů v DB |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
chtěl jsem přiložit html s výpisem z obrazovky s ladícími údaji, ale nepodařilo se mi to.
Zasláno: 20:46 3.12.2018
|
|
_________________
Borek |
||
![]() |
Re: Problém s vyhledáváním záznamů v DB |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
Zdravím,
tak jsem opět našel čas ladit script a fakt nevím co je špatně. vytvořil jsem si pomocnou tabulku TABLE_KAT, je to spojení TABLE_CATEGORIES a TABLE_CATEGORIES_DESCRIPTION pro test mi to stačí Tady je celá funkce vytváření kategorií: function CreateKAT($k) { global $db; $l = $_SESSION['languages_id']; $kat = explode("|", $k); $p_k = 0; // parent_kategorie_id $i = 0; echo "Spusteno CreateKAT, $k<br>"; print_r($kat); echo "<br>count KAT = " . count($kat); for($i=0; $i<count($kat); $i++) { $nk = trim($kat[$i]); $sql = "SELECT categories_id, categories_name, parent_id FROM " . TABLE_KAT; $mc = $db->Execute($sql); echo "nyni je zavedeno " . $mc->RecordCount() . " zaznamu<br>"; if($mc->RecordCount() > 0) { // nactu vsechny zaznamy a pokusim se vypsat HEX kody stringu echo "HEX NK = [" . strToHex($nk) . "]<br>"; echo "HEX = [" . strToHex($mc->fields['categories_name']) . "]<br>"; } $sql = "SELECT categories_id, categories_name, parent_id FROM " . TABLE_KAT . " WHERE categories_name = '" . $nk . "'"; $c = $db->Execute($sql); if($c->RecordCount() > 0) { $CatId = $c->fields['categories_id']; $p_k = $c->fields['parent_id']; echo "kategorie (" . $nk . ") existuje a ma ID = " . $CatId . "<br>"; } else { echo "kategorie (" . $nk . ") NEEXISTUJE<br>"; $sql = "INSERT INTO " . TABLE_KAT . " (parent_id, categories_name, categories_status) VALUES (" . $p_k . ", '" . $nk . "', 1)"; $m = $db->Execute($sql); $CatId = $db->insert_ID(); $p_k = $CatId; echo "<br>SQL INSERT - vytvorena kategorie (id = $CatId|$nk) = " . $sql; } } echo "<br>ID kategorie = $CatId, kategorie END - obsazena pamet = " . memory_get_usage() . "<br><br>"; return $CatId; } 1. rozložím string s názvy kategorií oddělených | 2. procházím vzniklé pole 3. do $nk vložím jen název kategorie 4. zbytečný dotaz na DB, jen zjišťuji, kolik mi vrátí všech záznamů z tabulky 5. jestli je počet záznamů větší než 0 tak se pokouším vypsat HEX kody stringu (jestli nemám problém v kódování) ale nespustí se 6. vyhledám název kategorie v tabulce 7. když je nalezena vrátím její categories_id a parent_id 8. když neexistuje tak ji vytvořím a uložím do DB 9. podle posledního uloženého ID zjistím categories_id a to samé vložím do Parent_id 10. tak projdu celé pole a vrátím číslo poslední kategorie z proměnné $k to předám nadřazené funkci a uložím výrobek a vytvořím i záznam do TABLE_PRODUCTS_TO_CATEGORIES když projdu další výrobek, spustím funkci CreateKAT znovu s aktuálním $k Ale pořád to zavádí každou kategorii znova. Ještě přikládám výpis z průchodu scriptem každý výrobek začíná pořadím díky za Váš čas Borek
Zasláno: 20:44 3.12.2018
|
|
_________________
Borek |
||
![]() |
Re: Problém s vyhledáváním záznamů v DB |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
To je právě ono.
V rámci této funkce mi vrací dotaz prázdný záznam. Když se vrátím do nadřazené funkce (odkud tuto volám) a nechám si vypsat stejný dotaz, tak tak záznamy již jsou Budu zkoušet ještě další varianty díky Borek
Zasláno: 11:29 21.11.2018
|
|
_________________
Borek |
||
![]() |
Re: Problém s vyhledáváním záznamů v DB |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
Zdravím,
právě, že mi to není jasné. Nevím jak to otestovat. Podle výpisu z ladění mi SELECT nevrátí nic, ale když odešlu INSERT, tak se data zapíšou, protože vrátí ID posledního zapsaného záznamu. Zkoušel jsem v různých částech rutiny vložit další SELECT, jestli vrátí něco jiného, ale pořád je to prázdné. Když skončí běh rutiny a vezmu vypsané dotazy, tak mi vrátí všechny zapsané položky tedy každá kategorie je zapsaná tolikrát, kolikrát je v XML výrobek s uvedenou kategorií. Nejhorší na tom je, že jsem podobný importní modul psal už několikrát a bez problémů. A teď jsem se zasekl a nevím kde je problém. Jdu dál zkoušet díky Borek
Zasláno: 21:00 20.11.2018
|
|
_________________
Borek |
||
![]() |
Problém s vyhledáváním záznamů v DB |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
Zdravím,
dostal jsem se do situace, kdy už nevím jak dál. Programuji import XML dat do MYSQL. Problém mám se zavedením kategorií. Procházím cyklem záznamy z XML. Vezmu název kategorie a pokud ji v tabulce nenajdu, tak ji zavedu a vrátím její ID. Problém je v tom, že když zavedu první kategorii a dostanu se k druhému výrobku, který má stejnou kategorii, tak mi již zavedenou kategorii nenajde a vrátí prázdný záznam. Tím je tato kategorie považovaná za novou a je opět zavedena. Zkouším všechno možné, ale nevím jak dál, protože mi to vytvoří pro každý výrobek vlastní kategorii se stejným názvem. Po skončení importu, vidím přes PhPMyAdmin všechny jednotlivé kategorie zavedené. function UlozKategorie($kategorie) { global $db; $l = $_SESSION['languages_id']; $k = explode(" | ", $kategorie); $p_k = 0; // parent_kategorie_id $i = 0; foreach ($k as $kn) { //echo "<br>($kn), [" . trim($kn) . "]"; $sql = 'SELECT categories_id, categories_name FROM ' . TABLE_CATEGORIES_DESCRIPTION . ' WHERE categories_name = "' . $kn . '"'; $c = $db->Execute($sql); // zjistim jestli je kategorie s názvem $kn zavedená if($c->RecordCount() > 0) { $AktKat = $c->fields['categories_id']; $p_k = $AktKat; echo "<br>kategories existuje a ID = " . $AktKat; } else { $sql = 'INSERT INTO ' . TABLE_CATEGORIES . ' (parent_id, date_added, last_modified, categories_status) VALUES '; $sql .= '(' . $p_k . ', now(), now(), 1)'; $c = $db->Execute($sql); $AktKat = $db->insert_ID(); $p_k = $AktKat; echo "<br>ID nove kategorie = " . $AktKat; $sql = 'INSERT INTO ' . TABLE_CATEGORIES_DESCRIPTION . ' (categories_id, language_id, categories_name) VALUES '; $sql .= '(' . $AktKat . ', ' . $l . ', "' . $kn . '")'; $c = $db->Execute($sql); $sql = 'SELECT c.categories_id, c.parent_id, cd.categories_name FROM ' . TABLE_CATEGORIES . ' c INNER JOIN ' . TABLE_CATEGORIES_DESCRIPTION . ' cd ON c.categories_id = cd.categories_id WHERE cd.categories_name = "' . $kn . '"'; $c = $db->Execute($sql); if($c->RecordCount() > 0) { echo "<br>kategorie byla zavedena. ID = " . $c->fields['categories_id'] . ", Parent_id = " . $c->fields['parent_id'] . " Nazev = " . $c->fields['categories_name']; } } $i++; } echo "Vracim ID vybrane kategorie [" . $AktKat . "]"; return $AktKat; } Napadlo mě, že by problémem mohlo být nějaké zdržení mezi založením kategorie a následným dotazem zda záznam již existuje, ale nevím jak to zjistit. nemáte někdo radu kde co dělám špatně? díky za nakopnutí Borek
Zasláno: 12:52 16.11.2018
|
|
_________________
Borek |
||
![]() |
Re: Chyba ve výpočtu ceny za zboží |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
Tak jsem hledal problém a zjistil jsem, že při dokončení objednávky se v rekapitulaci zobrazuje mezisoučet a ten je počítán jen z celé částky za kus. Tedy místo 31,20 Kč se počítá jen s 32,00 Kč. V tom je vzniklý rozdíl.
V podstatě se ale jedná jen o nepřesnost v rekapitulaci, protože objednávka má po dokončení správnou hodnotu. Otázkou tedy zůstává, zda někdo neví, kde se provádí výpočty na jednotlivých stránkách dokončení objednávky, aby se údaje nelišily od skutečných hodnot a nemohlo to mást zákazníka. díky Borek
Zasláno: 8:19 10.10.2018
|
|
_________________
Borek |
||
![]() |
Chyba ve výpočtu ceny za zboží |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
Zdravím všechny,
dávám dohromady shop a potřebuji zavést zboží s cenami závislými na množství objednaného zboží. Tabulku množství a cen jsem si doplnil a vypadá to správně, ale jen vypadá. mám základní cenu 39 Kč/ks + DPH od 144 ks je cena 31,20 Kč/ks tedy vložím do koše 144 ks a hodnota v koši je 4492,80 Kč + DPH když si vytvořím zákaznický účet a snažím se dokončit objednávku, vyberu dopravu zdarma a na další stránce je v tabulce celková cena uvedena jako 4464 Kč + DPH. Někde se mi ztratilo 28,80 Kč + DPH Když změním počet v koši na 150 ks, činí rozdíl 30 Kč + DPH, při 200 kusech je to 40 Kč + DPH. Někde mi to za každý kus zboží v koši odečítá 0,20 Kč a nechápu proč a kde to změnit. dokáže mi někdo poradit? Mám ZC 1.5.5 f verze DB 1.5.5 PHP 7.0.19 Využívám jen správce cen, žádné atributy server je: www.log-fix.cz díky za pomoc Borek
Zasláno: 8:50 9.10.2018
|
|
_________________
Borek |
||
![]() |
Re: Jak na kartě zboží blokovat odkaz na domovskou stránku ZBOŽÍ? |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
Zdravím,
jak na to koukám, k tomu je třeba trochu programování a zásahu do DB. Už jsem si to mockrát upravoval, ale pokaždé trochu jinak. 1. v DB se musí vytvořit pole, kam se budou ukládat tvé poznámky 2. pak se do karty výrobku v Adminu na požadované místo vloží kód pro zobrazení uvedeného pole z DB 3. musí se vložit do aktualizačních dotazů názvy těchto polí, aby se při uložení tvoje poznámky zapsaly do DB Docela pěkně je to uvedeno zde: https://www.zen-cart.com/showthread.php?120523-How-To-Add-New-Product-Fields Taky to jde řešit pomocí Easy Populate 4 (tedy to zadávání do DB), ale zobrazení na kartě je nutné doprogramovat. Když si zavedeš nové sloupce do tabulky, tak se ti tyto sloupce budou importovat do DB. Je víc cest a jde jen o to co ti bude víc vyhovovat Borek
Zasláno: 16:06 9.1.2017
|
|
_________________
Borek |
||
![]() |
Re: Nefunkční přihlášení pro zákazníky |
||
---|---|---|
Pokročilý
![]() ![]() Členem od:
23:22 27.2.2007 Skupina:
Registrovaní uživatelé Příspěvky:
41
![]() |
Zdravím Melodicu,
koukám, že máš WEDOS taky v merku. Řešil jsi tam nějaký shop se ZC nebo je to jen shoda okolností? Teď jsem rozdělal 2 projekty, oba na WEDOSu. Všechno šlape super, ale má to háčky: 1. používám NoLimits a tak jsou všechny projekty uložené v adresářové struktuře ROOT/domains/doména1.cz ROOT/domains/doména2.cz atd. pak se všechny stránky zobrazují takto: http://www.doména1.cz/domains/doména1.cz/index.php..... zkrátka se tam opakovaně zobrazí struktura domains a název adresáře, kde je nahrán shop. našel jsem, že si to ZC uloží do configure.php v nastavení cest. Dá se to přepsat a bude fungovat prezentace shopu, ale nefunguje např. vložení do koše. Místo toho vypíše stránka nenalezena. Chtěl jsem využít možností ULTIMATE SEO 2.212 a výsledek je tento. Stránky se překládají, ale domains/doména1.cz v adrese zůstala a navíc opět nefunguje např. vkládání do koše. Do téhle problematiky úplně nevidím a tak hledám rady jak využít zkušeností jiných, abych projekty dokázal spustit. Zatím vím, že verze bez Ultimate SEO bude fungovat, ale ty odkazy na stránky jsou děsivý např. http://www.agro-eshop.cz/domains/agro-eshop.cz/index.php?main_page=product_info&cPath=3_10&products_id=17&zenid=ef77f14af2a607d69be3125039128477 server s nainstalovaným Ultimate SEO je zde: www.zahrada-shop.eu věřím, že to ale musí fungovat, tak se nechci jen tak vzdát. díky za všechny rady nebo odkazy na někoho kdo již řešil Borek
Zasláno: 17:51 2.6.2016
|
|
_________________
Borek |
||
![]() |