Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][XML] Dane z FTP do MySQL
Frugo75
post 14.01.2014, 13:37:49
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
mar1aczi
post 14.01.2014, 13:40:18
Post #2





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


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


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Frugo75
post 14.01.2014, 13:48:42
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
mar1aczi
post 14.01.2014, 14:06:02
Post #4





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


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


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Frugo75
post 14.01.2014, 21:32:48
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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());
Go to the top of the page
+Quote Post
Turson
post 14.01.2014, 22:16:18
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


VALUES ('".$tresc."', '".$tytul."')
Go to the top of the page
+Quote Post
Frugo75
post 14.01.2014, 22:25:56
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Turson
post 14.01.2014, 22:29:39
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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

Ten post edytował Turson 14.01.2014, 22:30:14
Go to the top of the page
+Quote Post
Frugo75
post 15.01.2014, 19:57:22
Post #9





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Frugo75 15.01.2014, 14:16:43
Go to the top of the page
+Quote Post
mar1aczi
post 15.01.2014, 20:23:01
Post #10





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


getElementsByTagName
Pierwszy przykład na powyższej stronie wink.gif


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Frugo75
post 15.01.2014, 20:35:31
Post #11





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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;)
Go to the top of the page
+Quote Post
mar1aczi
post 15.01.2014, 20:38:47
Post #12





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


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.


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Frugo75
post 18.01.2014, 10:25:07
Post #13





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
mar1aczi
post 18.01.2014, 13:48:59
Post #14





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Funkcję str2url() wyjmij poza pętlę foreach. Sprawdź poprawność zamknięcia nawiasów klamrowych: linia 87 i 89. Jest o jeden za dużo.


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Frugo75
post 18.01.2014, 14:20:35
Post #15





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
mar1aczi
post 18.01.2014, 19:36:46
Post #16





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Pokaż kod po naniesionych poprawkach.


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Frugo75
post 18.01.2014, 20:08:04
Post #17





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
mar1aczi
post 18.01.2014, 23:47:52
Post #18





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował mar1aczi 18.01.2014, 23:48:20


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Frugo75
post 19.01.2014, 10:24:27
Post #19





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 02:55