Autor Zpráva
tatyalien
Profil
Dobrý den,
Mám na localhostu nainstalovaný xampp XAMPP 1.7.3 (ano je to neaktuální verze). Při parsování jednoho xml souboru pomocí simplexml_load_file a následného ukládání do mysql se mě promítla chyba, když kontroluji hodnoty oproti staženému poli. Když jsem dělal živou ukázku, která mě "blbla správně" na localhostu a zkusil to hodit ještě na svůj domácí server (synology) tak tam to fungovalo správně... nejspíš je asi něco jinak nastavené v php.ini

Popis chyby:
1) načtu si do pole hodnoty z databáze například:
<?php
        $query = "SELECT IndexA, DodaciLhuta, Stavy, Custom5, CONCAT('{$GLOBALS["2_goods_opravena"]}') AS 'tabulka' FROM {$GLOBALS["2_goods_opravena"]} ORDER BY IndexA";
        $result = mysql_query($query);
        if (mysql_num_rows($result) == 0) {
            $GoodsZbozi = '';
        } else {
            $GoodsZbozi = Array();
            while ($zaznam = MySQL_Fetch_Array($result)) {
                $GoodsZbozi[mb_strtolower(trim($zaznam["IndexA"]),'UTF-8')] = Array("DodaciLhuta" => $zaznam["DodaciLhuta"], 
                    "Stavy" => $zaznam["Stavy"], "Custom5" => $zaznam["Custom5"], "tabulka" => $zaznam["tabulka"]);
            }
        }?>

2) pokud použiju kontrolu z xml souboru oproti tomuto poli, tak nastane chyba, na živých datech mě to jede správně do cca 10195 řádku (soubor má správně 23300 položek), pak skočí skoro na začátek pole a pak jede už správně do konce. Výsledný počet řádků mě vypíše cca 33495.

při této kontrole to blbne:

<?php
// pokud kontroluji polozku $poskladanyKatalogLower - hodnota z xml oproti poli
if ($GoodsZbozi[$poskladanyKatalogLower]["DodaciLhuta"] == "hodnotaA") {
    $HodnotyZmenit["SkryteZbozi"] =  "'1'";
}

Když je tato kontrola zakomentovaná, zobrazí se mě správně 23300, pokud jí zapnu 33495. Ale na serveru při obou dvou hodnotách 23300...

Každopádně na vliv chodu aplikace to má jen ten, že se některé dotazy provedou 2x - delší průběh skriptu, jen by mě zajímalo, jeslti na takovouto prkotinu musím mít něco speciálně povolené v php.ini, zajímavé je, že x ostatních xml souborů to načítá správně a fachá to.... (funkcí na načtení xml souborů a aktualizace oproti mysql mám x a tam jsem si chyby nevšiml, ale u této ano ;)

odkaz na jeden soubor s živou ukázkou můžu hodit (zdrojovej kód, aby mě to fachalo, tak jsem tam vytvořil ručně pole co mě vyleze z DB, ale skript je pak hodně velkej... a na serveru kam bych odkázal, by zobrazil jen správné výsledky, přibalil jsem i xml, každopádně soubor zabalenej do raru je zde)
Alphard
Profil
Nejede vám server a stejně jsou programátoři líní stahovat nějaké archivy. Ten index je vytvořen i z ne ASCII znaků? Jak potom v druhém bodě procházíte položky, jaký typ cyklu?

Mimochodem, obvykle na pravopis neupozorňuji, ale ve slově "pole" není v žádném tvaru "y".
tatyalien
Profil
Máte pravdu, na noc server vypínám (hold přítelkyně na něj nadává, každopádně od cca 7:30-21:00 je v provozu). Moje "čeština" už jsem tu na fóru říkal několikrát, že jsem dislektik, ale děkuji za upozrnění.

index pole je jen z ascii znaků ([a-zA-Z0-9] +./-)

cykl:
<?php
$xml = simplexml_load_file($SouborXML);
foreach ($xml->item as $item) {
  $katalog = trim($item->item_code);
  //... zde pak je ta kontrola oproti poli
}


Uploudnul jsem to ještě na seznam: soubor
Alphard
Profil
tatyalien:
Stáhl jsem to a oba soubory spustil.
Jediná modifikace byla
echo ($row++)."--katalog|$katalogA|radek|$i_radek|zbozi|$zbozi|";
tj. číslování řádků.

výstup vždy skončil na
23340--katalog|pel-zd6110|radek|23340|zbozi|23339|2_nove_zbozi|
resp u druhého souboru
23340--katalog|pel-zd6110|radek|23340|zbozi|23339|

Chyba bude jinde.
tatyalien
Profil
Alphard:
Díky, já i když to spustím u sebe na xamppu tak se mě zobrazí 33495, když na synology tak 23339. No někde bude zakopanej pes... ale díky za juknutí. Každopádně hlavu mě to netrhá, jen běží skript o pár sekund déle.

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: