Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] i [XML] ładownaie do bazy pliku xml
Forum PHP.pl > Forum > Przedszkole
motor
Witam
mam taki plik xml z danymi opon, i chce je załadować do bazy struktura wygląda tak


mnie interesują <produkty> których struktura wygląda tak
  1. - <produkt id="SIEALLBAK0002" uid="33486" pd_id="" nazwa="Opona nalewana" producent="ALL" grupa="OPY">
  2. - <zdjecia>
  3.  <zdjecie plik="fotki/opgood.jpg" fit="0" domyslne="1" />
  4.  <zdjecie plik="fotki/opgood_2.jpg" fit="0" domyslne="1" />
  5.  </zdjecia>
  6. - <technika md5="453872ff52d46514d9af5841d8cfae5a">
  7.  <parametr nazwa="Prędkość maksymalna" opis="240 km h letnia" jm="" typ="varchar" />
  8.  <parametr nazwa="Standard" opis="IEEEK" jm="" typ="varchar" />
  9.  <parametr nazwa="Rozmiar" opis="Rozmiar: 14/300" jm="" typ="varchar" />
  10.  </technika>
  11.  </produkt>


Do bazy chcę wyciągnąć takie dane
id
nazwa
grupa
zdjecie plik

parametr nazwa - wszystko chcę dać do jednego pola "opis" w bazie

Jak sie do tego zabrać ? Z wsadzeniem do bazy sobie poradzę tylko jak wyciągnąć te dane z xml żebym potem mógł sobie zrobić taki insert

  1. <?php
  2. $query = "INSERT INTO wdb (a,b,c) VALUES ('$id','$nazwa','$zdjecie_plik')"; itd.
  3. ?>
Cysiaczek
Proponuję, jeśli oczywiście możesz, skorzystac z dobrodziestw rozszerzenia simpleXML. Prosto i przyjemnie.
motor
Ok doszedłem do czegoś takiego tylko mam problem z pobraniem zdjecia niby w pętli ale ciągle pokazuje się to samo ? czemu ?
  1. <?php
  2. $katalog = simplexml_load_file('plik.xml');
  3.  
  4. foreach($katalog -> produkty -> produkt as $produkt){
  5.  
  6.  
  7. echo '<b>id produktu:</b> ' . $produkt['id'] . '<br>';
  8. echo '<b>Nazwa:</b> ' . $produkt['nazwa'].'<br>';
  9.  
  10.  
  11. foreach($katalog -> produkty -> produkt -> zdjecia -> zdjecie as $zdjecie){
  12.  
  13. echo '<b>Zdjecie:</b> ' . $zdjecie['plik'] . '<br>';
  14.  
  15.  }
  16. ?>
Cysiaczek
  1. <?php
  2. print $xml['id'];
  3. print $xml->zdjecia->zdjecie['plik'];
  4. ?>
'

W każdym razie coś podobnego.

2. Do foreacha wpakuj <produkty>, a nie <produkt> - przeciez produkt masz jeden prawda? To samo dotyczy zdjęć. Foreach robisz na grupie elementów, nie na jednym elemencie.
motor
Nie rozumiem
foreach($katalog -> produkty -> produkt as $produkt){

ta pęla działa ok tylko ta nie działa
foreach($katalog -> produkty -> produkt -> zdjecia -> zdjecie as $zdjecie){
Cysiaczek
  1. <?php
  2. //uhu
  3. foreach($katalog -> produkty -> produkt -> zdjecia as $zdjecie)
  4. ?>


Masz 2 tagi zdjecie.
motor
  1. <?php
  2. $katalog = simplexml_load_file('plik.xml');
  3. foreach($katalog -> produkty -> produkt as $produkt){  
  4.  echo '<b>id produktu:</b> ' . $produkt['id'] . '<br>';
  5. echo '<b>Nazwa:</b> ' . $produkt['nazwa'].'<br>';
  6. foreach($katalog -> produkty -> produkt -> zdjecia as $zdjecie)
  7. { echo '<b>Zdjecie:</b> ' . $zdjecie['plik'] . '<br>';
  8.  }
  9.  
  10. }
  11.  
  12.  
  13. ?>

Niestety zdjęcie nadal się nie wyswietla sad.gif
Cysiaczek
  1. <?php
  2. $katalog = simplexml_load_file('plik.xml');
  3. foreach($katalog->produkt as $produkt){
  4. echo '<b>id produktu:</b> ' . $produkt['id'] . '<br>';
  5. echo '<b>Nazwa:</b> ' . $produkt['nazwa'].'<br>';
  6. foreach($katalog->produkt->zdjecia->zdjecie as $zdjecie){
  7. echo '<b>Zdjecie:</b> ' . $zdjecie['plik'] . '<br>';
  8. }
  9.  
  10. }
  11. ?>


Jednak <zdjecie> - pomyliłem się. Teraz działa. Sprawdziłem. Po prostu domyślnie <produkty> są poziomem zerowym, czyli $katalog. Użyłeś innego pliku xml, a dałeś inny kod.
motor
Nie no wzystko co napisane powyżej prawda smile.gif
w tej lini pokazuje taki błąd foreach($katalog->produkt as $produkt){

Parse error: syntax error, unexpected T_VARIABLE

xml tak wygląda

  1. -<katalog>
  2. - <produkty>
  3.  - <produkt id="SIEALLBAK0002" uid="33486" pd_id="" nazwa="Opona nalewana" producent="ALL" grupa="OPY">
  4. - <zdjecia>  
  5. <zdjecie plik="fotki/opgood.jpg" fit="0" domyslne="1" />  
  6. <zdjecie plik="fotki/opgood_2.jpg" fit="0" domyslne="1" />  
  7. </zdjecia>
  8. - <technika md5="453872ff52d46514d9af5841d8cfae5a">  
  9. <parametr nazwa="Prędkość maksymalna" opis="240 km h letnia" jm="" typ="varchar" />  
  10. <parametr nazwa="Standard" opis="IEEEK" jm="" typ="varchar" />  
  11. <parametr nazwa="Rozmiar" opis="Rozmiar: 14/300" jm="" typ="varchar" />  
  12. </technika>  
  13. </produkt>
  14. </produkty>
  15.  </katalog>
Cysiaczek
No stary. Parse errora, to sobie chyba znajdziesz? Zresztą w tym, co napisałem nie ma błędu, bo testowałem. smile.gif
motor
Zobacz na strukturę xml
według twojego kodu nic nie wyświetla po dodaniu ->produkty czyli
  1. <?php
  2. foreach($katalog->produkty->produkt as $produkt){
  3. echo '<b>id produktu:</b> ' . $produkt['id'] . '<br>';
  4. echo '<b>Nazwa:</b> ' . $produkt['nazwa'].'<br>';
  5.  
  6. foreach($katalog->produkty->produkt->zdjecia->zdjecie as $zdjecie){
  7.  
  8. echo '<b>Zdjecie:</b> ' . $zdjecie['plik'] . '<br>';
  9.  
  10. }}
  11. ?>


id produktu
Nazwa:
zmienia się a zdjęcie wszędzie jest to samo czyli z pierwszego rekordu

Nie mam sił

10zł dla tego który rozwiąże problem
po zweryfikowaniu działania proszę o przesłanie wiadomości z nr konta i danym ido przelewu
Cysiaczek
  1. <?xml version="1.0" standalone="yes"?>
  2. <katalog>
  3. <produkty>
  4. <produkt id="SIEALLBAK0002" uid="33486" pd_id="" nazwa="Opona nalewana" producent="ALL" grupa="OPY">
  5. <zdjecia>
  6. <zdjecie plik="fotki/opgood.jpg" fit="0" domyslne="1" />
  7. <zdjecie plik="fotki/opgood_2.jpg" fit="0" domyslne="1" />
  8. </zdjecia>
  9. <technika md5="453872ff52d46514d9af5841d8cfae5a">
  10. <parametr nazwa="Prędkość maksymalna" opis="240 km h letnia" jm="" typ="varchar" />
  11. <parametr nazwa="Standard" opis="IEEEK" jm="" typ="varchar" />
  12. <parametr nazwa="Rozmiar" opis="Rozmiar: 14/300" jm="" typ="varchar" />
  13. </technika>
  14. </produkt>
  15. </produkty>
  16. </katalog>


  1. <?php
  2. $katalog = simplexml_load_file('plik.xml');
  3. foreach($katalog->produkty->produkt as $produkt){
  4. echo '<b>id produktu:</b> ' . $produkt['id'] . '<br>';
  5. echo '<b>Nazwa:</b> ' . $produkt['nazwa'].'<br>';
  6. foreach($katalog->produkty->produkt->zdjecia->zdjecie as $zdjecie){
  7. echo '<b>Zdjecie:</b> ' . $zdjecie['plik'] . '<br>';
  8. }
  9.  
  10. }
  11. ?>


Już drugi raz mówię, że działa, Jesli zmieniasz strukturę pliku, to nie dziw się, że potem coś nie działa :roll2:

o taki mam wynik w przeglądarce:
Kod
id produktu: SIEALLBAK0002
Nazwa: Opona nalewana
Zdjecie: fotki/opgood.jpg
Zdjecie: fotki/opgood_2.jpg
motor
A testowałeś przy 2 produktach

  1. <?xml version="1.0" encoding="iso-8859-2"?>
  2. <katalog>
  3. <produkty>
  4. <produkt id="SIEALLBAK0002" uid="33486" pd_id="" nazwa="Opona nalewana" producent="ALL" grupa="OPY">
  5. <zdjecia>
  6. <zdjecie plik="fotki/opgood.jpg" fit="0" domyslne="1" />
  7. <zdjecie plik="fotki/opgood_2.jpg" fit="0" domyslne="1" /></zdjecia>
  8. <technika md5="453872ff52d46514d9af5841d8cfae5a">
  9. <parametr nazwa="Prędkość maksymalna" opis="240 km h letnia" jm="" typ="varchar" />
  10. <parametr nazwa="Standard" opis="IEEEK" jm="" typ="varchar" />
  11. <parametr nazwa="Rozmiar" opis="Rozmiar: 14/300" jm="" typ="varchar" />
  12. </technika>
  13. </produkt>
  14. <produkt id="SIEALLBAK0002" uid="33486" pd_id="" nazwa="Opona nafghfghfghewana" producent="ALL" grupa="OPY">
  15. <zdjecia>
  16. <zdjecie plik="fotki/inne_2.jpg" fit="0" domyslne="1" /></zdjecia>
  17. <technika md5="453872ff52d46514d9af5841d8cfae5a">
  18. <parametr nazwa="Prędkość makfghsymalna" opis="240 km h letnia" jm="" typ="varchar" />
  19. <parametr nazwa="Standard" opis="IEEEK" jm="" typ="varchar" />
  20. <parametr nazwa="Rozmiar" opis="Rozmiar: 14/300" jm="" typ="varchar" />
  21. </technika>
  22. </produkt>
  23. </produkty>
  24. </katalog>


ja mam wynik taki

SIEALLBAK0002------Opona nalewana
fotki/opgood.jpg
fotki/opgood_2.jpg
SIEALLBAK0002------Opona nafghfghfghewana
fotki/opgood.jpg
fotki/opgood_2.jpg
Cysiaczek
Przepraszam, ale czy to ja jestem autorem skryptu? Podajesz problem, ja Ci daję rozwiązanie. Nie piszę tej aplikacji za Ciebie, a jedynie pokazuje możliwe rozwiązanie. Wystarczy dodać jeszcze jedną pętlę.
motor
Jestem bardzo bardzo wdzięczny za dotychczasową pomoc , tak to bym z miejsca przez tydzień nie ruszył
zdaje sobie sprawę ze strasznie zawracam Tobie głowę i poświęciłeś mi już dużo czasu ale w tym temacie kręcę się gorzej niż te pętle do tego mam mam kiepska wiedzę

Czy mógłbyś mi podpowiedzieć jeszcze co z tą pętlą bo pojęcia nie mam gdzie ją dać
Cysiaczek
  1. <?php
  2. $katalog = simplexml_load_file('plik.xml');
  3.  
  4. foreach($katalog->produkty->produkt as $key=>$produkt){
  5. echo '<b>id produktu:</b> ' . $produkt['id'] . '<br>';
  6. echo '<b>Nazwa:</b> ' . $produkt['nazwa'].'<br>';
  7.  
  8. foreach($produkt->zdjecia->zdjecie as $zdjecie){
  9. print $zdjecie;
  10. echo '<b>Zdjecie:</b> ' . $zdjecie['plik'] . '<br>';
  11. }
  12.  
  13. }
  14. ?>


Pamietaj, ze jeśli zmienisz strukturę, to musisz też zmienić skrypt.
motor
wszystko działa wyśmienicie smile.gif

dzięki dzięki dzięki

oczywiście 10zł jest Twoje
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.