sal_159.cm
24.07.2012, 13:42:06
Witam,
Jestem nowy na tym forum. W php dopiero zaczynam, więc proszę o jakieś wskazówki.
Napisałem skrypt który ma pobrać dane z xml, zapisać je w bazie danych i wyświetlić później w sklepie (logiczne).
Problem jest tego rodzaju, że echo nie wywala żadnych błedów a produktów w bazie jak nie było tak nie ma.
oto kawałek skryptu php
function parsuj_produkty(){
$dane = simplexml_load_file('gimmik_b2b_products_list.xml');
$dane = $dane->product_list;
for($x=0;$x<count($dane->product);$x++){
$produkt = $dane->product[$x];
$kat = self::pobierz_kategorie_glowna($produkt->category_id);
$producent = self::pobierz_id_producenta($produkt->brand);
$ilosc = $produkt->quantity;
$cena = $produkt->price_retail_gross;
$product_code = $produkt->product_code;
$nazwa = $produkt->product_name;
$opis = $produkt->product_description;
$parametry = $produkt->product_technical;
$zap = mysql_query("select product_code from products WHERE product_code='$product_code'");
$ile = mysql_num_rows($zap);
if($ile == 0){
echo 'Dodaję nowy produkt<BR>';
mysql_query("INSERT INTO products(`product_id`,
`category_id`,
`producer_id`,
`vat`,
`in_stock`,
`add_date`,
`edit_date`,
`price`,
`promo`,
`warranty`,
`weight`,
`views`,
`category2`,
`category3`,
`sort`,
`main_page`,
`main_page_sort`,
`products_related`,
`other_price`,
`product_code`,
`pkwiu`) VALUES
(NULL,
'$kat',
'$producent',
'23',
'$ilosc',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP,
'$cena',
'',
'0',
'', '0', '0', '0', '0', '', '0', '', '0', '$product_code', '');");
$idp = mysql_insert_id();
/////////////////// DODAWANIE OPISU ///////////////
$opis = $produkt->product_description .'<h3>Dane techniczne</h3>'. $produkt->product_technical .'<h3>Skład Zestawu</h3>'. $produkt->product_set . '<h3>Do uruchomienia</h3>'.$produkt->product_to_run . $film;
$opis = str_replace("'","`",$opis);
mysql_query("INSERT INTO prod_translations(`id_transl`, `pid`, `product_name`, `description`, `params`, `jm`, `options`, `active`, `lang`, `isdefault`) VALUES (NULL, '$idp', '$nazwa', '$opis', '$parametry', '', '', '1', 'pl', '');");
//////////////////// DODAWANIE ZDJĘĆ PRODUKTU ORAZ ICH POBIERANIE /////
for($y=0;$y<count($dane->product[$x]->photos);$y++){
$nazwa_pliku_oryginal = $dane->product[$x]->photos[$y]->photo[0];
$zdjecie_url = @file_get_contents($dane->product[$x]->photos[$y]->photo[0]);
$nazwa_pliku = explode('/',$dane->product[$x]->photos[$y]->photo[0]);
$nazwa_pliku = $nazwa_pliku[count($nazwa_pliku)-1];
$roz = explode('.',$nazwa_pliku);
$plik = md5(md5(md5($roz[0])));
mysql_query("INSERT INTO gfx(`gfx_id`, `prod_id`, `main_gfx`, `name`, `unic_name`, `gfx_sort`) VALUES (NULL, (SELECT product_id FROM products WHERE product_code='".$dane->product[$x]->product_code."' LIMIT 1), '$main_gfx', '$nazwa_pliku_oryginal', '$nazwa_pliku', '$gfx_sort');");
$fp = fopen('_var/gfx/'.$plik, "a");
flock($fp, 2);
fwrite($fp, $zdjecie_url);
flock($fp, 3);
fclose($fp);
echo 'Dodałem '.$x+$y.' zdjęć<BR>';
}
}
else{
echo 'Produkt już istnieje. Aktualizuję stan magazynowy<BR>';
mysql_query("update products set in_stock='$ilosc' where product_code='$product_code'");
}
}
}
bede bardzo wdzięczny za jakiekolwiek wskazówki.
Pozdrawiam
Lolek13
24.07.2012, 13:48:31
po pierwsze jak mozesz wrzuc to w znaczniki php bo tak nic tutaj nie widac.
Po drugie bledy wyswietlasz tak :
darko
24.07.2012, 13:51:02
po drugie nigdzie nie widać mysql_connect, po trzecie obsługuj przynajmniej podstawowe informacje od mysql, np.
sal_159.cm
24.07.2012, 13:52:43
function parsuj_produkty(){
$dane = simplexml_load_file('gimmik_b2b_products_list.xml');
$dane = $dane->product_list;
for($x=0;$x<count($dane->product);$x++){
$produkt = $dane->product[$x];
$kat = self::pobierz_kategorie_glowna($produkt->category_id);
$producent = self::pobierz_id_producenta($produkt->brand);
$ilosc = $produkt->quantity;
$cena = $produkt->price_retail_gross;
$product_code = $produkt->product_code;
$nazwa = $produkt->product_name;
$opis = $produkt->product_description;
$parametry = $produkt->product_technical;
$zap = mysql_query("select product_code from products WHERE product_code='$product_code'"); if($ile == 0){
echo 'Dodaję nowy produkt<BR>'; `category_id`,
`producer_id`,
`vat`,
`in_stock`,
`add_date`,
`edit_date`,
`price`,
`promo`,
`warranty`,
`weight`,
`views`,
`category2`,
`category3`,
`sort`,
`main_page`,
`main_page_sort`,
`products_related`,
`other_price`,
`product_code`,
`pkwiu`) VALUES
(NULL,
'$kat',
'$producent',
'23',
'$ilosc',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP,
'$cena',
'',
'0',
'', '0', '0', '0', '0', '', '0', '', '0', '$product_code', '');");
/////////////////// DODAWANIE OPISU ///////////////
$opis = $produkt->product_description .'<h3>Dane techniczne</h3>'. $produkt->product_technical .'<h3>Skład Zestawu</h3>'. $produkt->product_set . '<h3>Do uruchomienia</h3>'.$produkt->product_to_run . $film;
mysql_query("INSERT INTO prod_translations(`id_transl`, `pid`, `product_name`, `description`, `params`, `jm`, `options`, `active`, `lang`, `isdefault`) VALUES (NULL, '$idp', '$nazwa', '$opis', '$parametry', '', '', '1', 'pl', '');"); //////////////////// DODAWANIE ZDJĘĆ PRODUKTU ORAZ ICH POBIERANIE /////
for($y=0;$y<count($dane->product[$x]->photos);$y++){
$nazwa_pliku_oryginal = $dane->product[$x]->photos[$y]->photo[0];
$nazwa_pliku = explode('/',$dane->product[$x]->photos[$y]->photo[0
]); $nazwa_pliku = $nazwa_pliku[count($nazwa_pliku)-1
]; mysql_query("INSERT INTO gfx(`gfx_id`, `prod_id`, `main_gfx`, `name`, `unic_name`, `gfx_sort`) VALUES (NULL, (SELECT product_id FROM products WHERE product_code='".$dane->product[$x]->product_code."' LIMIT 1), '$main_gfx', '$nazwa_pliku_oryginal', '$nazwa_pliku', '$gfx_sort');"); $fp = fopen('_var/gfx/'.$plik, "a"); echo 'Dodałem '.$x+$y.' zdjęć<BR>'; }
}
else{
echo 'Produkt już istnieje. Aktualizuję stan magazynowy<BR>'; mysql_query("update products set in_stock='$ilosc' where product_code='$product_code'"); }
}
}
darko
24.07.2012, 13:54:50
Przekaż funkcji zasób do połączenia z bazą danych.
sal_159.cm
24.07.2012, 13:55:32
<?
define('DB_HOST','localhost'); or
die('Błąd połączenia z bazą danych');
połączenie z baza
darko
24.07.2012, 13:57:54
function parsuj_produkty($dbResource){
//..
$zap = mysql_query("select product_code from products WHERE product_code='$product_code'", $dbResource);
i teraz zmienną $connect przekaż funkcji:
parsuj_produkty($connect);
Lolek13
24.07.2012, 14:00:41
`category_id`,
`producer_id`,
`vat`,
`in_stock`,
`add_date`,
`edit_date`,
`price`,
`promo`,
`warranty`,
`weight`,
`views`,
`category2`,
`category3`,
`sort`,
`main_page`,
`main_page_sort`,
`products_related`,
`other_price`,
`product_code`,
`pkwiu`) VALUES
(NULL,
'.$kat.',
'.$producent.',
'.23.',
'.$ilosc.',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP,
'.$cena.',
'',
'0',
'', '0', '0', '0', '0', '', '0', '', '0', '.$product_code.', '');");
Dodaj kropki do wstawianych zmiennych tak jak tu ... mozliwe, ze bedzie trzeba dodac jeszcze " "
sal_159.cm
24.07.2012, 14:16:09
zmiany wprowadzone, dalej nie działa.
w które miejsce dokładnie wstawić "
Lolek13
24.07.2012, 14:18:59
NULL,
'".$kat."',
'".$producent."',
'23',
''.$ilosc."',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP,
'".$cena."',
'',
'0',
'', '0', '0', '0', '0', '', '0', '', '0', '".$product_code."', '');
u mnie dopiero cos takiego ostatnio zadzialalo ...
sal_159.cm
24.07.2012, 14:23:42
(NULL,'".$kat."','".$producent."','23','".$ilosc."',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,
'"$cena."','','0','', '0', '0', '0', '0', '', '0', '', '0', '".$product_code."', '');");
dokładnie tak ma to wyglądać ?
Lolek13
24.07.2012, 14:26:47
tak u mnie dopiero takie cos zdalo egzamin.
sal_159.cm
24.07.2012, 14:29:58
wywala błąd
Parse error: syntax error, unexpected T_VARIABLE in /import.php on line 156
Lolek13
24.07.2012, 14:38:21
pewnie brakuje Ci gdzieś srednika, klamry, nawiasu lub cos w tym stylu