Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][XML] Dane z FTP do MySQL
Forum PHP.pl > Forum > Przedszkole
Frugo75
Witam,

Zastanwiam sie nad rozwiązaniem i prosze o pomoc.

Mam pliki XML z depeszami agencyjnymi na FTP podzielone na rozne kategorie, np katalog 1 - w nim kategoria KRAJ, katalog 10 w nim xml z kategorii ŚWIAT itp.

I teraz co i jak powinienem zrobic, aby dane z FTP przenosiły się same (automatycznie, zaraz po pojawieniu się nowej depeszy w xml) do bazy mysql.

Ma ktos pomysł jak to zrobić? Proszę o wskazówki.

Pozdrawiam

mar1aczi
Cytat(Frugo75 @ 14.01.2014, 13:37:49 ) *
... dane z FTP przenosiły się same (automatycznie, zaraz po pojawieniu się nowej depeszy w xml) do bazy mysql.

cron + skrypt w php czy perl czy python
Frugo75
Cytat(mar1aczi @ 14.01.2014, 14:40:18 ) *
cron + skrypt w php czy perl czy python


Dzięki. A cos wiecej? Od czego zaczac? Cron do sprawdzania? php do wysyłania ?
mar1aczi
Cron do uruchamiania skryptu.
Skrypt:
1. sprawdza zawartość katalogu (bez katalogu archiwum)
2a. jak coś się pojawiło przetwarza (ładuje dane z xml do bazy) i przenosi plik do katalogu archiwum
2b. jak nic się nie pojawiło kończy dziłanie
Frugo75
Dziękuję. wink.gif
Teraz przynajmniej wiem od czego zaczac.


Zaczalem robic i pierwsze problemy z apostrofami i cudzyslowami.

Wyciagam dane z XML przypisuje do zmiennych: $tytul i $tresc. Ale w jednym i drugim w XML są wyrazy w cudzyslowiach i z apostrofami. No i przy dodaniu do bazy wyskakują bledy syntax error. Prosze o pomoc jak temu zaradzic. Próbowalem brac zmienne w apostrofy i bez i ze znakiem ` ale nic nie pomaga.

  1. mysql_query("INSERT INTO wp_posts (post_content, post_title) VALUES ($tresc, $tytul)") OR die(mysql_error());
Turson
VALUES ('".$tresc."', '".$tytul."')
Frugo75
Cytat(Turson @ 14.01.2014, 22:16:18 ) *
VALUES ('".$tresc."', '".$tytul."')



Niestety nie dziala. Bład przy apostrofie. Jest wyraz "Bale'a i Oezila" w tytule i wyskakuje błąd "... syntax to use near 'a i Oezila')' at line 1". Czyli po apostrofie cos sie psuje.
Turson
Błąd nie leży po stronie apostrofa a typowy błąd korzystania z MySQL...
http://php.net/manual/pl/function.mysql-re...cape-string.php
http://pl1.php.net/addslashes
Radzę przerzucić się na PDO, bo MySQL to przeżytek
Frugo75
Cytat(Turson @ 14.01.2014, 22:29:39 ) *
Błąd nie leży po stronie apostrofa a typowy błąd korzystania z MySQL...
http://php.net/manual/pl/function.mysql-re...cape-string.php
http://pl1.php.net/addslashes
Radzę przerzucić się na PDO, bo MySQL to przeżytek



OK. Dziekuje za poswiecony czas.

PS. Skorzystałem z addslashes i poszło. Dziękuję.

Teraz utknałem w pętli.

Mam plik feeds.xml

  1. <feeds>
  2. <feed id="148038" cat_id="56" add_date="2014-01-14 21:53:28" mod_date="0000-00-00 00:00:00" path="/56/2014-01-14/148038/148038.xml" />
  3. <feed id="148038" cat_id="10" add_date="2014-01-14 21:53:28" mod_date="0000-00-00 00:00:00" path="/10/2014-01-14/148038/148038.xml" />
  4. <feed id="148037" cat_id="59" add_date="2014-01-14 21:41:01" mod_date="0000-00-00 00:00:00" path="/59/2014-01-14/148037/148037.xml" />
  5.  
  6. </feeds>


i robię parser. Już wyswietla mi ostatni wpis z <feed> ale nie umiem zrobić tak, aby wyswietlały się wszystkie. Proszę o pomoc w zastosowaniu pętli, której nie potrafie póki co zrozumieć. Czy pomoże ktoś?

  1. $doc = new DOMDocument("1.0", "iso-8859-2");
  2. $doc->load("feeds.xml");
  3.  
  4. $feeds = $doc->getElementsByTagName( "feed" );
  5.  
  6. $id = $feeds->item(0)->nodeValue;
  7. $id = $feeds->item(0)->getAttribute("id");
  8. $path = $feeds->item(0)->getAttribute("path");
  9. $cat_id = $feeds->item(0)->getAttribute("cat_id");
  10. $add_date = $feeds->item(0)->getAttribute("add_date");


Teraz cos pokombinowałem i wyskoczył mi wiele razy ostatni wpis. A wciąż nie umiem wyciągnąć wszystkich. Teraz moj kod wyglada tak:

  1. $doc = new DOMDocument("1.0", "iso-8859-2");
  2. $doc->load("feeds.xml");
  3.  
  4. $p = $doc->getElementsByTagName( "feeds" );
  5.  
  6.  
  7. $feed = $doc->getElementsByTagName( "feed" );
  8.  
  9. foreach ($feed as $mat)
  10. {
  11.  
  12. $mat = $feed->item(0)->nodeValue;
  13.  
  14. $id = $feed->item(0)->getAttribute('id');
  15. print "<pre> '$id' </pre>";
  16. print "<pre> '$path' </pre>";
  17. print "<pre> '$cat_id' </pre>";
  18. print "<pre> '$add_date' </pre>";
  19.  
  20. }


Czy nikt nie wie jak mi pomoc?
Prosze.
mar1aczi
getElementsByTagName
Pierwszy przykład na powyższej stronie wink.gif
Frugo75
Cytat(mar1aczi @ 15.01.2014, 20:23:01 ) *
getElementsByTagName
Pierwszy przykład na powyższej stronie wink.gif



Działa;) Dziekuje.

PS. Cenie tu wskazanie drogi a nie pisanie gotowców. Dzieki temu człowiek się uczy;)
mar1aczi
Cytat(Frugo75 @ 15.01.2014, 20:35:31 ) *
PS. Cenie tu wskazanie drogi a nie pisanie gotowców. Dzieki temu człowiek się uczy;)

Jesteś jednym z niewielu, którzy to doceniają. Chwała Ci za to.
Coraz więcej osób czeka na gotowce. Nie zagląda we wskazane linki, nie próbuje zrozumieć kodu.
Frugo75
Witam ponownie.
Sporo juz zrobilem. Newsy z ftp ladnie laduja w bazie. Wszystko cacy, ale nie moge z pola tytul zrobic stringa do url. Tzn nie umiem poprawnie wyeliminowac (zastapic) polskich znakow. Niby usuwa wszystkie z ogonkami, ale pojawia sie blad Fatal error: Cannot redeclare str2url() (previously declared in /mwbo/news/index.php:71) in /mwbo/news/index.php on line 71

Wklejam kod. Czy ktos moglby pomoc gdzie jest blad?

  1.  
  2.  
  3. <?php
  4.  
  5.  
  6. $doc = new DOMDocument("1.0", "iso-8859-2");
  7. $doc->load("feeds.xml");
  8. $books = $doc->getElementsByTagName('feed');
  9. foreach ($books as $feed) {
  10. echo $feed->nodeValue, PHP_EOL;
  11. // echo $feed -> getAttribute('id').'<br>';
  12. $path = $feed -> getAttribute('path');
  13. // echo $feed -> getAttribute('cat_id').'<br>';
  14. //echo $path;
  15.  
  16.  
  17. //$path1
  18.  
  19. $path1 = substr($path, "1");
  20. $path1.'<br>';
  21.  
  22. $doc = new DOMDocument("1.0", "iso-8859-2");
  23.  
  24.  
  25. $doc->load("$path1");
  26.  
  27. $feed = $doc->getElementsByTagName( "feed" );
  28. foreach ($feed as $matches)
  29. {
  30. $title = $matches->getElementsByTagName( "title" );
  31. $tytul = $title->item(0)->nodeValue;
  32.  
  33. $content = $matches->getElementsByTagName( "content" );
  34. $tresc = $content->item(0)->nodeValue;
  35.  
  36. $id = $matches->getElementsByTagName( "id" );
  37. $export_id = $id->item(0)->nodeValue;
  38.  
  39. $add_date = $matches->getElementsByTagName( "add_date" );
  40. $date = $add_date->item(0)->nodeValue;
  41.  
  42.  
  43. $date;
  44.  
  45. // echo "$tytul";
  46. echo "<br>";
  47. echo "<br>";
  48. echo "<br>";
  49. "$tresc";
  50.  
  51.  
  52.  
  53. $tytul1 = addslashes($tytul);
  54. $tresc1 = addslashes($tresc);
  55. $date1 = addslashes($date);
  56.  
  57. mysql_connect("xxx","xxxx","xxx") or die(mysql_error());
  58. mysql_query("SET NAMES utf8");
  59.  
  60. echo $tresc1;
  61.  
  62. function str2url( $str, $replace = "-" ){
  63.  
  64. // konwersja znaków utf do znaków podstawowych
  65. $str = iconv('UTF- 8', 'ASCII//TRANSLIT', $str);
  66.  
  67. // Niektóre francuskie i niemieckie litery pozostawiają po takiej konwersji (jak powyżej)
  68. // dodatkowe znaki. Poniższe dwie linijki te znaki wycinają
  69.  
  70. $charsArr = array( '^', "'", '"', '`', '~');
  71. $str = str_replace( $charsArr, '', $str );
  72.  
  73. $return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($str))));
  74. return str_replace(' ', $replace, $return);
  75. }
  76.  
  77. $tylul1a=str2Url($tytul1);
  78.  
  79.  
  80.  
  81. mysql_query("INSERT INTO wp_posts (post_content, post_title, post_date, ID, post_name) VALUES ('".$tresc1."', '".$tytul1."', '".$date1."', '$export_id', '$tylul1a') ON DUPLICATE KEY UPDATE ID=VALUES(ID)") or die(mysql_error());
  82.  
  83. mysql_query("INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) VALUES ('$export_id', '3') ON DUPLICATE KEY UPDATE term_taxonomy_id=VALUES(term_taxonomy_id)") or die(mysql_error());
  84.  
  85.  
  86. }
  87.  
  88. }
  89.  
  90. ?>
mar1aczi
Funkcję str2url() wyjmij poza pętlę foreach. Sprawdź poprawność zamknięcia nawiasów klamrowych: linia 87 i 89. Jest o jeden za dużo.
Frugo75
Dzięki, ale nie działa.
Przenioslem wszystkie nawiasy klamrowe od foreach powyzej funkcji subs2url, ale wtedy zmienna $tytul1 "nie dociera do funkcji", "wygasa" tuz przed zamknieciem petli.

Jak to obejsc?
mar1aczi
Pokaż kod po naniesionych poprawkach.
Frugo75
Dzięki. Wklejam kod

  1.  
  2. <?php
  3.  
  4.  
  5. $doc = new DOMDocument("1.0", "iso-8859-2");
  6. $doc->load("feeds.xml");
  7. $books = $doc->getElementsByTagName('feed');
  8. foreach ($books as $feed) {
  9. echo $feed->nodeValue, PHP_EOL;
  10. // echo $feed -> getAttribute('id').'<br>';
  11. $path = $feed -> getAttribute('path');
  12. // echo $feed -> getAttribute('cat_id').'<br>';
  13. //echo $path;
  14.  
  15.  
  16. //$path1
  17.  
  18. $path1 = substr($path, "1");
  19. $path1.'<br>';
  20.  
  21. $doc = new DOMDocument("1.0", "iso-8859-2");
  22.  
  23.  
  24. $doc->load("$path1");
  25.  
  26. $feed = $doc->getElementsByTagName( "feed" );
  27. foreach ($feed as $matches)
  28. {
  29. $title = $matches->getElementsByTagName( "title" );
  30. $tytul = $title->item(0)->nodeValue;
  31.  
  32. $content = $matches->getElementsByTagName( "content" );
  33. $tresc = $content->item(0)->nodeValue;
  34.  
  35. $id = $matches->getElementsByTagName( "id" );
  36. $export_id = $id->item(0)->nodeValue;
  37.  
  38. $add_date = $matches->getElementsByTagName( "add_date" );
  39. $date = $add_date->item(0)->nodeValue;
  40.  
  41.  
  42. $date;
  43.  
  44. // echo "$tytul";
  45. echo "<br>";
  46. echo "<br>";
  47. echo "<br>";
  48. "$tresc";
  49.  
  50.  
  51.  
  52. $tytul1 = addslashes($tytul);
  53. $tresc1 = addslashes($tresc);
  54. $date1 = addslashes($date);
  55.  
  56. mysql_connect("xxx","xxx","xxx") or die(mysql_error());
  57. mysql_query("SET NAMES utf8");
  58.  
  59. $tresc1;
  60. }
  61.  
  62. }
  63.  
  64. echo $tytul1;
  65.  
  66. function str2url( $str, $replace = "-" ){
  67.  
  68. // konwersja znaków utf do znaków podstawowych
  69. $str = iconv('UTF- 8', 'ASCII//TRANSLIT', $str);
  70.  
  71. // Niektóre francuskie i niemieckie litery pozostawiają po takiej konwersji (jak powyżej)
  72. // dodatkowe znaki. Poniższe dwie linijki te znaki wycinają
  73.  
  74. $charsArr = array( '^', "'", '"', '`', '~');
  75. $str = str_replace( $charsArr, '', $str );
  76.  
  77. $return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($str))));
  78. return str_replace(' ', $replace, $return);
  79. }
  80.  
  81. $tylul1a=str2Url($tytul1);
  82.  
  83. echo $tylul1a;
  84.  
  85. mysql_query("INSERT INTO wp_posts (post_content, post_title, post_date, ID, post_name) VALUES ('".$tresc1."', '".$tytul1."', '".$date1."', '$export_id', '$tylul1a') ON DUPLICATE KEY UPDATE ID=VALUES(ID)") or die(mysql_error());
  86.  
  87. mysql_query("INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) VALUES ('$export_id', '3') ON DUPLICATE KEY UPDATE term_taxonomy_id=VALUES(term_taxonomy_id)") or die(mysql_error());
  88.  
  89.  
  90.  
  91.  
  92. ?>
mar1aczi
Nie obraź się, ale powinieneś zapoznać się z zasadami języka php - tworzenie funkcji, składnia itp.
Kod z funkcją powinien wyglądać tak (nie sprawdzałem poprawności wszystkich linii, poprawiłem jedynie "kolejność kodu" co do dopisanej funkcji:
  1. <?php
  2.  
  3. function str2url($str, $replace = "-" ){
  4.  
  5. // konwersja znaków utf do znaków podstawowych
  6. $str = iconv('UTF- 8', 'ASCII//TRANSLIT', $str);
  7.  
  8. // Niektóre francuskie i niemieckie litery pozostawiają po takiej konwersji (jak powyżej)
  9. // dodatkowe znaki. Poniższe dwie linijki te znaki wycinają
  10.  
  11. $charsArr = array( '^', "'", '"', '`', '~');
  12. $str = str_replace( $charsArr, '', $str );
  13.  
  14. $return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($str))));
  15. return str_replace(' ', $replace, $return);
  16. }
  17.  
  18. $doc = new DOMDocument("1.0", "iso-8859-2");
  19. $doc->load("feeds.xml");
  20. $books = $doc->getElementsByTagName('feed');
  21. foreach ($books as $feed) {
  22. echo $feed->nodeValue, PHP_EOL;
  23. // echo $feed -> getAttribute('id').'<br>';
  24. $path = $feed -> getAttribute('path');
  25. // echo $feed -> getAttribute('cat_id').'<br>';
  26. //echo $path;
  27.  
  28. //$path1
  29.  
  30. $path1 = substr($path, "1");
  31. $path1.'<br>';
  32.  
  33. $doc = new DOMDocument("1.0", "iso-8859-2");
  34.  
  35. $doc->load("$path1");
  36.  
  37. $feed = $doc->getElementsByTagName( "feed" );
  38. foreach ($feed as $matches)
  39. {
  40. $title = $matches->getElementsByTagName( "title" );
  41. $tytul = $title->item(0)->nodeValue;
  42.  
  43. $content = $matches->getElementsByTagName( "content" );
  44. $tresc = $content->item(0)->nodeValue;
  45.  
  46. $id = $matches->getElementsByTagName( "id" );
  47. $export_id = $id->item(0)->nodeValue;
  48.  
  49. $add_date = $matches->getElementsByTagName( "add_date" );
  50. $date = $add_date->item(0)->nodeValue;
  51.  
  52.  
  53. $date;
  54.  
  55. // echo "$tytul";
  56. echo "<br>";
  57. echo "<br>";
  58. echo "<br>";
  59. "$tresc";
  60.  
  61.  
  62.  
  63. $tytul1 = addslashes($tytul);
  64. $tresc1 = addslashes($tresc);
  65. $date1 = addslashes($date);
  66.  
  67. mysql_connect("xxx","xxx","xxx") or die(mysql_error());
  68. mysql_query("SET NAMES utf8");
  69.  
  70. $tresc1;
  71.  
  72. echo $tytul1;
  73.  
  74. $tylul1a=str2Url($tytul1);
  75.  
  76. echo $tylul1a;
  77.  
  78. mysql_query("INSERT INTO wp_posts (post_content, post_title, post_date, ID, post_name) VALUES ('".$tresc1."', '".$tytul1."', '".$date1."', '$export_id', '$tylul1a') ON DUPLICATE KEY UPDATE ID=VALUES(ID)") or die(mysql_error());
  79.  
  80. mysql_query("INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) VALUES ('$export_id', '3') ON DUPLICATE KEY UPDATE term_taxonomy_id=VALUES(term_taxonomy_id)") or die(mysql_error());
  81.  
  82. }
  83.  
  84. ?>
Frugo75
Dziękuje. Nie obrazam sie, bo mam swiadomosc, ze jeszcze duzo musze sie nauczyc.
Jeszcze raz bardzo dziekuje Ci za pomoc. Teraz wszystko smiga jak nalezy. Dzieki Tobie juz wiem gdzie robilem blad.
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.