Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [XML][MySQL][PHP]Jak pobrać dane do RSS w odpowiednim formacie?
rel
post
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


Chciałem sobie zrobić automat do generowania pliku dla multiwyszukiwarki, tylko nie za bardzo potrafię to zrobić. Otóż plik powinien miec postać:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <trovit>
  3. <ad>
  4. <id><![CDATA[.....]]></id>
  5. <url><![CDATA[http://www.twojadomena.pl/ad/.....]]></url>
  6. <title><![CDATA[....tresc tytulu ogloszenia....]]></title>
  7. <type><![CDATA[....typ ogloszenia...]]></type>
  8. <content><![CDATA[....opis ogloszenia....]]></content>
  9. <date><![CDATA[....data dodania i godzina ....]]></date>
  10. </ad>
  11.  
  12. <ad>
  13. <id><![CDATA[.....]]></id>
  14. <url><![CDATA[http://www.twojadomena.pl/ad/.....]]></url>
  15. <title><![CDATA[....tresc tytulu ogloszenia....]]></title>
  16. <type><![CDATA[....typ ogloszenia...]]></type>
  17. <content><![CDATA[....opis ogloszenia....]]></content>
  18. <date><![CDATA[....data dodania i godzina ....]]></date>
  19. </ad>
  20.  
  21. <ad>
  22. <id><![CDATA[.....]]></id>
  23. <url><![CDATA[http://www.twojadomena.pl/ad/.....]]></url>
  24. <title><![CDATA[....tresc tytulu ogloszenia....]]></title>
  25. <type><![CDATA[....typ ogloszenia...]]></type>
  26. <content><![CDATA[....opis ogloszenia....]]></content>
  27. <date><![CDATA[....data dodania i godzina ....]]></date>
  28. </ad>


W jaki sposób zabrać sie do pobierania danych z bazy, aby plik miał odpowiednio zadaną postać? Przyznam, że zupełnie nie mam na to pomysłu. Każde ogłoszenie musiałoby się zapisac włąsnie w tagach <ad>...</ad>

Ten post edytował rel 9.01.2014, 14:09:48
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 19)
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


Nie za bardzo rozumiem z czym masz problem.
Przecież możesz linijka po linijce tworzyć plik jak każdy inny.

A dla ułatwienia:
  1. $xml = new XMLWriter();
  2. $xml->openURI('nazwapliku.xml');
  3. $xml->startDocument('1.0','UTF-8');
  4. $xml->startElement('ad');
  5. $xml->writeElement('id', ...dane...);
  6. $xml->endElement(); //ad
  7. $xml->endDocument();
  8. $xml->flush();
Go to the top of the page
+Quote Post
rel
post
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


wow, zupełnie nie rozumiem Twojej podpowiedzi...tak n amarginesie, to próbuję swoich sił, jutro zapodam co wymyśliłem.

Zrobiłem to tak:

1. Utworzyłem moj_rss.xml o zawartości:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <trovit>
  3. <ad>
  4. <id><![CDATA[]]></id>
  5. <url><![CDATA[]]></url>
  6. <title><![CDATA[]]></title>
  7. <type><![CDATA[]]></type>
  8. <content><![CDATA[]]></content>
  9. <date><![CDATA[]]></date>
  10. </ad>
  11. </trovit>


2. Teraz moj_rss.php, zawartość to:

  1. <?php
  2. function lacz_bd()
  3. {
  4. $db = new mysqli('localhost', 'admin', 'pass', 'baza');
  5. if (! $db)
  6. return false;
  7. $db->autocommit(TRUE);
  8. return $db;
  9. }
  10. // tutaj podajemy dane co do xml
  11. $kanalRSS= '<?xml version="1.0" encoding="utf-8"?>';
  12. $kanalRSS .= '<trovit>';
  13. $kanalRSS .= '<ad>';
  14. // połaczenie z bazą
  15. $db = lacz_bd();
  16. //zapytanie określające jakie dane ma mieć kanał RSS
  17. // pobierzmy teraz ogłoszneia z tabeli annoucements, niech będzie ostatnie 5
  18. $zapytanie = "SELECT * FROM annoucements ORDER BY data DESC LIMIT 5";
  19. $wynik = $db->query($zapytanie);
  20. $ile_znalezionych = $wynik->num_rows;
  21. for ($i=0; $i <$ile_znalezionych; $i++)
  22. {
  23. $wiersz = $wynik->fetch_assoc();
  24. $wpis_id = $wiersz['annoucement_id'];
  25. //Generujemy typową konstrukcję XML z danymi z bazy danych
  26. $kanalRSS .= '<item>';
  27.  
  28. $kanalRSS .= '<id><![CDATA['.$wiersz['annoucement_id'].']]></id>';
  29. $kanalRSS .= '<url><![CDATA[http://domena.pl/ogloszenia/'.$wiersz['annoucement_id'].'/'.$wiersz['annoucement_title'].']]></url>';
  30. $kanalRSS .= '<title><![CDATA['.$wiersz['annoucement_title'].']]></title>';
  31. $kanalRSS .= '<type><![CDATA['.$wiersz['annoucement_type'].']]></type>';
  32. $kanalRSS .= '<content><![CDATA['.$wiersz['annoucement_content'].']]></content>';
  33. $kanalRSS .= '<date><![CDATA['.$wiersz['annoucement_date_added'].']]></date>';
  34. $kanalRSS .= '</item>';
  35. }
  36. $kanalRSS .= ' </ad>';
  37. $kanalRSS .= '</trovit>';
  38. //Zapisujemy wygenerowany kod XML do pliku moj_rss.xml
  39. $fp = fopen('moj_rss.xml','w');
  40. fwrite($fp,$kanalRSS);
  41. fclose($fp);
  42. ?>


No i niestety kupa, tzn nie generuje mi pliku moj_rss.xml z zawartościami, które chciałem pobrać. Wywala mi tylko same znaczniki, co powaliłem, podpowie ktoś?

Chyba się poddam, bo próbowałem wszystkiego i pobrać dane mogę bez problemu, nie potrafię jedynie zapisać tego do pliku o rozszerzeniu .xml, który będzi eposiadał określoną strukturę znaczników dla multiwyszukiwarki.

Pobieram za pomocą:

  1. <?php
  2.  
  3. $sql_host = 'localhost';
  4. $sql_user = 'userek';
  5. $sql_password = 'poprawne_haslo';
  6. $sql_baza = 'poprawna_nazwa_bazy';
  7.  
  8. if (mysql_connect($sql_host, $sql_user, $sql_password) and mysql_select_db($sql_baza)) {
  9. $zapytanie = mysql_query("SELECT * FROM nazwa_tabeli");
  10. if ($zapytanie) {
  11.  
  12. while ($wynik = mysql_fetch_array($zapytanie)) {
  13. $wynik["annoucement_title"];
  14. $wynik["annoucement_city"];
  15. }}}
  16.  
  17. ?>


Dziękitemu bez problemu wyciąga z tabeli tytuł i miasto. Ale nie mogę już zapiać tego do określonego pliku.

Aj i muszę znowu poprosić Was o pomoc.

Plik ma nadane chmody 777 i nic.
Co jest nie tak? może ktoś zerknać na mój kod?

daję jak wyżej
moj_rss.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <trovit>
  3. <ad>
  4. <id><![CDATA[]]></id>
  5. <url><![CDATA[]]></url>
  6. <title><![CDATA[]]></title>
  7. <type><![CDATA[]]></type>
  8. <content><![CDATA[]]></content>
  9. <date><![CDATA[]]></date>
  10. </ad>
  11. </trovit>


moj_rss.php
  1. <?php
  2. function lacz_bd()
  3. {
  4. $db = new mysqli('localhost', '_admin', 'pass', 'baza');
  5. if (! $db)
  6. return false;
  7. $db->autocommit(TRUE);
  8. return $db;
  9. }
  10. // tutaj podajemy dane co do xml
  11. $kanalRSS= '<?xml version="1.0" encoding="utf-8"?>';
  12. $kanalRSS .= '<trovit>';
  13. $kanalRSS .= '<ad>';
  14. // połaczenie z bazą
  15. $db = lacz_bd();
  16. //zapytanie określające jakie dane ma mieć kanał RSS
  17. // pobierzmy teraz ogłoszneia z tabeli annoucements, niech będzie ostatnie 10
  18. $zapytanie = "SELECT * FROM announcements ORDER BY data DESC LIMIT 10";
  19. $wynik = $db->query($zapytanie);
  20. $ile_znalezionych = $wynik->num_rows;
  21. for ($i=0; $i <$ile_znalezionych; $i++)
  22. {
  23. $wiersz = $wynik->fetch_assoc();
  24. $wpis_id = $wiersz['annoucement_id'];
  25. //Generujemy typową konstrukcję XML z danymi z bazy danych
  26. $kanalRSS .= '<item>';
  27.  
  28. $kanalRSS .= '<id><![CDATA['.$wiersz['annoucement_id'].']]></id>';
  29. $kanalRSS .= '<url><![CDATA[http://oglaszajtu.pl/ogloszenia/'.$wiersz['annoucement_id'].'/'.$wiersz['annoucement_title'].']]></url>';
  30. $kanalRSS .= '<title><![CDATA['.$wiersz['annoucement_title'].']]></title>';
  31. $kanalRSS .= '<type><![CDATA['.$wiersz['annoucement_type'].']]></type>';
  32. $kanalRSS .= '<content><![CDATA['.$wiersz['annoucement_content'].']]></content>';
  33. $kanalRSS .= '<date><![CDATA['.$wiersz['annoucement_date_added'].']]></date>';
  34. $kanalRSS .= '</item>';
  35. }
  36. $kanalRSS .= ' </ad>';
  37. $kanalRSS .= '</trovit>';
  38. //Zapisujemy wygenerowany kod XML do pliku moj_rss.xml
  39. $fp = fopen('moj_rss.xml','w');
  40. fwrite($fp,$kanalRSS);
  41. fclose($fp);
  42. ?>


Wywołuję oglaszajtu.pl/moj_rss.xml i pusto, niczego nie importuje.

Ten post edytował rel 10.01.2014, 09:19:22
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Skoro wpisuja ci sie puste dane, to raczej dosc logiczne jest ,ze to:
$wiersz = $wynik->fetch_assoc();
zwraca cos innnego niz myslisz.... sprawdz co.....

  1. $wiersz = $wynik->fetch_assoc();
  2. var_dump($wiersz);

I wszystko bedzie jasne. Czemu to dla Was zawsze takie trudne sprawdzic co zawiera zmienna na ktorej operujecie?? Nie rozumiem tego.
Go to the top of the page
+Quote Post
rel
post
Post #5





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


Zwraca mi to:

Kod
Fatal error: Call to a member function fetch_assoc() on a non-object in /home/rafales/domains/oglaszajtu.pl/public_html/test.php on line 2
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




var_dump($wynik);
Go to the top of the page
+Quote Post
rel
post
Post #7





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


nadal to samo, tzn ten sam error
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Dobra.... inaczej.... pokaz plik test.php i zaznacz dokladnie ktora to linia nr 2...
Go to the top of the page
+Quote Post
rel
post
Post #9





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


  1. <?php
  2. $wiersz = $wynik->fetch_assoc();
  3. var_dump($wynik);
  4. ?>

2 linia to 2, tak jak widać...
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




(IMG:style_emoticons/default/facepalmxd.gif)
Ale o czym ty mowisz?(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif)

Ja sie caly czas odnosze do kodu moj_rss.php w ktorym ty generujesz swojego XML. W tym kodzie masz cos takiego w petli
$wiersz = $wynik->fetch_assoc();
I obok tego miales dodac var_dump($wiersz);

A ty ni z gruszki ni z pietruszki tworzysz nowy czysty plik test.php z dwu linijkowym kodem co ci podalem.... O co kaman?
Go to the top of the page
+Quote Post
rel
post
Post #11





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


nospor, zakręciłem się, to nie tak.

Zwraca mi błąd
Kod
Parse error: syntax error, unexpected T_VARIABLE in /home/rafales/domains/oglaszajtu.pl/public_html/moj_rss.php on line 25


linijka 25 to

  1. $wpis_id = $wiersz['annoucement_id'];


Ten post edytował rel 10.02.2014, 13:01:13
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




POkaz kod po zmianach, bo juz widze ze prostego var_dump bez bledu nie potrafisz dodac, pomimo ze podalem jak masz to zrobic :/
Go to the top of the page
+Quote Post
rel
post
Post #13





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


Masakra, ";" uciekł...:-)

teraz poprawiłem, ale po wywołaniu pliku moj_rss.php nic nie widać, wiec już wiem, że dlatego nie wypełnia mi pliku moj_rss.xml

Oto ostateczna wersja pliku moj_rss.php

  1. <?php
  2. function lacz_bd()
  3. {
  4. $db = new mysqli('localhost', 'rafales_admin', 'pass', 'baza');
  5. if (! $db)
  6. return false;
  7. $db->autocommit(TRUE);
  8. return $db;
  9. }
  10. // tutaj podajemy dane co do xml
  11. $kanalRSS= '<?xml version="1.0" encoding="utf-8"?>';
  12. $kanalRSS .= '<trovit>';
  13. $kanalRSS .= '<ad>';
  14. // połaczenie z bazą
  15. $db = lacz_bd();
  16. //zapytanie określające jakie dane ma mieć kanał RSS
  17. // pobierzmy teraz ogłoszneia z tabeli annoucements, niech będzie ostatnie 10
  18. $zapytanie = "SELECT * FROM announcements ORDER BY data DESC LIMIT 10";
  19. $wynik = $db->query($zapytanie);
  20. $ile_znalezionych = $wynik->num_rows;
  21. for ($i=0; $i <$ile_znalezionych; $i++)
  22. {
  23. $wiersz = $wynik->fetch_assoc();
  24. var_dump($wynik);
  25. $wpis_id = $wiersz['annoucement_id'];
  26. //Generujemy typową konstrukcję XML z danymi z bazy danych
  27. $kanalRSS .= '<item>';
  28.  
  29. $kanalRSS .= '<id><![CDATA['.$wiersz['annoucement_id'].']]></id>';
  30. $kanalRSS .= '<url><![CDATA[http://oglaszajtu.pl/ogloszenia/'.$wiersz['annoucement_id'].'/'.$wiersz['annoucement_title'].']]></url>';
  31. $kanalRSS .= '<title><![CDATA['.$wiersz['annoucement_title'].']]></title>';
  32. $kanalRSS .= '<type><![CDATA['.$wiersz['annoucement_type'].']]></type>';
  33. $kanalRSS .= '<content><![CDATA['.$wiersz['annoucement_content'].']]></content>';
  34. $kanalRSS .= '<date><![CDATA['.$wiersz['annoucement_date_added'].']]></date>';
  35. $kanalRSS .= '</item>';
  36. }
  37. $kanalRSS .= ' </ad>';
  38. $kanalRSS .= '</trovit>';
  39. //Zapisujemy wygenerowany kod XML do pliku moj_rss.xml
  40. $fp = fopen('moj_rss.xml','w');
  41. fwrite($fp,$kanalRSS);
  42. fclose($fp);
  43. ?>


Ten post edytował rel 10.02.2014, 13:04:40
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A w jaki sposob ty w ogole odpalasz moj_rss.php ?
Go to the top of the page
+Quote Post
rel
post
Post #15





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


Wywołuję go www.oglaszajtu.pl/moj_rss.php
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to nie mozliwe ze var_dump ci nic nie zwraca.... moglby nie zwracac, jakby petla FOR sie nie wykonala ani razu, a widac, ze sie wykonuje.
Zajrzyj w zrodlo strony w przelgadarce.... moze poprostu nie widzisz normalnie
Go to the top of the page
+Quote Post
rel
post
Post #17





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


  1. </html>


To pokazuje firebug
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Daj przed petla FOR kod
  1. $ile_znalezionych = $wynik->num_rows;
  2. var_dump($ile_znalezionych);
  3. die('Jesli tego nie widzisz, znaczy ze edytujesz zly plik :/');
  4. for ($i=0; $i <$ile_znalezionych; $i++)
Go to the top of the page
+Quote Post
rel
post
Post #19





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 9.01.2014

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


Zwraca mi to:

Kod
NULL Jesli tego nie widzisz, znaczy ze edytujesz zly plik :/
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czyli petla ani razu ci sie nie wykonuje, a co za tym idzie nie prawa utworzyc ci takiego pliku jak pisales.....

Ty ten plik .xml utworzyles recznie? Bo wynika ze tak, a twoj kod .php nie tworzy ci zadnego pliku....

Wywal te zmiany co ci podalem ostatnio, skasuj ten plik .xml co masz utworzony, a nastepnie odpal jeszcze raz swoj kod php. Pokaz wowczas dokladnie jaki plik utworzyl ci ten kod
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.08.2025 - 00:09