Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]Import danych
Forum PHP.pl > Forum > Przedszkole
radziowi
Witam chciałem sobie zaimportować dane z pliku XML. Pojedynczy import dzila mi bez problemów pobieram wszytjoie dane z pliku do bazy. Jednak chce cos takiego zeby mi pobieralo tylko rekordy ktore wczesniej nie byly pobrane do bazy danych
  1. <?php
  2. require_once('example.php');
  3. require_once('import_class.php');
  4.  
  5. $xml = new SimpleXMLElement($xmlstr);
  6.  
  7. $query = new import_data;
  8. $query_result = $query -> show_products();
  9. $query_count = $query -> query_count();
  10.  
  11. foreach ($xml->products as $key)
  12. {  
  13. //echo $key->product_index;
  14. if($query_count == 0) //pobieranie gdy putsa tabela products dziala
  15. {
  16. mysql_query("INSERT INTO products (product_name, product_index, product_producent, product_price,  product_price_regular, product_price_procent, product_available, product_short_
    desc, product_long_desc, product_thumb,  product_medium, product_large, product_status, product_category )
  17. VALUES (
  18. '$key->product_name', '$key->product_index', '$key->product_producent', '$key->product_price', '$key->product_price_procent', '$key->product_price_procent', '$key->product_available', '$key->product_short_desc', '$key->product_long_desc', ' $key->product_thumb', '$key->product_medium', '$key->product_large', '$key->product_status', '$key->product_category'
  19. )");
  20. }
  21.  
  22. foreach ($query_result as $index)
  23. {
  24. if ($key->product_index == $index['product_index'])  //tu cos mam zle 
  25. {
  26. echo 'zapisz';
  27. INSERT INTO....
  28. break;
  29. }
  30. }
  31. ?>


Co sie dzieje z moim skryptem. Przechodzi mi przez caly plik XML i porownuje to z tym co jest zapisane w bazie dancyh. Jednak nie robi tego co chce bo nie zapisuje do bazy(wybrair te rekordy ktore juz mam zapisane) zmienilem warunek ($key->product_index != $index['product_index']) za kazdym razem tablica jest przeszukiwana od nowa i zapisuje mi wszytko jeszcze raz. Chce zapisac tylko dane ktore wczesniej nie byly zapisane. Czy wogole dobrze mysle czy moze trzeba to rozwiazac w inny sposob??
sniezny_wilk
Hmm, na mój gust powinieneś dodać INSERT za 30 linijkę, teraz skrypt pracuje tak, że przechodzi tylko raz przez pętle. Tzn, porównuje zapisywany produkt z pierwszym rekordem, są różne zapisuje do bazy i wychodzi, potem kolejny rekord i znów porównuje z pierwszym. Jakbyś usunął ten break i w ifie w 24 linijce wcisną, że jak są równe to $zmienna = false i na końcu sprawdzać czy $zmienna == true jeśli tak to wtedy wykonać insert, pamiętaj o ustawianiu domyślnie zmiennej na true.

  1. <?php
  2. require_once('example.php');
  3. require_once('import_class.php');
  4.  
  5. $xml = new SimpleXMLElement($xmlstr);
  6.  
  7. $query = new import_data;
  8. $query_result = $query -> show_products();
  9. $query_count = $query -> query_count();
  10.  
  11. foreach ($xml->products as $key)
  12. {  
  13. $zmienna = true;
  14. //echo $key->product_index;
  15. if($query_count == 0) //pobieranie gdy putsa tabela products dziala
  16. {
  17. mysql_query("INSERT INTO products (product_name, product_index, product_producent, product_price,  product_price_regular, product_price_procent, product_available, product_short_
    desc, product_long_desc, product_thumb,  product_medium, product_large, product_status, product_category )
  18. VALUES (
  19. '$key->product_name', '$key->product_index', '$key->product_producent', '$key->product_price', '$key->product_price_procent', '$key->product_price_procent', '$key->product_available', '$key->product_short_desc', '$key->product_long_desc', ' $key->product_thumb', '$key->product_medium', '$key->product_large', '$key->product_status', '$key->product_category'
  20. )");
  21. }
  22.  
  23. foreach ($query_result as $index)
  24. {
  25. if ($key->product_index == $index['product_index'])  //tu cos mam zle 
  26. {
  27. $zmienna = false;
  28. break;
  29. }
  30. }
  31.  
  32. if($zmienna == true)
  33. {
  34.  echo 'zapis';
  35.  //INSERT
  36. }
  37.  
  38.  
  39. ?>


działa coś takiego ?

EDIT: break chyba może być smile.gif

EDIT2: krócej chyba nawet będzie jak się zrobi:
  1. <?php
  2.  
  3. if($zmienna)
  4. {
  5.  echo 'zapis';
  6.  //INSERT
  7. }
  8. ?>


smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.