|
romsipcz Profil * |
#1 · Zasláno: 9. 3. 2009, 21:43:55 · Upravil/a: Moderátor (editace znemožněna)
Ahoj, potřebuji prosím poradit s importem XLM generovaným programem Money S3. Níže je jeho mnou očištěná podoba. Pouze pro přehlednost. Nedaří se mi data naimportovat do databáze pod MySQL. Pod XML je soubor použitý pro import do databáze. Opět zkrácený. Vše proběhne bez problému, ale do databáze žádný zápis... Po přenosu vypíše pouze název a velikost načítaného souboru a ostatní nic. Asi následovně:
časové razítko ID: 113
ID Kod Nazev Kategorie Kategorie kod Popis Cena nakup Cena prodej Skladem
Import dokončen.
Nových záznamů:
Upravených záznamů:
pocet zaznamu: 0
nazev souboru: eshop_2009-03-09_16-35.xml
velikost souboru: 2030
XML soubor:
<?xml version="1.0" encoding="windows-1250"?>
<MoneyData description="prenos do EShopu" ExpZkratka="_ESHOP" ExpDate="2009-02-18" ExpTime="12:16:00"><SeznamZasoba><Zasoba><Druh_zas>Z</Druh_zas></Zasoba></SeznamZasoba></MoneyData>
PHP soubor:
<?
function numericEntities($s)
{ // by dgx
return $s;
}
$read=WWW_R;
$write=WWW_W;
SECURITY_PAGE($read);
if (!$file_load)
{
echo '<form method="post" action="index2.php?id='.$id.'" ENCTYPE="multipart/form-data">'."\n";
echo ' <h4>Import skladu z XML (Money S3):</h4>'."\n";
echo ' <table border="0" color="black">'."\n";
echo ' <tr>'."\n";
echo ' <td class="gcaption_hard">Soubor .XML: </td>'."\n";
echo ' <td><input type="FILE" name="file_load" size=35></td>'."\n";
echo ' </tr>'."\n";
echo ' <tr>'."\n";
echo ' <td><input type="submit" name="nacti" value="Nacist a ulozit data"></td>'."\n";
echo ' </tr>'."\n";
echo ' </table>'."\n";
echo ' </form>'."\n";
}
if ($file_load)
{
SECURITY_PAGE($write);
OPEN_DAT();
Is_uploaded_file($_FILES["file_load"]["tmp_name"]);
$new_name = $_FILES["file_load"]["name"];
$upload = move_uploaded_file($_FILES["file_load"]["tmp_name"], "temp/".$new_name);
if (!$upload)
{
echo "Při nahrávánà souboru ".$file_load." na FTP server došlo k chybě<br>";
break;
}
$usercount = 0;
$userdata = array();
// $state = '';
if (!$xml_parser = xml_parser_create())
die("Nelze vytvořit XML parser.");
function startElement($parser, $name, $attrib)
{
global $usercount, $userdata, $tag;
$tag = $name;
}
function endElement($parser, $name)
{
global $usercount, $userdata;
if ($name == "Zasoba")
$usercount++;
}
function characterData($parser, $data)
{
global $usercount, $userdata, $tag;
if (Trim($data) != '')
{
if ($userdata[$usercount][$tag] <> '')
$userdata[$usercount][$tag] .= "#";
$userdata[$usercount][$tag] .= nl2br(strtr($data, "\"", ""));
}
}
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!$fp = fopen("temp/".$new_name, "r"))
die ('Nelze otevřít XML soubor "'.$new_name.'".');
else
{
while($data = fread($fp, 8000))
{
if( !xml_parse($xml_parser, $data, feof($fp)) )
die (sprintf("XML chyba: %s na radku %d znak %d", xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser), xml_get_current_column_number($xml_parser) ));
// break;
}
}
xml_parser_free($xml_parser);
}
?>
Pomůže mi to navrátit spánek, ale čím méně spím tím méně toho asi vymyslím... Děkuji.
Roman.
|
|
|
romsipcz Profil * |
#3 · Zasláno: 9. 3. 2009, 22:09:30 · Upravil/a: Moderátor (editace znemožněna)
Díky Kajmane,
lepší bude celý kód.
<?
$read=WWW_R;
$write=WWW_W;
SECURITY_PAGE($read);
if (!$file_load)
{
echo '<form method="post" action="index2.php?id='.$id.'" ENCTYPE="multipart/form-data">'."\n";
echo ' <h4>Import skladu z XML (Money S3):</h4>'."\n";
echo ' <table border="0" color="black">'."\n";
echo ' <tr>'."\n";
echo ' <td class="gcaption_hard">Soubor .XML: </td>'."\n";
echo ' <td><input type="file" name="file_load" size=35></td>'."\n";
echo ' </tr>'."\n";
echo ' <tr>'."\n";
echo ' <td><input type="submit" name="nacti" value="Nacist a ulozit data"></td>'."\n";
echo ' </tr>'."\n";
echo ' </table>'."\n";
echo ' </form>'."\n";
}
if ($file_load)
{
SECURITY_PAGE($write);
OPEN_DAT();
is_uploaded_file($_FILES["file_load"]["tmp_name"]);
$new_name = $_FILES["file_load"]["name"];
$fsize = $_FILES["file_load"]["size"];
$upload = move_uploaded_file($_FILES["file_load"]["tmp_name"], "temp/".$new_name);
if (!$upload)
{
echo "Při nahrávánà souboru ".$file_load." na FTP server došlo k chybě<br>";
break;
}
$usercount = 0;
$userdata = array();
// $state = '';
if (!$xml_parser = xml_parser_create())
die("Nelze vytvořit XML parser.");
function startElement($parser, $name, $attrib)
{
global $usercount, $userdata, $tag;
$tag = $name;
}
function endElement($parser, $name)
{
global $usercount, $userdata;
if (ereg('Zasoba', $name))
$usercount++;
}
function characterData($parser, $data)
{
global $usercount, $userdata, $tag;
if (Trim($data) != '')
{
if ($userdata[$usercount][$tag] <> '')
$userdata[$usercount][$tag] .= "#";
$userdata[$usercount][$tag] .= nl2br(strtr($data, "\"", ""));
}
}
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!$fp = fopen("temp/".$new_name, "r"))
die ('Nelze otevřít XML soubor "'.$new_name.'".');
else
{
while($data = fread($fp, $fsize))
{
if( !xml_parse($xml_parser, $data, feof($fp)) )
die (sprintf("XML chyba: %s na radku %d znak %d", xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser), xml_get_current_column_number($xml_parser) ));
// break;
}
}
xml_parser_free($xml_parser);
$import_time = Date("Y-m-d H:i:s");
$result = MAKE_QRY("INSERT INTO timestamp (id_timestamp,timestamp_date) VALUES ('','$import_time')");
$i_timestamp = MySQL_Insert_Id();
echo "ÄŤasovĂ© razĂtko ID: ".$i_timestamp."<br><br>";
echo "<table border=\"1\">";
echo "<tr><td>ID</td><td>Kod</td><td>Nazev</td><td>Kategorie</td><td>Kategorie kod</td><td>Popis</td><td>Cena nakup</td><td>Cena prodej</td><td>Skladem</td></tr>";
for ($i=0; $i<$usercount; $i++)
{
echo 'zaznam: '.$usercount;
$zbozi_znacka=$zbozi_cislo=$nazev=$cena_nakup=$cena_prodej=$kategorie=$obrazek=$kategorie=$kategorie_kod="";
$zbozi_cislo=strip_tags(iso2win(AddSlashes($userdata[$i]["KATALOG"])));
$zbozi_znacka=iso2win(Trim($userdata[$i]["VYROBCE"]));
$zbozi_nazev=iso2win($userdata[$i]["POPIS"]);
$zbozi_popis1=iso2win($userdata[$i]["WWWPOPIS"]);
$zbozi_popis=iso2win($userdata[$i]["WWWPOPIS2"]);
$cena_nakup=StrReplace(StrReplace($userdata[$i]["POSL_N_CEN"],",",".")," ","");
$cena_prodej=StrReplace(StrReplace($userdata[$i]["CENA"],",",".")," ","");
$cena_prodej=SubStr($cena_prodej,0,strpos($cena_prodej,"#"));
$dph=19;
$kategorie_kod=AddSlashes(iso2win(strip_tags($userdata[$i]["ZKRATKA"])));
$podkategorie=iso2win($userdata[$i]["NAZPODSKUP"]);
$obrazek=iso2win(strip_tags($userdata[$i]["OBRAZEK2"]));
$obr=strrpos($obrazek,"\\");
if ($obr>0) {
$obrazek=SubStr($obrazek,($obr),Strlen($obrazek)-$obr);
}
$skladem=iso2win(strip_tags($userdata[$i]["ZASOBA"]));
if ($zbozi_nazev<>'') {
if ($zbozi_znacka<>'') {
$result2=MAKE_QRY("SELECT * FROM zbozi_vyrobce WHERE zbozi_vyrobce_name='$zbozi_znacka'");
if (MySQL_Num_Rows($result2)>0) {
$record2=MySQL_Fetch_Object($result2);
$i_vyrobce=$record2->id_zbozi_vyrobce;
}
else {
MAKE_QRY("INSERT INTO zbozi_vyrobce (id_zbozi_vyrobce,zbozi_vyrobce_name)
VALUES ('','$zbozi_znacka')");
$i_vyrobce=MySQl_Insert_Id();
}
}
else { $i_kategorie=""; }
if ($kategorie_kod <>'') {
$result2=MAKE_QRY("SELECT * FROM zbozi_sortiment WHERE zbozi_sortiment_kod_export='$kategorie_kod'");
if (MySQL_Num_Rows($result2)>0) {
$record2=MySQL_Fetch_Object($result2);
$i_kategorie=$record2->id_zbozi_sortiment;
//MAKE_QRY("UPDATE zbozi_sortiment SET zbozi_sortiment_name='$kategorie' WHERE zbozi_sortiment_kod_export='$kategorie_kod'");
}
else {
$vlozit = MAKE_QRY("INSERT INTO zbozi_sortiment
(id_zbozi_sortiment, zbozi_sortiment_kod_export, zbozi_sortiment_marze)
VALUES ('','$kategorie_kod','0')");
// if(!$vlozit)
echo ('Chyba pri ukladani skupiny');
$i_kategorie=MySQl_Insert_Id();
echo "Nová kategorie: <b>".$kategorie_kod."</b>";
}
}
else { $i_kategorie=""; }
if ($podkategorie<>'') {
$result2=MAKE_QRY("SELECT * FROM zbozi_sortiment WHERE zbozi_sortiment_kod_export='$podkategorie' AND i_zbozi_sortiment_sortiment='$i_kategorie'");
if (MySQL_Num_Rows($result2)>0) {
$record2=MySQL_Fetch_Object($result2);
$i_kategorie=$record2->id_zbozi_sortiment;
}
else {
$www=friendly_url(strtolower($podkategorie));
MAKE_QRY("INSERT INTO zbozi_sortiment (id_zbozi_sortiment,i_zbozi_sortiment_sortiment,zbozi_sortiment_name,zbozi_sortiment_kod_export,zbozi_sortiment_marze,i_zbozi_sortiment_public,zbozi_sortiment_www)
VALUES ('','$i_kategorie','$podkategorie','$podkategorie','0','1','$www')");
$i_kategorie=MySQl_Insert_Id();
echo "Nová podkategorie: <b>".$podkategorie."</b>";
}
}
$result=MAKE_QRY("SELECT * FROM zbozi LEFT JOIN zbozi_sortiment ON zbozi.i_zbozi_sortiment=zbozi_sortiment.id_zbozi_sortiment
WHERE zbozi_cislo='$zbozi_cislo' AND i_zbozi_sortiment='$i_kategorie'");
if (MySQL_Num_Rows($result)>0) {
$record=MySQL_Fetch_Object($result);
$id_rec=$record->id_zbozi;
MAKE_QRY("UPDATE zbozi SET zbozi_nazev='$zbozi_nazev', zbozi_popis='$zbozi_popis', i_zbozi_vyrobce='$i_vyrobce',
zbozi_cena_nakup='$cena_nakup', zbozi_cena_prodej='$cena_prodej',
i_zbozi_sortiment='$i_kategorie', zbozi_obrazek='$obrazek', i_timestamp='$i_timestamp',
zbozi_dph='$dph', zbozi_skladem='$skladem',
i_public='1' WHERE id_zbozi='$id_rec'");
$no_rec_update++;
//$i_zbozi=$id_rec;
}
else {
MAKE_QRY("INSERT INTO zbozi (id_zbozi,zbozi_cislo,zbozi_nazev,zbozi_popis,zbozi_popis_short,i_zbozi_vyrobce,zbozi_cena_nakup,zbozi_cena_prodej,
zbozi_obrazek,i_zbozi_sortiment,i_public,i_timestamp,zbozi_dph,zbozi_skladem,zbozi_zkratka1)
VALUES ('','$zbozi_cislo','$zbozi
|
|
|
romsipcz Profil * |
#5 · Zasláno: 9. 3. 2009, 22:14:34
Omlouvám se, je toho na mě nějak moc... romsipcz.
|
|
|
Kajman_ Profil * |
#6 · Zasláno: 10. 3. 2009, 09:10:40
Tak si ve funkci MAKE_QRY kontrolujte chyby a zkuste si je případně vypsat. Nebo aspoň zkuste přijít na to, na jakém řádku se to chová jinak, než chcete.
|
|
|
romsipcz Profil * |
#7 · Zasláno: 10. 3. 2009, 18:13:46
Mám pocit, že nenačte vůbec žádná Data z XML souboru. Tudíž není ani co zapsat do databáze. Xml parser se z nějakého důvodu chová podivně...
|
|