Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][MySQL][PHP]PHP - generowanie pliku XML - dane z MYSQL
Forum PHP.pl > Forum > Przedszkole
rf13
Witam.
Jestem początkujący w tematyce PHP. Napisałem skrypt, który pobiera dane z bazy i chciałbym je zapisać do pliku XML.
Jednak przed zapisem danych do pliku chciałbym je wcześniej wyświetlić, aby zweryfikować.
Skrypt niestety nie wyświetla linii np. <?xml version="1.0" encoding="utf-8"?> oraz pozostałych tagów i danych pobranych z bazy.
Przekopałem forum i googla -> wszędzie podawane skrypty budowane były w podobny sposób.
Wydaje mi się, że problem dotyczy m.in. krótkich tagów ( <? ?>). Próbowałem za pomocą pliku .htaccess zminić ustawienie na Off jednak wyswietlał się później błąd 500.
Proszę o wskazówkę co należy poprawić, aby uzyskać format pliku XML z właściwym formatowaniem. Poniżej skrypt.

  1. if(isset($_POST['submitted']))
  2. {
  3.  
  4.  
  5. require_once('mysqli.php');
  6.  
  7. $q = "SELECT ...";
  8.  
  9.  
  10. $r = mysqli_query($dbc,$q);
  11.  
  12.  
  13.  
  14. if($r)
  15. {
  16.  
  17. #Układ pliku XML
  18. echo '<?xml version="1.0" encoding="utf-8"?>'."\n";
  19.  
  20. echo '<X>'."\n";
  21.  
  22. while($row = mysqli_fetch_array($r,MYSQLI_ASSOC))
  23. {
  24.  
  25. echo '<X1>'."\n";
  26. echo '<X2><![CDATA['.$row['id'].']]></X2>'."\n";
  27. echo '<X3><![CDATA['.$row['opis'].']]></X3>'."\n";
  28. echo '<X4><![CDATA['.$row['miasto'].']></X4>'."\n";
  29. echo '</X1>'."\n";
  30.  
  31. }
  32. echo '</X>';
  33. }
  34.  
  35.  
  36. } //koniec funkcji if isset
Daimos
  1. <?
  2. if(isset($_POST['submitted']))
  3. {
  4. require_once('mysqli.php');
  5. $q = "SELECT ...";
  6. $r = mysqli_query($dbc,$q);
  7. if($r)
  8. {
  9. #Układ pliku XML
  10. $xml = '<?xml version="1.0" encoding="utf-8"?>'."\n";
  11. $xml .= '<X>'."\n";
  12. while($row = mysqli_fetch_array($r,MYSQLI_ASSOC))
  13. {
  14. $xml .= '<X1>'."\n";
  15. $xml .= '<X2><![CDATA['.$row['id'].']]></X2>'."\n";
  16. $xml .= '<X3><![CDATA['.$row['opis'].']]></X3>'."\n";
  17. $xml .= '<X4><![CDATA['.$row['miasto'].']></X4>'."\n";
  18. $xml .= '</X1>'."\n";
  19. }
  20. $xml .= '</X>';
  21. }
  22. } //koniec funkcji if isset
  23.  
  24. // $xml zapisujesz, a wyswietlasz z uzyciem htmlspecialchars:
  25. echo '<pre>';
  26. echo '</pre>';
rf13
Witaj,

poprawiłem tylko linię:

26. echo htmlspecialchars($html); na echo htmlspecialchars($xml);

Wszystko działa tak jak należy. Dziękuję za pomoc.

Przy okazji mam pytanie. Jest spora ilość danych pobieranych z bazy i generowanych przez ten skrypt.
Czy zapisywać dane do pliku po każdej pętli czy zapis dać po całkowitym wykonaniu pętli ?
Co będzie mniej obciążać serwer ?

pzdr.
amii
Daj zapis po wykonaniu pętli a jak duża ilość jest pobierana to my nie wiemy zależy od tego ile danych pobiera zapytanie.
XeoProject
Hej,

Chciałem skorzystać z rozwiązania, jednakże nie działa :/

Nie wiem co źle zrobiłem ponieważ pod wrzuceniu pliku php do przeglądarki widzę białą kartę a w kodzie tylko znaczniki <pre></pre>

oto kod:

  1. <?
  2. if(isset($_POST['submitted'])) {
  3. function pobierzDane() {
  4. include "../functions/database.php";
  5. include "../functions/config.php";
  6. DB_connect();
  7. $zmienna2 = array();
  8. $SQL = 'SELECT s.x, s.x1, s.sr_CPC, s.x2 from slowa_kluczowe s';
  9. mysql_query(' SET NAMES utf8 ');
  10. $ret = mysql_query($SQL);
  11. if($ret)
  12. {
  13. #Układ pliku XML
  14. $xml = '<?xml version="1.0" encoding="utf-8"?>'."\n";
  15. $xml .= '<chart>'."\n";
  16. $xml .= ' <!-- <message bg_color="#BBBB00" text_color="#FFFFFF"><![CDATA[You can broadcast any message to chart from data XML file]]></message> -->'."\n";
  17. $xml .= ' <graphs>'."\n";
  18. $xml .= ' <graph gid="0">'."\n";
  19. while($row = mysql_fetch_array($ret))
  20. {
  21. $xml .= ' <point x="154" y="45" cpc="<![CDATA['.$row['x1'].']]>" qs="<![CDATA['.$row['x'].']]>" keyword="<![CDATA['.$row['x2'].']]>"></point>';
  22. }
  23. $xml .= ' </graph>'."\n";
  24. $xml .= ' <graphs>'."\n";
  25. $xml .= '</chart>';
  26. }
  27. }
  28. }
  29. echo '<pre>';
  30. echo '</pre>';
  31. ?>


Finalnie potrzebuję wygenerować xml'a z danych mysql w w/w składni, ale męczę się z tym już od kilu wieczorów z pomocą Googla ale nic nie wydzi :/

Czy ktoś może mi pomóc?

Będę bardzo wdzięczny smile.gif


Cytat(XeoProject @ 7.07.2011, 23:49:24 ) *
Hej,

Chciałem skorzystać z rozwiązania, jednakże nie działa :/

Nie wiem co źle zrobiłem ponieważ pod wrzuceniu pliku php do przeglądarki widzę białą kartę a w kodzie tylko znaczniki <pre></pre>

oto kod:

  1. <?
  2. if(isset($_POST['submitted'])) {
  3. function pobierzDane() {
  4. include "../functions/database.php";
  5. include "../functions/config.php";
  6. DB_connect();
  7. $zmienna2 = array();
  8. $SQL = 'SELECT s.x, s.x1, s.sr_CPC, s.x2 from slowa_kluczowe s';
  9. mysql_query(' SET NAMES utf8 ');
  10. $ret = mysql_query($SQL);
  11. if($ret)
  12. {
  13. #Układ pliku XML
  14. $xml = '<?xml version="1.0" encoding="utf-8"?>'."\n";
  15. $xml .= '<chart>'."\n";
  16. $xml .= ' <!-- <message bg_color="#BBBB00" text_color="#FFFFFF"><![CDATA[You can broadcast any message to chart from data XML file]]></message> -->'."\n";
  17. $xml .= ' <graphs>'."\n";
  18. $xml .= ' <graph gid="0">'."\n";
  19. while($row = mysql_fetch_array($ret))
  20. {
  21. $xml .= ' <point x="154" y="45" cpc="<![CDATA['.$row['x1'].']]>" qs="<![CDATA['.$row['x'].']]>" keyword="<![CDATA['.$row['x2'].']]>"></point>';
  22. }
  23. $xml .= ' </graph>'."\n";
  24. $xml .= ' <graphs>'."\n";
  25. $xml .= '</chart>';
  26. }
  27. }
  28. }
  29. echo '<pre>';
  30. echo '</pre>';
  31. ?>


Finalnie potrzebuję wygenerować xml'a z danych mysql w w/w składni, ale męczę się z tym już od kilu wieczorów z pomocą Googla ale nic nie wydzi :/

Czy ktoś może mi pomóc?

Będę bardzo wdzięczny smile.gif


Czy nikt nie jest w stanie mi pomóc? sad.gif
kudlatypawelek
Po głównym "ifie" ze sprawdzaniem zmiennej $_POST wstawiasz definicję funkcji, a w niej kod. Jeżeli już tak chcesz zrobić to def. funkcji napisz przed ifem, a wewnątrz warunku ją wywołaj poprzez pobierzDane(). Albo żeby było prościej zlikwiduj /function pobierzDane() {...}/, a zostaw sam kod operacji.

Poza tym echo htmlspecialchars($html); zmień na: echo htmlspecialchars($xml);
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.