Autor Zpráva
romsipcz
Profil *
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.
Kajman_
Profil *
Co se třeba v tom skriptu připojit k db a použít insert?
romsipcz
Profil *
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Ă&copy; 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
Alphard
Profil
romsipcz
vkládejte prosím kód do
romsipcz
Profil *
Omlouvám se, je toho na mě nějak moc... romsipcz.
Kajman_
Profil *
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 *
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ě...

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: