Autor Zpráva
Karlos
Profil *
Čau lidi mám problém s importování podle SAX. V tomto kódu nejdou ukládat hodnoty z XML souboru do databáze.

Pokud tabulka není vytvořená tak se vytvoří. Psal jsem dotaz na tvrdo pro import a ten mi taky funguje. Řeším to již hodiny a nemohu najít řešení.

Děkuji za odpovědi

XML soubor:

<?xml version='1.0' encoding='windows-1250'?>
<?xml-stylesheet type='text/xsl' href='styl.xsl'?>
<Kurzy>
<Kurz id="29">
<jazyk>Nj</jazyk>
<pocet>10</pocet>
<rozsah>10</rozsah>
<mesto>Praha</mesto>
<cena>2500</cena>
<lektori>1</lektori>
<platnost>Plati</platnost>
</Kurz>
<Kurz id="30">
<jazyk>Aj</jazyk>
<pocet>45</pocet>
<rozsah>20</rozsah>
<mesto>Brno</mesto>
<cena>25000</cena>
<lektori>3</lektori>
<platnost>Neplati</platnost>
</Kurz>
</Kurzy>


import (SAX)

 <?xml version='1.0' encoding='windows-1250'?>
 <?xml-stylesheet type='text/xsl' href='styl.xsl'?>
 <Kurzy>
 <Kurz id="29">
 <jazyk>Nj</jazyk>
 <pocet>10</pocet>
 <rozsah>10</rozsah>
 <mesto>Praha</mesto>
 <cena>2500</cena>
 <lektori>1</lektori>
 <platnost>Plati</platnost>
 </Kurz>
 <Kurz id="30">
 <jazyk>Aj</jazyk>
 <pocet>45</pocet>
 <rozsah>20</rozsah>
 <mesto>Brno</mesto>
 <cena>25000</cena>
 <lektori>3</lektori>
 <platnost>Neplati</platnost>
 </Kurz>
 </Kurzy>

If a table is created and creates. This query works. It works when I write a query brazing. But I can not figure out why I'm not impose values from XML file.

<?php
$sql="CREATE TABLE IF NOT EXISTS Jazykove_kurzy (
ID int NOT NULL AUTO_INCREMENT,
jazyk text,
pocet int,
rozsah int,
mesto text,
cena int,
lektori int,
platnost text,     
PRIMARY KEY(ID))";
if (!mysql_query($sql)) echo mysql_errno($spojeni);

$usercount = 0;
$lastdata = "";
$lastTag = "";
$userdata = array();
$file = "data.xml";

function startElement($xml_parser, $name, $attrs) {
    global $tag, $userdata, $usercount, $lastdata, $lastTag;
    $tag = $name;
}

function endElement($xml_parser, $name) {
    global $tag, $userdata, $usercount, $lastdata, $lastTag;
    $usercount++;
}

function characterData($xml_parser, $data) {
    global $tag, $userdata, $usercount, $lastdata, $lastTag;
    if(trim($data) != "") {
    if(strcmp($lastTag, $tag) == 0) {
        $data = $lastdata.trim($data);
        $lastdata = $lastTag = "";
        array_pop($userdata[$tag]);
        $userdata[$tag][] = $data;
    } else {
        $lastdata = $data;
        $lastTag = $tag;
        $userdata[$tag][] = $data;
    }
    }
}

$xml_parser = xml_parser_create("utf-8");
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, "utf-8");
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if(!($fp = fopen($file, "r"))) {
    die("Nepodařilo se otevřít data.xml");
}

while($data = fread($fp, 4096)) {
    if(!xml_parse($xml_parser, $data, feof($fp))) {
        die(sprintf("chyba: %s v řádku %d",
        xml_error_string(xml_get_error_code($xml_parser)),
        xml_get_current_line_number($xml_parser)));
    }
}

xml_parser_free($xml_parser);


for ($i=0;$i<=sizeof($userdata["jazyk"])-1;$i++)    

{

$jazyk_hodnota = $userdata["jazyk"][$i];
$pocet_hodnota = $userdata["pocet"][$i];
$rozsah_hodnota = $userdata["rozsah"][$i];
$mesto_hodnota = $userdata["mesto"][$i];
$cena_hodnota = $userdata["cena"][$i];
$lektori_hodnota = $userdata["lektori"][$i];  
$platnost_hodnota = $userdata["platnost"][$i];

$data=mysql_query("INSERT INTO `Jazykove_kurzy`         (jazyk,pocet,rozsah,mesto,cena,lektori,platnost) VALUES ('$jazyk_hodnota', '$pocet_hodnota', '$rozsah_hodnota', '$mesto_hodnota', 
'$cena_hodnota', '$lektori_hodnota', '$platnost_hodnota')");

}

  if($data)          
  {
  echo "<h2>Vaše data byla úspěšně uložena</h2>";
}
  else
  {
  echo "<h2>Došlo k chybě při ukládání dat</h2>";
  }

mysql_close();
?>
mimochodec
Profil
Ten dotaz na ř. 102 si dej do nějaké proměnné a tu si vypiš, ať vidíš, co se snažíš provést.
Karlos
Profil *
$prikaz="INSERT INTO `Jazykove_kurzy` (jazyk,pocet,rozsah,mesto,cena,lektori,platnost) VALUES ('$jazyk_hodnota', '$pocet_hodnota', '$rozsah_hodnota', '$mesto_hodnota', 
'$cena_hodnota', '$lektori_hodnota', '$platnost_hodnota')";

if (mysql_query($prikaz)) echo "ok"; else echo mysql_errno($spojeni);

Udělal jsem jen tuto změnu. Jinak, když si to chci vypsat, tak mi to nic nenapíše...


mimochodec:

Ale asi mi to nedochází, už na to civim dost dlouho na to abych z toho zmagořil....
mimochodec
Profil
Karlos:
echo $prikaz;
Jestli to máš hned na řádku pod tím a nic to nevypíše, znamená to, že ten kód se ubírá jinudy.
Karlos
Profil *
mimochodec:
Jo to jsem psal, že to nic nevypisuje.
mimochodec
Profil
jj, dočetl jsem. Takže se to neprovádí. Co je v $userdata["jazyk"] nad ř. 90?
Karlos
Profil *
mimochodec:
To se používá jen proto, aby bylo vidět kolikrát ma jít cyklus, jinak v tom je text, ale je tam sizeof.
mimochodec
Profil
Karlos:
Nepochopils, k čemu směřuji. Jestli ti to echo, co jsem psal, nic nevypisuje, ten for se neprovádí. Proč? To zjistíš pomocí var_dump ($userdata["jazyk"]).
Karlos
Profil *
Aha je tam NULL. Čili problém bude někde v XML, ze kterého můj kód nebere data do databáze...

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:

0