Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Mini konwerter - brak pomysłu
fastlone
post
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Cześć.
Próbuję na własne potrzeby wykonać pewien konwerter. Wrzuca się do niego tekst na wzór tego
Kod
<object name="delux object">
        <position>63.7165 -1533.3571 5.9444</position>
        <rotation>-3.0052 0.0000 0.0000</rotation>
        <model>8168</model>
    </object>

Ma on za zadanie wyciągnąć wszystkie te wartości, po czym dodać je do bazy danych.
Jak na razie udało mi się zrobić samo zamienianie tekstu na zmienne, lecz nie wiem, jak je wywoływać.
Kod:
  1. <?php
  2. $echo = $_POST['test'];
  3. $echo = preg_replace("#<position>(.*?)\</position>#si",'$position = "\\1";\n',$echo);
  4. $echo = preg_replace("#<rotation>(.*?)\</rotation>#si",'$rotation = "\\1";\n',$echo);
  5. $echo = preg_replace('#<object name="(.*?)">#si','$object = "\\1";\n',$echo);
  6. $echo = preg_replace("#<model>(.*?)</model>#si",'$model = "\\1";\n',$echo);
  7.  
  8.  
  9. echo "<form method='post'><textarea name='test'></textarea><input type='submit' value='Send' /></form>";
  10.  
  11. echo $echo;
  12. ?>

Co muszę zrobić, by udało się te zmienne "stworzyć" w php? (W sensie, by można je było wywołać wpisując np $object).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Zamiast preg_replace() użyj preg_match():
  1. <?php
  2. $echo = $_POST['test'];
  3. $echo = preg_match("#<position>(.*?)\</position>#si", $echo, $position);
  4. $position = $position[1];
  5. // i podobnie w przypadku pozostałych zmiennych
  6. echo "<form method='post'><textarea name='test'></textarea><input type='submit' value='Send' /></form>";
  7.  
  8. echo $position;
  9. ?>
Go to the top of the page
+Quote Post
elektrrrus
post
Post #3





Grupa: Zarejestrowani
Postów: 175
Pomógł: 18
Dołączył: 11.06.2007
Skąd: Koszalin/Poznań

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


A nie lepiej php-owe rozszerzenia xml-a?
Go to the top of the page
+Quote Post
fastlone
post
Post #4





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Już prawie działa kodzik, niestety nie działa mi w nim jedna rzecz
  1. <?php
  2. $test = $_POST['test'];
  3. $exploded = explode("</object>", $test);
  4.  
  5. for ($i=0;$i<count($exploded)-1;$i++)
  6. {
  7. $pos = $exploded[$i];
  8. $rot = $exploded[$i];
  9. $obj = $exploded[$i];
  10. $mode = $exploded[$i];
  11. $pos = preg_match("#<position>(.*?)\</position>#si", $pos, $position);
  12. $position = $position[1];
  13.  
  14. $rot = preg_match("#<rotation>(.*?)\</rotation>#si", $rot, $rotation);
  15. $rotation = $rotation[1];
  16.  
  17. $obj = preg_match('#<object name="(.*?)">#si', $obj, $object);
  18. $object = $object[1];
  19.  
  20. $mode = preg_match("#<model>(.*?)\</model>#si", $mode, $model);
  21. $model = $model[1];
  22.  
  23.  
  24.  
  25.  
  26. echo "Pozycja: {$position}<br />
  27. Object: {$object}<br />
  28. Rotacja: {$rotation}<br />
  29. Model: {$model}<br /><br />";
  30. }
  31. echo "<form method='post'><textarea name='test'></textarea><input type='submit' value='Send' /></form>";
  32. ?>

Wszystko jest wyświetlane ok, niestety nie trybi wyświetlanie objectu.
Go to the top of the page
+Quote Post
peter13135
post
Post #5





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

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


ale po co się tak męczysz, skoro do tego jest xml ?
Go to the top of the page
+Quote Post
fastlone
post
Post #6





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Gdyż moja wiedza nie sięga zasobów xml'a. Jedyne co umiem, to PHP, i to nie w jakimś zadowalającym stopniu.
Go to the top of the page
+Quote Post
peter13135
post
Post #7





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

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


I właśnie z tego powodu powinieneś użyć parsera XML,a nie męczyć się z regexpem
  1. <?
  2. $xml = simplexml_load_file('aaa.txt');//Tobie pewnie będzie wygodniej użyć funkcji simplexml_load_string
  3. echo $xml->position;
  4. echo $xml->rotation;
  5. echo $xml->model;
  6. echo $xml->attributes()->name[0];
  7. ?>


Ten post edytował peter13135 27.08.2011, 09:49:21
Go to the top of the page
+Quote Post

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: 24.08.2025 - 19:58