Witam, zadanie polega na zaimportowaniu danych z pliku xml do bazy danych. Chodzi o produkty.
Plik XML wygląda mniej więcej tak :

<produkt id="ARTFELBIN0007" nazwa="BINDOWNICA GRZEBIENIOWA FELLOWES PULSAR 300" producent="FEL" grupa="ART-BIN" gwarancja="F024M" cena_netto="468.00" vat="23" magazyn_zewnetrzny="N" dostepny="4" data="2009-02-13" na_zamowienie="T" oferta_specjalna="N" mala_paleta="N" large="N" raportowany="T">
      <zdjecia>
        <zdjecie plik="/Pictures/ART/BIN/ARTFELBIN0007/1.jpg" domyslne="1" data="2011-03-08" />
      </zdjecia>
      <technika>
        <parametr nazwa="Kod Producenta" opis="5620001" jm="" typ="varchar" />
        <parametr nazwa="Rodzaj" opis="Grzebieniowa" jm="" typ="varchar" />
        <parametr nazwa="Model" opis="Pulsar 300" jm="" typ="varchar" />
        <parametr nazwa="Ilość dziurkowanych kartek na raz" opis="15" jm="szt." typ="int" />
        <parametr nazwa="Ilość oprawianych kartek" opis="300" jm="szt." typ="int" />
        <parametr nazwa="Rodzaj grzbietów" opis="Grzebień plastikowy" jm="" typ="varchar" />
        <parametr nazwa="Opis" opis="Bindownica posiada wytrzymaly metalowy mechanizm, posiada specialna szuflade do przechowywania grzbietow z opatentowanym systemem mierzenia grubości dokumentów i doboru odpowiedniego grzbietu. W zestawie pakiet okładek i grzbietów na 10 opraw." jm="" typ="varchar" />
        <parametr nazwa="Orientacyjna waga brutto" opis="9220" jm="g" typ="int" />
        <parametr nazwa="Orientacyjna waga brutto opak. zbior." opis="9220" jm="g" typ="int" />
        <parametr nazwa="Ilość w opakowaniu zbiorczym - orientacyjnie" opis="1" jm="szt." typ="int" />
      </technika>
    </produkt>
 

Produktów jest dużo.

Kod php

<?php
set_time_limit(0); //jest to konieczne w związku z potężną ilością danych zawartych w pliku. Bynajmniej na moim komputerze, który nie jest bardzo szybki

$PlikXML = simplexml_load_file('action.xml');
$BazaDanych = mysqli_connect(); //dane utajnione

if(!$BazaDanych)
	die('Podczas połączenia z bazą danych powstał błąd');  //sprawdzam połączenie z bazą danych. jeżeli jest błąd to wyświetlam informację

$BazaDanych->Query("SET CHARSET utf8");
$BazaDanych->Query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");

$Tabelka = $BazaDanych->Query('SHOW TABLES LIKE "Produkty"'); //sprawdzenie czy tabelka produktów istnieje 

if(!$Tabelka->fetch_assoc()) //jeśli tabelka nie istnieje to utwórz 
{
	$KodSQLTabelki = "CREATE TABLE Produkty (id TINYTEXT , nazwa TINYTEXT , producent TINYTEXT , netto DOUBLE(6,2) UNSIGNED , vat TINYINT(1) UNSIGNED , na_zamowienie TINYINT(1) , dostepny TINYINT(2) , magazyn_zewnetrzny TINYINT(1) , gwarancja TINYTEXT, data DATE, oferta_specjalna TINYINT(1), mala_paleta TINYINT(1), duzy TINYINT(1), raportowany TINYINT(1),  grupa TINYTEXT, cena_sugerowana DOUBLE(6,2))";
	
	$BazaDanych->Query($KodSQLTabelki);
}

$Tabelka = $BazaDanych->Query('SHOW TABLES LIKE "Parametry"'); //sprawdzenie czy istnieje tabelka parametrów

if(!$Tabelka->fetch_assoc()) //w wypadku gdy nie istnieje tworzę
	$BazaDanych->Query('CREATE TABLE Parametry (id TINYTEXT, nazwa TINYTEXT, opis TEXT, jednostka TINYTEXT, typ TINYTEXT)');


foreach($PlikXML->produkty->produkt as $InformacjeOProdukcie) //wydobywanie informacji z pliku xml, zapis do bazy danych i wyświetlenie informacji w tabelce
{
  $atr = $InformacjeOProdukcie->attributes();
  
  $Vat = $atr['vat'];
  $Netto = $atr['cena_netto'];
  $NaZamowienie = strcmp($atr['na_zamowienie'],'T') ? 1 : 0; //w bazie będzie 1 jeżeli jest na zamówienie i 0 jeżeli nie będzie
  $Producent = str_replace("'","\'",$atr['producent']);  //w kilkunastu pozycjach są cudzysłowy, których występowanie uniemożliwia poprawne wykonie zapytania
  $Dostepnych = is_numeric($atr['dostepny']) ? $atr['dostepny'] : 31; //w pliku xml możemy napotkać się na zapis "ponad 30" w takim wypadku w bazie będzie 31
  $Nazwa = str_replace("'","\'",$atr['nazwa']); 
  $ID = $atr['id'];
  $Grupa = $atr['grupa'];
  $Gwarancja = $atr['gwarancja'];
  $MagazynZewnetrzny = strcmp($atr['magazyn_zewnetrzny'],'T') ? 1 : 0; 
  $CenaSugerowana = isset($atr['cena_sugerowana']) ? $atr['cena_sugerowana'] : 'NULL';
  $Data = $atr['data'];
  $OfertaSpecjalna = strcmp($atr['oferta_specjalna'],'T') ? 1 : 0; //podobnie jak wcześniej, zamieniam T na 1 i N na 0
  $MalaPaleta = strcmp($atr['mala_paleta'],'T') ? 1 : 0; 
  $Raportowany = strcmp($atr['raportowany'],'T') ? 1 : 0; 
  $Duzy = strcmp($atr['large'],'T') ? 1 : 0; 
  
  $Wartosci = "($Vat, $Netto, $NaZamowienie, '$Producent', $Dostepnych, '$Nazwa', '$ID', '$Grupa', '$Gwarancja', $MagazynZewnetrzny, $CenaSugerowana, '$Data', $OfertaSpecjalna, $MalaPaleta, $Raportowany, $Duzy )";
  
  $Zapytanie = "INSERT INTO Produkty (vat, netto, na_zamowienie, producent, dostepny, nazwa, id, grupa, gwarancja, magazyn_zewnetrzny, cena_sugerowana, data, oferta_specjalna, mala_paleta, raportowany, duzy) VALUES ";
  
  $BazaDanych->Query($Zapytanie.$Wartosci);
  
  foreach($InformacjeOProdukcie->technika->parametr as $parametry)
  {
	  $atr = $parametry->attributes();
	  $Nazwa = $atr['nazwa'];
	  $Opis = $atr['opis'];
	  $Jednostka = $atr['jm'];
	  $Typ = $atr['typ'];
	  
	  

	  $BazaDanych->Query("INSERT INTO Parametry (id, opis, nazwa, jednostka, typ) VALUES ('$ID', '$Opis', '$Nazwa','$Jednostka','$Typ')")
		  
  }

  
   
  
}
	
?>
 

Będzie dobrze?