Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Brak zapisu w tabeli wszystkich rekordów z pliku xml
Forum PHP.pl > Forum > Bazy danych > MySQL
slawekxx
Witam, mam mały problem z zapisaniem wielu rekordów z pliku xml jednocześnie , poniżej jest mój skrypt zapisuje on jeden rekord i tylko ostatni z pliku xml , co muszę poprawić aby zapisywał wszystkie rekordy do bazy mysql ?


  1.  
  2. //Parsal
  3.  
  4. $markers = simplexml_load_file('http://www.meteo.gr/WFSail/templates/Gdata2.xml');
  5. foreach ($markers->GROUND_STATIONS as $pogoda) {
  6. $tmp = $pogoda->attributes();
  7. $tmp['station_name'];
  8. $tmp['station_id'];
  9. $tmp['od_date'];
  10. $tmp['od_time'];
  11. $tmp['lat'];
  12. $tmp['long'];
  13.  
  14. }
  15.  
  16. // odbieramy dane z xml dane stacji
  17.  
  18. $station_name = $tmp['station_name'];
  19. $station_id = $tmp['station_id'];
  20. $od_date=$tmp['od_date'];
  21. $od_time=$tmp['od_time'];
  22. $lat = $tmp['lat'];
  23. $lng = $tmp['long'];
  24.  
  25.  
  26. foreach ($pogoda->OBSERVATIONS_GREECE as $rozne){
  27. $tmp = $rozne->attributes();
  28. $tmp['wind_dir'];
  29. $tmp['wind_force'];
  30. $tmp['temperature'];
  31. $tmp['pressure'];
  32. }
  33.  
  34. //Odbieramy dane z pliku xml dane pomiaru
  35.  
  36.  
  37. $wind_dir=$tmp['wind_dir'];
  38. $wind_force=$tmp['wind_force'];
  39. $temperature=$tmp['temperature'];
  40. $pressure=$tmp['pressure'];
  41.  
  42.  
  43. foreach ($rozne->OBSERVATIONS_PHENOMENA as $tekst){
  44. $tmp = $tekst->attributes();
  45. $tmp['DIRTEXT'];
  46. $tmp['descr'];
  47. }
  48.  
  49. //Odbieramy dane z pliku xml dane pomiaru czesc druga
  50.  
  51. $DIRTEXT=$tmp['DIRTEXT'];
  52. $descr=$tmp['descr'];
  53.  
  54. if($station_name and $station_id and $od_date and $od_time and $lat and $lng and $wind_dir and $wind_force and $temperature and $pressure and $DIRTEXT
  55.  
  56. and $descr) {
  57.  
  58. // łączymy się z bazą danych
  59.  
  60. $connection = mysql_connect('host', 'login', 'hasło')
  61. or die('Brak połączenia z serwerem MySQL');
  62. $db = mysql_select_db('baza', $connection)
  63. or die('Nie mogę połączyć się z bazą danych');
  64.  
  65. // dodaje dane stacji do bazy
  66.  
  67. $ins = mysql_query("INSERT INTO tablica SET
  68.  
  69. station_name='$station_name',station_id='$station_id',dzien='$od_date',czas='$od_time',lat='$lat',lng='$lng',wind_dir='$wind_dir',wind_force='$wind_forc
  70.  
  71. e',temperature='$temperature',pressure='$pressure',DIRTEXT='$DIRTEXT',descr='$descr'");
  72.  
  73. if($ins) echo "Rekord został dodany poprawnie";
  74. else echo "Błąd nie udało się dodać nowego rekordu";
  75.  
  76.  
  77. }


Problem prawie rozwiązany, tylko teraz dziwnie zapisują mi się dane w tabeli a mianowicie w trzech rekordach są dane z jednej stacji to jest kod
  1. // łšczymy się z bazš danych
  2.  
  3. $connection = mysql_connect('host', 'login', 'hasło')
  4. or die('Brak połšczenia z serwerem MySQL');
  5. $db = mysql_select_db('baza', $connection)
  6. or die('Nie mogę połšczyć się z bazš danych');
  7.  
  8. //Parsal
  9.  
  10. $markers = simplexml_load_file('http://www.meteo.gr/WFSail/templates/Gdata2.xml');
  11. foreach ($markers->GROUND_STATIONS as $pogoda) {
  12. $tmp = $pogoda->attributes();
  13. $tmp['station_name'];
  14. $tmp['station_id'];
  15. $tmp['od_date'];
  16. $tmp['od_time'];
  17. $tmp['lat'];
  18. $tmp['long'];
  19.  
  20. $ins = mysql_query("INSERT INTO nazwa tabeli SET station_name='$station_name',station_id='$station_id',dzien='$od_date',czas='$od_time',lat='$lat',lng='$lng'");
  21.  
  22. // odbieramy dane z xml dane stacji
  23.  
  24. $station_name = $tmp['station_name'];
  25. $station_id = $tmp['station_id'];
  26. $od_date=$tmp['od_date'];
  27. $od_time=$tmp['od_time'];
  28. $lat = $tmp['lat'];
  29. $lng = $tmp['long'];
  30.  
  31. foreach ($pogoda->OBSERVATIONS_GREECE as $rozne){
  32. $tmp = $rozne->attributes();
  33. $tmp['wind_dir'];
  34. $tmp['wind_force'];
  35. $tmp['temperature'];
  36. $tmp['pressure'];
  37.  
  38. $ins = mysql_query("INSERT INTO nazwa tabeli SET wind_dir='$wind_dir',wind_force='$wind_force',temperature='$temperature',pressure='$pressure'");
  39. //Odbieramy dane z pliku xml dane pomiaru
  40.  
  41. $wind_dir=$tmp['wind_dir'];
  42. $wind_force=$tmp['wind_force'];
  43. $temperature=$tmp['temperature'];
  44. $pressure=$tmp['pressure'];
  45.  
  46. foreach ($rozne->OBSERVATIONS_PHENOMENA as $tekst){
  47. $tmp = $tekst->attributes();
  48. $tmp['DIRTEXT'];
  49. $tmp['descr'];
  50. }
  51. }
  52. }
  53. //Odbieramy dane z pliku xml dane pomiaru czesc druga
  54.  
  55. $DIRTEXT=$tmp['DIRTEXT'];
  56. $descr=$tmp['descr'];
  57. $ins = mysql_query("INSERT INTO nazwa tabeli SET DIRTEXT='$DIRTEXT',descr='$descr'");
  58.  
  59. if($station_name and $station_id and $od_date and $od_time and $lat and $lng and $wind_dir and $wind_force and $temperature and $pressure and $DIRTEXT and $descr) {
  60.  
  61.  
  62. if($ins) echo "Rekord został dodany poprawnie";
  63. else echo "Błšd nie udało się dodać nowego rekordu";
  64. }
kitol
Jak robisz 3 INSERTY po kolei to nie dziw się, że dodają się 3 rekordy. Możesz robić 1 INSERT + 2 UPDATE'y, lub tylko 1 INSERT zamiast trzecieg który wstawi wszystkie dane (to jest lepsze z powodów wydajnościowych).
Poczytaj manuala o insertach bo moim zdaniem używasz niewłaściwej składni (chodzi mi o SET). Rekordy dodaje się trochę inzcej: INSERT INTO nazwatabeli (col1, col2, col3) values( 1,2,3)
wookieb
Cytat(kitol @ 7.09.2010, 09:05:00 ) *
Poczytaj manuala o insertach bo moim zdaniem używasz niewłaściwej składni (chodzi mi o SET). Rekordy dodaje się trochę inzcej: INSERT INTO nazwatabeli (col1, col2, col3) values( 1,2,3)

SET też jest dozwolony.
W przypadku tematu użyj ON DUPLICATE KEY UPDATE (więcej info google)
slawekxx
Kod poprawiony tylko, że teraz wpisuje we wszystkie rekordy te same dane dla instrukcji UPDATE
wookieb
No to pokaż teraz kod.
slawekxx
OK kod :-)

  1. // Tutaj łącze się z bazą Mysql//
  2.  
  3.  
  4. //Parsal
  5.  
  6. $markers = simplexml_load_file('http://www.meteo.gr/WFSail/templates/Gdata2.xml');
  7. foreach ($markers->GROUND_STATIONS as $pogoda) {
  8. $tmp = $pogoda->attributes();
  9. $tmp['station_name'];
  10. $tmp['station_id'];
  11. $tmp['od_date'];
  12. $tmp['od_time'];
  13. $tmp['lat'];
  14. $tmp['long'];
  15.  
  16. // odbieramy dane z xml dane stacji
  17.  
  18. $station_name = $tmp['station_name'];
  19. $station_id = $tmp['station_id'];
  20. $od_date=$tmp['od_date'];
  21. $od_time=$tmp['od_time'];
  22. $lat = $tmp['lat'];
  23. $lng = $tmp['long'];
  24.  
  25. $ins = mysql_query("INSERT INTO nazwa tabeli SET station_name='$station_name',station_id='$station_id',dzien='$od_date',czas='$od_time',lat='$lat',lng='$lng'");
  26.  
  27. foreach ($pogoda->OBSERVATIONS_GREECE as $rozne){
  28. $tmp = $rozne->attributes();
  29. $tmp['wind_dir'];
  30. $tmp['wind_force'];
  31. $tmp['temperature'];
  32. $tmp['pressure'];
  33.  
  34.  
  35. //Odbieramy dane z pliku xml dane pomiaru
  36.  
  37. $wind_dir=$tmp['wind_dir'];
  38. $wind_force=$tmp['wind_force'];
  39. $temperature=$tmp['temperature'];
  40. $pressure=$tmp['pressure'];
  41.  
  42. $ins = mysql_query("UPDATE nazwa tabeli SET wind_dir='$wind_dir',wind_force='$wind_force',temperature='$temperature',pressure='$pressure'");
  43.  
  44. foreach ($rozne->OBSERVATIONS_PHENOMENA as $tekst){
  45. $tmp = $tekst->attributes();
  46. $tmp['DIRTEXT'];
  47. $tmp['descr'];
  48. $DIRTEXT=$tmp['DIRTEXT'];
  49. $descr=$tmp['descr'];
  50. $ins = mysql_query("UPDATE nazwa tabeli SETDIRTEXT='$DIRTEXT', descr='$descr'");
  51.  
  52. }
  53. }
  54. }
  55.  
  56. if($station_name and $station_id and $od_date and $od_time and $lat and $lng and $wind_dir and $wind_force and $temperature and $pressure and $DIRTEXT and $descr)
  57.  
  58. {
  59.  
  60. if($ins) echo "Rekord został dodany poprawnie";
  61. else echo "Błąd nie udało się dodać nowego rekordu";
  62. }
  63.  
wookieb
Jak patrze na takie bezmózgie wypociny to naprawdę ręce opadają. Marsz do kursu i przeczytaj PO CO JEST WHERE DLA ZAPYTANIA UPDATE!
Bez dokładnej lektury tegoż kursu i poczwórnego przeczytania manuala MYSQL nawet nie wracaj.
slawekxx
A przejrzałeś ten plik http://www.meteo.gr/WFSail/templates/Gdata2.xml ?
kitol
Zrób jedna pętlę iterującą po elementach "GROUND_STATIONS" i wykonuj po jednym insercie pobierając wszystkie wartości danego elementu do zapytania. Dodatkowo poczytaj o simplexml. Ten kod nie powinien zajmować więcej niż 10 linii.

@wookieb. SET jest dozwolony to prawda. Ale chyba prościej i lepiej dla kolegi byłoby to zrobić standardową składnią. Po co uczyć kolegę czegoś, czego nikt nie praktykuje?
wookieb
Cytat(kitol @ 9.09.2010, 09:07:49 ) *
@wookieb. SET jest dozwolony to prawda. Ale chyba prościej i lepiej dla kolegi byłoby to zrobić standardową składnią. Po co uczyć kolegę czegoś, czego nikt nie praktykuje?


Zdziwisz się.
Np w wielu klasach do obsługi DB inserty konstruuje się właśnie w ten sposób ponieważ taki fragment zapytania można użyć bez problemu w zapytaniu UPDATE = mniej kodu przygotowującego zapytanie INSERT
slawekxx
Próbowałem już UPDATE ale chyba coś nie tak robię, bo ciągle nie wychodzi ... rekordy zapisują się jak się zapisywały :-) czy ktoś może pomóc mi naprawić ten kod ?
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.