Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [XML][PHP]Zapis danych w formacie xml
charles110
post 12.10.2011, 13:36:40
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.08.2011

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


Mam kod który zapisuje mi dane do pliku txt w formacie zwykłego tekstu. Zalezy mi żeby ta tres ktora jest w pliku txt zapisywala sie jako xml zebym pozniej mogł te dane wyswietlic na stronie w tabelce. Bede wdzieczny za pomoc.

  1. <?php
  2. $dane = date('Y-m-d H:i:s')."Log on:\r\n";
  3. $file = "test.txt";
  4. $fp = fopen($file, "a");
  5. flock($fp, 2);
  6. fwrite($fp, $dane);
  7. flock($fp, 3);
  8. fclose($fp);
  9. ?>
Go to the top of the page
+Quote Post
Swirek
post 12.10.2011, 15:19:58
Post #2





Grupa: Zarejestrowani
Postów: 221
Pomógł: 20
Dołączył: 4.05.2006
Skąd: Polska

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


Prześledź dokładnie jak ma wyglądać plik xml wstaw odpowiednie "klamry" <nazwa> itd i zapisz tak jak to robisz teraz ale w pliku xml


--------------------
Macho odpadacie ;) .
Go to the top of the page
+Quote Post
kpt_lucek
post 12.10.2011, 17:25:02
Post #3





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


  1. header('Content-type: application/xml; charset="utf-8"');


Polecam pogooglać i się doczytać.


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
charles110
post 12.10.2011, 22:37:26
Post #4





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.08.2011

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


Chce uzyskac taki plik xml zeby przy kazdym wywolaniu tego kodu php kolejno zapisywaly sie nastene wiersze w takiej postaci:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <rows>
  3. <row id="1">
  4. <cell>2011-10-04 11:16:15</cell>
  5. <cell>Log on</cell>
  6. <cell>user</cell>
  7. </row>
  8. <row id="2">
  9. <cell>2011-10-04 11:17:15</cell>
  10. <cell>Log on</cell>
  11. <cell>user1</cell>
  12. </row>
  13. <row id="3">
  14. <cell>2011-10-04 11:18:15</cell>
  15. <cell>Log on</cell>
  16. <cell>user2</cell>
  17. </row>
  18. </rows>


W tej chwili mam zapis do pliku txt w tej postaci:
2011-10-04 11:16:15 Log on user
2011-10-04 11:17:15 Log on user1
2011-10-04 11:18:15 Log on user2
Go to the top of the page
+Quote Post
peter13135
post 12.10.2011, 22:46:14
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


w czym problem ? użyj biblioteki simplexml albo jakiegoś xml writera i po sprawie. Poza tym, ten xml jest tak banalny, że wystarczy umiejętność łączenie stingów (kropką tongue.gif) oraz zapis i odczyt z pliku (file_get_contents i file_put_contents)


--------------------
:)
Go to the top of the page
+Quote Post
charles110
post 14.10.2011, 09:08:07
Post #6





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.08.2011

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


Ok zrobiłem pewien postep ,tylko nie wiem jak zrobić zeby tylko przy pierwszym uruchomieniu robil sie zapis
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <rows>

I przy kazdym kolejnym uruchomieniu te dane zapisywaly sie przed
  1. </rows>


Nie wiem tez jak zrobić zeby id sie zwiekszalo o 1 przy kazdym kolejnym uruchomieniu.

Moj kod:
  1. $a='<cell>';
  2. $b='</cell>';
  3. $c='<rows>';
  4. $c1='</rows>';
  5. $d='<row id="';
  6. $i=0;
  7. $d1=$i++;
  8. $d2='">';
  9. $d3='</row>';
  10. $dane ="" .$a ."Log on" .$b ." \r\n" .$a. $user .$b." \r\n" .$d3 ." \r\n";
  11. $dane1 = ''.$d .$d1 .$d2 ." \r\n".$a;
  12. $dane2 = date('Y-m-d H:i:s') .$b." \r\n";
  13. $file = "log.xml";
  14. $fp = fopen($file, "a");
  15. flock($fp, 2);
  16. fwrite($fp,$dane1);
  17. fwrite($fp,$dane2);
  18. fwrite($fp,$dane);
  19. flock($fp, 3);
  20. fclose($fp);


Ktoś pomoże??
Go to the top of the page
+Quote Post
kpt_lucek
post 14.10.2011, 09:36:20
Post #7





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


Pętla?

Wiadoma ilość powtórzeń:
  1. for($i=0;$i<500:$i++)
  2. {
  3. // jakieś coś
  4. }


a jak nie wiesz ile powtórzeń to:
  1. while($i!=$w)
  2. {
  3. // jakieś coś 2
  4. }



--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
charles110
post 14.10.2011, 10:04:12
Post #8





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.08.2011

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


Tak tylko ze ta petla wygeneruje mi od razu np 500 wpisow. A mi zalezy na tym zeby przy kazdym kolejnym zapisie do xml id ziwekszalo sie o 1.

I zeby ten zapis danych byl przed linia
  1. </rows>


Chyba ze wogole jakos inaczej mozna to zrobic?
Go to the top of the page
+Quote Post
kpt_lucek
post 14.10.2011, 10:57:53
Post #9





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


Jakoś problemu nie widzę, jeżeli operujesz TYLKO na plikach to:
1. stwórz sobie jakiś plik w którym trzymasz TYLKO I WYŁĄCZNIE ID np:

id.txt o zawartości:
Kod
158


2. Teraz, podczas odpalenia skryptu php generującego XML robisz coś takiego:
a ) czytasz zawartość pliku id.txt i tą zawartość zapisujesz do zmiennej, na przykład $id (w podanym przykładzie $id, a właściwie jej wartość będzie równa 158),
b ) tworzysz przykładowy kod(można oczywiście zmodyfikować):
  1. <?
  2. header('Content-type: application/xml; charset="utf-8"');
  3. //ładujesz treść "id.txt" do zmiennej $id
  4. echo'<?xml version="1.0" encoding="utf-8"?>'."\n";
  5. echo' <bla_bla>'."\n";
  6. echo' <cos_1>'."\n";
  7. echo' <cos_2>'.$zmienna.'</cos_2>'."\n";
  8. $i=3;
  9. while($i<$id)
  10. {
  11. echo' <cos_'.$i.'>'.$zmienna.'</cos_'.$i.'>'."\n";
  12. $i++;
  13. }
  14. echo' </cos_1>'."\n";
  15. echo' <coss_1>'."\n";
  16. // czymś to wypełniasz...
  17. echo' </coss_1>'."\n";
  18. echo' </bla_bla>'."\n";
  19. // jak skończyłeś, czy też zapisałeś plik zwiększasz $id o 1 i zapisujesz do pliku id.txt nowe id
  20. ?>


Co wsadzisz do środka to Twoja inwencja, to jest tylko przykład - w tej formie możesz wyświetlić go na stronie

TUTAJ masz przykład.

Oczywiście plik id.txt jest opcjonalny, możesz stworzyć plik .php i w nim trzymać zmienną, oraz ładować ją poprzez
  1. <?require("twoj_plik.php");?>

Musisz pamiętać o tym aby po każdym wywołaniu pliku generującego, a właściwie po zakończeniu jego pracy zwiększać/zmniejszać (czy co tam uznasz za stosowne) zmienną w tym pliku (oczywiście skryptem, chyba że wolisz ręcznie smile.gif ).

// MASS EDIT

Przykładowo kod w podanym wyżej linku wygląda tak:
  1. <?
  2. header('Content-type: application/xml; charset="utf-8"');
  3. $zmienna = "bla bla bla";
  4. $id = 10;
  5. echo'<?xml version="1.0" encoding="utf-8"?>'."\n";
  6. echo' <bla_bla>'."\n";
  7. echo' <cos_1>'."\n";
  8. echo' <cos_2>'.$zmienna.'</cos_2>'."\n";
  9. $i=3;
  10. while($i!=$id)
  11. {
  12. echo' <cos_'.$i.'>'.$zmienna.'</cos_'.$i.'>'."\n";
  13. $i++;
  14. }
  15. echo' </cos_1>'."\n";
  16. echo' <coss_1>'."\n";
  17. $i=3;
  18. while($i!=$id)
  19. {
  20. echo' <cos_'.$i.'>'.$zmienna.'</cos_'.$i.'>'."\n";
  21. $i++;
  22. }
  23. echo' </coss_1>'."\n";
  24. echo' </bla_bla>'."\n";
  25. // jak skończyłeś, czy też zapisałeś plik zwiększasz $id o 1 i zapisujesz do pliku id.txt nowe id
  26. ?>


a efektem jest:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <bla_bla>
  3. <cos_1>
  4. <cos_2>bla bla bla</cos_2>
  5. <cos_3>bla bla bla</cos_3>
  6. <cos_4>bla bla bla</cos_4>
  7. <cos_5>bla bla bla</cos_5>
  8. <cos_6>bla bla bla</cos_6>
  9. <cos_7>bla bla bla</cos_7>
  10. <cos_8>bla bla bla</cos_8>
  11. <cos_9>bla bla bla</cos_9>
  12. </cos_1>
  13. <coss_1>
  14. <cos_3>bla bla bla</cos_3>
  15. <cos_4>bla bla bla</cos_4>
  16. <cos_5>bla bla bla</cos_5>
  17. <cos_6>bla bla bla</cos_6>
  18. <cos_7>bla bla bla</cos_7>
  19. <cos_8>bla bla bla</cos_8>
  20. <cos_9>bla bla bla</cos_9>
  21.  
  22. </coss_1>
  23. </bla_bla>


Tak na przyszłość - jeżeli skrobiesz XML ręcznie (tak jak w tym przykładzie) to odradzam coś takiego:
  1. <?
  2. $a='<cell>';
  3. $b='</cell>';
  4. $c='<rows>';
  5. $c1='</rows>';
  6. $d='<row id="';
  7. ?>

I proponuję zastąpić to podanym przeze mnie przykładem. Dlaczego? Odpowiedź jest prosta, nie zgubisz się w znacznikach (w wypadku błędu którego ciężko znaleźć).

Ten post edytował kpt_lucek 14.10.2011, 11:13:00


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
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: 16.05.2025 - 06:53