Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][MySQL][PHP]Jak pobrać dane do RSS w odpowiednim formacie?
Forum PHP.pl > Forum > Przedszkole
rel
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>
timon27
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();
rel
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.
nospor
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.
rel
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
nospor
var_dump($wynik);
rel
nadal to samo, tzn ten sam error
nospor
Dobra.... inaczej.... pokaz plik test.php i zaznacz dokladnie ktora to linia nr 2...
rel
  1. <?php
  2. $wiersz = $wynik->fetch_assoc();
  3. var_dump($wynik);
  4. ?>

2 linia to 2, tak jak widać...
nospor
facepalmxd.gif
Ale o czym ty mowisz?questionmark.gifquestionmark.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?
rel
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'];
nospor
POkaz kod po zmianach, bo juz widze ze prostego var_dump bez bledu nie potrafisz dodac, pomimo ze podalem jak masz to zrobic :/
rel
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. ?>
nospor
A w jaki sposob ty w ogole odpalasz moj_rss.php ?
rel
Wywołuję go www.oglaszajtu.pl/moj_rss.php
nospor
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
rel
  1. </html>


To pokazuje firebug
nospor
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++)
rel
Zwraca mi to:

Kod
NULL Jesli tego nie widzisz, znaczy ze edytujesz zly plik :/
nospor
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
rel
Cytat(nospor @ 10.02.2014, 13:29:05 ) *
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


Wywaliłem Twój kod, tzn vard_dump i tę petlę for co sprawdzała i plik .xml został utworzony tylko znowu pusty.
nospor
Pokaz dokladnie jaki zostal utworzony plik .xml..... pusty ze nic w sobie totalnie nie ma czy ze ma puste wartosci? Pokaz dokladnie.
rel
[xml<?xml version="1.0" encoding="utf-8"?><trovit><ad> </ad></trovit>[/xml]
nospor
facepalmxd.gif

A z kodu co pokazales na samym poczatku wynikalo, ze plik tworzy ci sie z id, title itp ale z pustymi, co sugerowalo ze petla dziala......grrrrr:/

Z tego wszystkiego wynika, ze twoje zapytanie nie zwraca ci rekordow, wiec nic dziwnego ze nic ci nie generuje. ALbo masz blad zapytania, albo bazy. Sprawdz. Tylko tym razem sie skup co robisz. Tyle postow na darmo......
rel
No tak, tylko jak to sprawdzić, bo dane do bazy podałem ok, na 100%.

Co do nazw rekodrów? No własnie, podaję ich nazwy dokładnie takie jakie sa w bazie, sprawdzałem setki razy.

A czy tak na marginesi emożesz powiedzieć jak zaciągnać dane z bazy (wybrane) ale tylko te, które w jednej z kolumn mają opkreslone "category_id"?

Tzn zakłądam, ze chcę pobrać: wszystkie dane z bazy X, które w kolumnie category_id mają np. 100
nospor
Cytat
No tak, tylko jak to sprawdzić, bo dane do bazy podałem ok, na 100%.
Masz blad bazy. Wyswietl go sobie. Zajrzyj do dokuemtnacji tego czegos do bazy co uzywasz. Tam bedziesz mial napisane jak pobrac wygenerowany blad

http://pl1.php.net/manual/en/mysqli.error.php
Crozin
Tyle postów, a Ty @norspor jeszcze nie przypomniałeś że XML-a nie generuje się ręcznie? smile.gif Prędzej czy później pojawi się w którymś z teksów sekwencja zamykająca blok CDATA i będzie płacz, że z pliku nie da się korzystać.

@rel: DOMDocument
nospor
@Crozin, ale to nie jest glownym problemem. Glownym problemem jest to, ze nie pobeirają sie dane. A co on potem z nimi zrobi to jego sprawa.
Rel ma niesamowite problemy z podstawami i mieszanie mu jeszcze DOMDocument dobije go do reszty....
rel
  1. <?php
  2. $mysqli = new mysqli("localhost", "_admin", "pass", "baza");
  3.  
  4. /* check connection */
  5. if ($mysqli->connect_errno) {
  6. printf("Connect failed: %s\n", $mysqli->connect_error);
  7. exit();
  8. }
  9.  
  10. if (!$mysqli->query("SET a=1")) {
  11. printf("Errormessage: %s\n", $mysqli->error);
  12. }
  13. /* close connection */
  14. $mysqli->close();
  15. ?>


Jak sprawdzić to za pomoca powyższego? Nie kumam tego.
nospor
Nom tylko ze musisz to prawidlowo wstawic w swoj kod wink.gif

rel
Sprawdzałem sobie tym kodem:

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


Plik mi niby tworzy, bo po wywyołaniu go ręcznie zwraca mi błąd:

Kod
Błąd przetwarzania XML: nieprawidłowo sformowany
Obszar: http://www.oglaszajtu.pl/moj_rss.xml
Numer wiersza: 1, kolumna 67:<?xml version="1.0" encoding="ISO-8859-2"?><trovit><ad><item><id54</id><url>http://oglaszajtu.pl/ogloszenia/54/Dom Wieruszów, pow. 150m2</url><title>Dom Wieruszów, pow. 150m2</title><type>4</type><content><p>Ogłoszenie testowe!</p>


Co może być teraz nie tak? Bo skoro tworzy jakiś plik, tzn nadpisuje jego zawartosć, to coś już do przodu mam. Problem polega na tym, że nie dość, że wywala bład na temat struktury pliku, chyba, to jeszcze pobiera tylko jedno zamówienie z tabeli.
nospor
Tresc znacznikow XML nie moze zawierac roznych zastrzezonych znakow, takie jak < itp. Zainteresuj sie sekcją CDATA w xml
rel
Cytat(nospor @ 11.02.2014, 08:42:09 ) *
Tresc znacznikow XML nie moze zawierac roznych zastrzezonych znakow, takie jak < itp. Zainteresuj sie sekcją CDATA w xml


Dzięki za wyrozumiałosć i chęć pomocy.
CDATA - pominąłem to, żeby sprawdzić tylko czy plik tworzy.

A co do pętli for, to czy w momencie gdy jej nie wykona, to pobierze tylko jedno ogłoszenie czy zadnego?

nospor - poszło, zerknij, jeśli oczywiscie tylko cię to interesuje. Plik jest tworzony, pobiera wszystkie potrzebne ogłoszenia, jedyne co, to musze wprowadzić coś takiego, żeby pobierało nie tylko category_id=140 ale i 141 - jak to moge połaczyć?
nospor
Do odbierania danych z zapytania powinienes uzywac WHILE.
Tu masz przyklad
http://pl1.php.net/manual/en/mysqli-result.fetch-assoc.php

co do kategorii to:

...category_id in (140,141)
rel
Cytat(nospor @ 11.02.2014, 09:16:11 ) *
Do odbierania danych z zapytania powinienes uzywac WHILE.
Tu masz przyklad
http://pl1.php.net/manual/en/mysqli-result.fetch-assoc.php

co do kategorii to:

...category_id in (140,141)


A jaki jest powód tego, że nie można użyć for w tym wypadku?
nospor
Mozna, ale WHILE jest ladniejsze i prostrze, nie trzeba dziko kombinowac jak z FOR.
rel
I jeszcze jedna sprawa.

W moj_rss.xml wyświetla mi znaczniki htmla, tzn <p> i <br/> - wiesz może jak to usunąć? Tzn chodzi o to, żeby moj_rss.xml pokazywał tylko dane czysto z bazy, bez htmlowych bo to zwala sprawę.
nospor
strip_tags()
rel
Pobieram dane do url z bazy, ale jest pewien kłopot, bo:

- pobieram to tym:


  1. $kanalRSS .= '<url><![CDATA[http://oglaszajtu.pl/ogloszenia/'.$wiersz['annoucement_id'].'/'.$wiersz['annoucement_title'].']]></url>';




co daje np.

Kod
http://oglaszajtu.pl/ogloszenia/54/[b]Dom Wieruszów, pow. 150m2[/b]



a powinno to wyglądać tak:


Kod
http://oglaszajtu.pl/ogloszenia/54/[b]dom-wieruszow-pow-150m2[/b]



czy ktoś ma może pomysł jak to uzdrowić?

Twego już strip_tags() nie załatwię, co?
nospor
Cytat
Twego już strip_tags() nie załatwię, co?
O jakim zalatwianiu mowisz?

Zas co do kresek - zamiast spacji, to musisz zamieniac wszystko co nie jest literą i cyfrą na -. Sluzy do tego preg_replace.
rel
Dałem tak:

  1. <?php// dane do ramy pliku .xml
  2. $kanalRSS = '<?xml version="1.0" encoding="ISO-8859-2"?>';
  3. $kanalRSS .= '<trovit>';
  4. $kanalRSS .= '<ad>';
  5.  
  6. // połaczenie z bazą danych
  7. $db = lacz_bd();
  8. //zapytanie określające dane ktore powinny byc pobrane z tabeli
  9. // teraz pobierzmy wszystkie dane spelniajace warunek category_id=140
  10. $zapytanie = "SELECT * FROM announcements WHERE category_id in (140,141,142,143,144)";
  11. $wynik = $db->query($zapytanie);
  12. $ile_znalezionych = $wynik->num_rows;
  13. for ($i=0; $i <$ile_znalezionych; $i++)
  14. {
  15. $wiersz = $wynik->fetch_assoc();
  16. //tutaj generujemy zawartosc pliku .xml, ktora pobierana jest z tabeli announcements
  17. $kanalRSS .= '<item>';
  18. $kanalRSS .= '<id><![CDATA['.$wiersz['annoucement_id'].']]></id>';
  19. $kanalRSS .= '<url><![CDATA[http://oglaszajtu.pl/ogloszenia/'.$wiersz['annoucement_id'].'/'.$wiersz['annoucement_title'].']]></url>';
  20. $kanalRSS .= '<title><![CDATA['.$wiersz['annoucement_title'].']]></title>';
  21. $kanalRSS .= '<type><![CDATA['.$wiersz['annoucement_type'].']]></type>';
  22. $kanalRSS .= '<content><![CDATA['.$wiersz['annoucement_content'].']]></content>';
  23. //usuwamy znaczniki html ze wszystkich danych z tabeli
  24. $kanalRSS = strip_tags($kanalRSS, '<trovit><ad><id><url><title><type><content><![CDATA[]]>');
  25. $kanalRSS .= '<date><![CDATA['.$wiersz['annoucement_date_added'].']]></date>';
  26. $kanalRSS .= '</item>';
  27. }
  28. $kanalRSS .= ' </ad>';
  29. $kanalRSS .= '</trovit>';
  30. ?>


niestety coś jest nie tak, bo po wywołaniu .xmla z przegladarki widze to:

Kod
Błąd przetwarzania XML: nieprawidłowo sformowany
Obszar: http://oglaszajtu.pl/trovit_oglaszajtu.xml
Numer wiersza: 1, kolumna 72:<trovit><ad><id></id><url></url><title></title><type></type><content>Og￿oszenie testowe!
-----------------------------------------------------------------------^
nospor
strip_tags masz robic tylko i wylacznie na danej z bazy, a nie calym swoim XML..... no wlacz wkoncu myslenie.
rel
będzie to $zapytanie - dobrze rozumiem ten cały kod?
Ta zmienna pobiera wg okreslonego kryterium, czy się mylę?
nospor
$zapytanie zawiera TRESC ZAPYTANIA. Czy widzisz tam gdzies dane, ktore wkladasz do XML?
Dane ktore cie interesuja, to dane, ktore wkladasz do XML. Tu naprawde nie ma nad czym sie zastanawiac. Dane do XML wkladasz w konkretnym miejscu i nigdzie wiecej.
rel
Cytat(nospor @ 11.02.2014, 11:03:55 ) *
$zapytanie zawiera TRESC ZAPYTANIA. Czy widzisz tam gdzies dane, ktore wkladasz do XML?
Dane ktore cie interesuja, to dane, ktore wkladasz do XML. Tu naprawde nie ma nad czym sie zastanawiac. Dane do XML wkladasz w konkretnym miejscu i nigdzie wiecej.


Poddaję się, może i dla Ciebie myślenia nie właczam, ale próbowałem już każdej wersji, jaka tylko wydała mi się słuszna.

Jak dam $wiersz = string_tags($wiersz) to wywala mi xmla, ale wszedzie tam, gdzie mam .$wiersz['annoucement_id']. etc to tego nie wyświetla, wstawia tam A.

jakieś wyjątki, które nie powinny być usuniete trzeba wg Ciebie dac? Z tego wszystkiego wymyśliłem jedyną słuszną decyzję, żeby wywalić htmla z tego co w $wiersz...
nospor
$wiersz['annoucement_content'] to jest dana z bazy,to ją wstawiasz do xml. Naprawde nie wiesz co sam wstawiasz do XML?

$kanalRSS .= '<content><![CDATA['.strip_tags($wiersz['annoucement_content']).']]></content>';
Analogicznie pozostale dane.
rel
Cytat(nospor @ 11.02.2014, 11:29:44 ) *
$wiersz['annoucement_content'] to jest dana z bazy,to ją wstawiasz do xml. Naprawde nie wiesz co sam wstawiasz do XML?

$kanalRSS .= '<content><![CDATA['.strip_tags($wiersz['annoucement_content']).']]></content>';
Analogicznie pozostale dane.



Ja dawąłem tak:
$wiersz = strip_tags($wiersz, '[annoucement_id]') etc, i to chyba był błąd.

Dzięki.

Wypada tylko Ci podziękować, wiele mnie nauczyłeś, najwazniejsze, że kumam, co robiłem źle.
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.